1 #ifndef CPPAD_CG_LANGUAGE_DOT_ARRAYS_INCLUDED 2 #define CPPAD_CG_LANGUAGE_DOT_ARRAYS_INCLUDED 22 std::string LanguageDot<Base>::printArrayCreationOp(OperationNode<Base>& array) {
23 CPPADCG_ASSERT_KNOWN(array.getArguments().size() > 0,
"Invalid number of arguments for array creation operation");
24 const std::vector<Argument<Base> >& args = array.getArguments();
25 const size_t argSize = args.size();
28 _ss <<
"array[" << args.size() <<
"]";
29 std::string name = printNodeDeclaration(array, _ss);
31 for (
size_t i = 0; i < argSize; i++) {
33 size_t newI = printArrayCreationUsingLoop(name, array, i,
nullptr);
38 std::string aName = print(args[i]);
40 printEdge(aName, name, std::to_string(i));
52 std::string LanguageDot<Base>::printSparseArrayCreationOp(OperationNode<Base>& array) {
54 const std::vector<size_t>& info = array.getInfo();
55 CPPADCG_ASSERT_KNOWN(info.size() > 0,
"Invalid number of information elements for sparse array creation operation");
57 const std::vector<Argument<Base> >& args = array.getArguments();
58 const size_t argSize = args.size();
60 CPPADCG_ASSERT_KNOWN(info.size() == argSize + 1,
"Invalid number of arguments for sparse array creation operation");
63 _ss <<
"sparse[" << info[0] <<
"]";
64 std::string name = printNodeDeclaration(array, _ss);
69 for (
size_t i = 0; i < argSize; i++) {
71 size_t newI = printArrayCreationUsingLoop(name, array, i, &info[i]);
76 std::string aName = print(args[i]);
78 printEdge(aName, name, std::to_string(info[i + 1]));
93 const size_t* indexes) {
95 const std::vector<Argument<Base> >& args = array.
getArguments();
96 const size_t argSize = args.size();
97 size_t i = starti + 1;
102 if(args[starti].getParameter() ==
nullptr)
105 const Base& value = *args[starti].getParameter();
106 for (; i < argSize; i++) {
107 if (args[i].getParameter() ==
nullptr ||
108 *args[i].getParameter() != value) {
112 if (indexes !=
nullptr && i - starti != indexes[i] - indexes[starti])
119 std::string aName = print(args[starti]);
124 if (indexes !=
nullptr)
125 printEdge(aName, arrayName, std::to_string(indexes[starti]) +
"..." + std::to_string(indexes[i]));
127 printEdge(aName, arrayName, std::to_string(starti) +
"..." + std::to_string(i));
135 CPPADCG_ASSERT_KNOWN(op.
getArguments().size() == 2,
"Invalid number of arguments for array element operation");
136 CPPADCG_ASSERT_KNOWN(op.
getArguments()[0].getOperation() !=
nullptr,
"Invalid argument for array element operation");
137 CPPADCG_ASSERT_KNOWN(op.
getInfo().size() == 1,
"Invalid number of information indexes for array element operation");
139 std::string name = makeNodeName(op);
142 _ss <<
"[" << op.
getInfo()[0] <<
"]";
143 printEdges(name, op, std::vector<std::string>{}, std::vector<std::string>{_ss.str()});
const std::vector< Argument< Base > > & getArguments() const
size_t printArrayCreationUsingLoop(const std::string arrayName, const OperationNode< Base > &array, size_t startj, const size_t *indexes)
const std::vector< size_t > & getInfo() const