1#ifndef CPPAD_CG_LANGUAGE_DOT_ARRAYS_INCLUDED
2#define CPPAD_CG_LANGUAGE_DOT_ARRAYS_INCLUDED
23std::string LanguageDot<Base>::printArrayCreationOp(OperationNode<Base>& array) {
24 CPPADCG_ASSERT_KNOWN(array.getArguments().size() > 0,
"Invalid number of arguments for array creation operation")
25 const std::vector<Argument<Base> >& args = array.getArguments();
26 const
size_t argSize = args.size();
29 _ss << "array[" << args.size() << "]";
30 std::
string name = printNodeDeclaration(array, _ss);
32 for (
size_t i = 0; i < argSize; i++) {
34 size_t newI = printArrayCreationUsingLoop(name, array, i,
nullptr);
39 std::string aName = print(args[i]);
41 printEdge(aName, name, std::to_string(i));
53std::string LanguageDot<Base>::printSparseArrayCreationOp(OperationNode<Base>& array) {
55 const std::vector<size_t>& info = array.getInfo();
56 CPPADCG_ASSERT_KNOWN(!info.empty(),
"Invalid number of information elements for sparse array creation operation")
58 const std::vector<Argument<Base> >& args = array.getArguments();
59 const
size_t argSize = args.size();
61 CPPADCG_ASSERT_KNOWN(info.size() == argSize + 1, "Invalid number of arguments for sparse array creation operation")
64 _ss << "sparse[" << info[0] << "]";
65 std::
string name = printNodeDeclaration(array, _ss);
70 for (
size_t i = 0; i < argSize; i++) {
72 size_t newI = printArrayCreationUsingLoop(name, array, i, &info[i]);
77 std::string aName = print(args[i]);
79 printEdge(aName, name, std::to_string(info[i + 1]));
94 const size_t* indexes) {
96 const std::vector<Argument<Base> >&
args = array.getArguments();
106 const Base& value = *
args[
starti].getParameter();
108 if (
args[
i].getParameter() ==
nullptr ||
109 *
args[
i].getParameter() != value) {
113 if (indexes !=
nullptr &&
i -
starti != indexes[
i] - indexes[
starti])
125 if (indexes !=
nullptr)
136 CPPADCG_ASSERT_KNOWN(
op.getArguments().size() == 2,
"Invalid number of arguments for array element operation")
140 std::
string name = makeNodeName(
op);
143 _ss << "[" <<
op.getInfo()[0] << "]";
144 printEdges(name,
op, std::
vector<std::
string>{}, std::vector<std::string>{_ss.str()});
size_t printArrayCreationUsingLoop(const std::string &arrayName, const OperationNode< Base > &array, size_t startj, const size_t *indexes)