DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
utils.cpp
Go to the documentation of this file.
1//
2// DUNE DAQ modification notice:
3// This file has been modified from the original ATLAS genconfig source for the DUNE DAQ project.
4// Fork baseline commit: genconfig-03-10-00 (2021-04-26).
5// Renamed since fork: yes (from src/utils.cpp to apps/utils.cpp).
6//
7
8
9#include "class_info.hpp"
10
11#include "oks/kernel.hpp"
12#include "oks/method.hpp"
13
14#include <ctype.h>
15
16#include <algorithm>
17#include <ctime>
18#include <initializer_list>
19#include <iomanip>
20#include <iostream>
21
22
23using namespace dunedaq::oks;
24using namespace dunedaq::oksdalgen;
25
31
32char
34{
35 return (isalnum(c) ? c : '_');
36}
37
38std::string
39alnum_name(const std::string& in)
40{
41 std::string s(in);
42 std::transform(s.begin(), s.end(), s.begin(), cvt_symbol);
43 return s;
44}
45
46std::string
47capitalize_name(const std::string& in)
48{
49 std::string s(in);
50 if (!in.empty())
51 {
52 if (isalpha(in[0]))
53 {
54 if (islower(in[0]))
55 s[0] = toupper(in[0]);
56 }
57 else
58 {
59 s.insert(s.begin(), '_');
60 }
61 }
62 return s;
63}
64
65
70
71void
72print_description(std::ostream& s, const std::string& text, const char * dx)
73{
74 if (!text.empty())
75 {
76 s << dx << " /**\n";
77
78 Oks::Tokenizer t(text, "\n");
79 std::string token;
80
81 while (!(token = t.next()).empty())
82 {
83 s << dx << " * " << token << std::endl;
84 }
85
86 s << dx << " */\n\n";
87 }
88}
89
90void
91print_indented(std::ostream& s, const std::string& text, const char * dx)
92{
93 if (!text.empty())
94 {
95 Oks::Tokenizer t(text, "\n");
96 std::string token;
97
98 while (!(token = t.next()).empty())
99 {
100 s << dx << token << std::endl;
101 }
102 }
103}
104
105std::string
106get_type(OksData::Type oks_type, bool is_cpp)
107{
108 switch (oks_type)
109 {
111 return "UNKNOWN";
113 return (is_cpp ? "int8_t" : "char");
115 return (is_cpp ? "uint8_t" : "byte");
117 return (is_cpp ? "int16_t" : "short");
119 return (is_cpp ? "uint16_t" : "short");
121 return (is_cpp ? "int32_t" : "int");
123 return (is_cpp ? "uint32_t" : "int");
125 return (is_cpp ? "int64_t" : "long");
127 return (is_cpp ? "uint64_t" : "long");
129 return "float";
131 return "double";
133 return (is_cpp ? "bool" : "boolean");
134
140 return (is_cpp ? "std::string" : "String");
141
146 return "funnytype";
147 }
148
149 return "invalid";
150}
151
152// std::string
153// get_java_impl_name(const std::string& s)
154// {
155// std::string str(s);
156// str += "_Impl";
157// return str;
158// }
159
160// std::string
161// get_java_helper_name(const std::string& s)
162// {
163// std::string str(s);
164// str += "_Helper";
165// return str;
166// }
167
168void
169gen_dump_application(std::ostream& s,
170 std::list<std::string>& class_names,
171 const std::string& cpp_ns_name,
172 const std::string& cpp_hdr_dir,
173 const char * conf_header,
174 const char * conf_name,
175 const char * headres_prologue,
176 const char * main_function_prologue
177 )
178{
179 s <<
180 " // *** this file is generated by oksdalgen ***\n"
181 "\n"
182 "#include \"conffwk/ConfigObject.hpp\"\n"
183 "#include \"" << conf_header << "\"\n\n";
184
185 // generate list of includes
186 for (const auto& i : class_names)
187 {
188 std::string hname(cpp_hdr_dir);
189 if (!hname.empty())
190 hname += '/';
191 hname += i;
192 s << "#include \"" << hname << ".hpp\"\n";
193 }
194
195 if (headres_prologue && *headres_prologue)
196 {
197 s << "\n // db implementation-specific headrers prologue\n\n" << headres_prologue << "\n";
198 }
199
200 s <<
201 "\n"
202 "\n"
203 "static void usage(const char * s)\n"
204 "{\n"
205 " std::cout << s << \" -d db-name -c class-name [-q query | -i object-id] [-t]\\n\"\n"
206 " \"\\n\"\n"
207 " \"Options/Arguments:\\n\"\n"
208 " \" -d | --data db-name mandatory name of the database\\n\"\n"
209 " \" -c | --class-name class-name mandatory name of class\\n\"\n"
210 " \" -q | --query query optional query to select class objects\\n\"\n"
211 " \" -i | --object-id object-id optional identity to select one object\\n\"\n"
212 " \" -t | --init-children all referenced objects are initialized (is used\\n\"\n"
213 " \" for debug purposes and performance measurements)\\n\"\n"
214 " \" -h | --help print this message\\n\"\n"
215 " \"\\n\"\n"
216 " \"Description:\\n\"\n"
217 " \" The program prints out object(s) of given class.\\n\"\n"
218 " \" If no query or object id is provided, all objects of the class are printed.\\n\"\n"
219 " \" It is automatically generated by oksdalgen utility.\\n\"\n"
220 " \"\\n\";\n"
221 "}\n"
222 "\n"
223 "static void no_param(const char * s)\n"
224 "{\n"
225 " std::cerr << \"ERROR: the required argument for option \\\'\" << s << \"\\\' is missing\\n\\n\";\n"
226 " exit (EXIT_FAILURE);\n"
227 "}\n"
228 "\n"
229 "int main(int argc, char *argv[])\n"
230 "{\n";
231
232 if (main_function_prologue && *main_function_prologue)
233 {
234 s << " // db implementation-specific main function prologue\n\n " << main_function_prologue << "\n\n";
235 }
236
237 s <<
238 " // parse parameters\n"
239 "\n"
240 " const char * db_name = nullptr;\n"
241 " const char * object_id = nullptr;\n"
242 " const char * query = \"\";\n"
243 " std::string class_name;\n"
244 " bool init_children = false;\n"
245 "\n"
246 " for(int i = 1; i < argc; i++) {\n"
247 " const char * cp = argv[i];\n"
248 " if(!strcmp(cp, \"-h\") || !strcmp(cp, \"--help\")) {\n"
249 " usage(argv[0]);\n"
250 " return 0;\n"
251 " }\n"
252 " if(!strcmp(cp, \"-t\") || !strcmp(cp, \"--init-children\")) {\n"
253 " init_children = true;\n"
254 " }\n"
255 " else if(!strcmp(cp, \"-d\") || !strcmp(cp, \"--data\")) {\n"
256 " if(++i == argc || argv[i][0] == '-') { no_param(cp); } else { db_name = argv[i]; }\n"
257 " }\n"
258 " else if(!strcmp(cp, \"-c\") || !strcmp(cp, \"--class-name\")) {\n"
259 " if(++i == argc || argv[i][0] == '-') { no_param(cp); } else { class_name = argv[i]; }\n"
260 " }\n"
261 " else if(!strcmp(cp, \"-i\") || !strcmp(cp, \"--object-id\")) {\n"
262 " if(++i == argc || argv[i][0] == '-') { no_param(cp); } else { object_id = argv[i]; }\n"
263 " }\n"
264 " else if(!strcmp(cp, \"-q\") || !strcmp(cp, \"--query\")) {\n"
265 " if(++i == argc || argv[i][0] == '-') { no_param(cp); } else { query = argv[i]; }\n"
266 " }\n"
267 " else {\n"
268 " std::cerr << \"ERROR: bad parameter \" << cp << std::endl;\n"
269 " usage(argv[0]);\n"
270 " return (EXIT_FAILURE);\n"
271 " }\n"
272 " }\n"
273 "\n"
274 " if(db_name == nullptr) {\n"
275 " std::cerr << \"ERROR: no database name provided\\n\";\n"
276 " return (EXIT_FAILURE);\n"
277 " }\n"
278 "\n"
279 " if(class_name.empty()) {\n"
280 " std::cerr << \"ERROR: no class name provided\\n\";\n"
281 " return (EXIT_FAILURE);\n"
282 " }\n"
283 "\n"
284 " if(*query != 0 && object_id != nullptr) {\n"
285 " std::cerr << \"ERROR: only one parameter -i or -q can be provided\\n\";\n"
286 " return (EXIT_FAILURE);\n"
287 " }\n"
288 "\n"
289 "\n"
290 "std::cout << std::boolalpha;\n"
291 "\n";
292
293 if (conf_name)
294 {
295 s <<
296 " " << conf_name << " impl_conf;\n"
297 "\n"
298 " {\n"
299 " dunedaq::conffwk::Configuration conf(db_name, &impl_conf);\n";
300 }
301 else
302 {
303 s <<
304 " try {\n"
305 " dunedaq::conffwk::Configuration conf(db_name);\n";
306 }
307
308 s <<
309 "\n"
310 " if(!conf.loaded()) {\n"
311 " std::cerr << \"Can not load database: \" << db_name << std::endl;\n"
312 " return (EXIT_FAILURE);\n"
313 " }\n"
314 " \n"
315 " std::vector< dunedaq::conffwk::ConfigObject > objects;\n"
316 " \n"
317 " if(object_id) {\n"
318 " dunedaq::conffwk::ConfigObject obj;\n"
319 " try {\n"
320 " conf.get(class_name, object_id, obj, 1);\n"
321 " }\n"
322 " catch (dunedaq::conffwk::NotFound & ex) {\n"
323 " std::cerr << \"Can not get object \\'\" << object_id << \"\\' of class \\'\" << class_name << \"\\':\\n\" << ex << std::endl;\n"
324 " return (EXIT_FAILURE);\n"
325 " }\n"
326 " objects.push_back(obj);\n"
327 " }\n"
328 " else {\n"
329 " try {\n"
330 " conf.get(class_name, objects, query, 1);\n"
331 " }\n"
332 " catch (dunedaq::conffwk::NotFound & ex) {\n"
333 " std::cerr << \"Can not get objects of class \\'\" << class_name << \"\\':\\n\" << ex << std::endl;\n"
334 " return (EXIT_FAILURE);\n"
335 " }\n"
336 " }\n"
337 " \n"
338 " struct SortByUId {\n"
339 " bool operator() (const dunedaq::conffwk::ConfigObject * o1, const dunedaq::conffwk::ConfigObject * o2) const {\n"
340 " return (o1->UID() < o2->UID());\n"
341 " };\n"
342 " };\n"
343 " \n"
344 " std::set< dunedaq::conffwk::ConfigObject *, SortByUId > sorted_objects;\n"
345 " \n"
346 " for(auto& i : objects)\n"
347 " sorted_objects.insert(&i);\n"
348 " \n"
349 " for(auto& i : sorted_objects) {\n";
350
351 for (std::list<std::string>::iterator i = class_names.begin(); i != class_names.end(); ++i)
352 {
353 const char * op = (i == class_names.begin() ? "if" : "else if");
354 std::string cname(cpp_ns_name);
355
356 if (!cname.empty())
357 cname += "::";
358
359 cname += *i;
360
361 s <<
362 " " << op << "(class_name == \"" << *i << "\") {\n"
363 " std::cout << *conf.get<" << cname << ">(*i, init_children) << std::endl;\n"
364 " }\n";
365 }
366
367 s <<
368 " else {\n"
369 " std::cerr << \"ERROR: do not know how to dump object of \" << class_name << \" class\\n\";\n"
370 " return (EXIT_FAILURE);\n"
371 " }\n"
372 " }\n"
373 " }\n"
374 " catch (dunedaq::conffwk::Exception & ex) {\n"
375 " std::cerr << \"Caught \" << ex << std::endl;\n"
376 " return (EXIT_FAILURE);\n"
377 " }\n"
378 "\n"
379 " return 0;\n"
380 "}\n";
381}
382
383
384void
385write_info_file(std::ostream& s,
386 const std::string& cpp_namespace,
387 const std::string& cpp_header_dir,
388 // const std::string& java_pname,
389 const std::set<const OksClass *, std::less<const OksClass *> >& classes)
390{
391 std::time_t now = std::time(nullptr);
392
393 s << "// the file is generated " << std::put_time(std::localtime(&now), "%F %T %Z") << " by oksdalgen utility\n"
394 "// *** do not modify the file ***\n"
395 "c++-namespace=" << cpp_namespace << "\n"
396 "c++-header-dir-prefix=" << cpp_header_dir << "\n"
397 // "java-package-name=" << java_pname << "\n"
398 "classes:\n";
399
400 for (const auto& i : classes)
401 s << " " << i->get_name() << std::endl;
402}
403
404
409
410std::string
411get_full_cpp_class_name(const OksClass * c, const ClassInfo::Map& cl_info, const std::string & cpp_ns_name)
412{
413 std::string s;
414 ClassInfo::Map::const_iterator idx = cl_info.find(c);
415
416 if (idx != cl_info.end())
417 s = (*idx).second.get_namespace();
418 else
419 s = cpp_ns_name;
420
421 if (!s.empty())
422 s += "::";
423
424 s += alnum_name(c->get_name());
425
426 return s;
427}
428
429
430std::string
431get_include_dir(const OksClass * c, const ClassInfo::Map& cl_info, const std::string& cpp_hdr_dir)
432{
433 std::string s;
434
435 ClassInfo::Map::const_iterator idx = cl_info.find(c);
436
437 if (idx != cl_info.end())
438 {
439 const std::string include_prefix = (*idx).second.get_include_prefix();
440 if (!include_prefix.empty())
441 {
442 s = include_prefix;
443 s += '/';
444 }
445 }
446 else if (!cpp_hdr_dir.empty())
447 {
448 s = cpp_hdr_dir;
449 s += '/';
450 }
451
452 s += alnum_name(c->get_name());
453
454 return s;
455}
456
457
458// const std::string&
459// get_package_name(const OksClass * c, const ClassInfo::Map& cl_info, const std::string& java_p_name)
460// {
461// std::string s;
462
463// ClassInfo::Map::const_iterator idx = cl_info.find(c);
464
465// if (idx != cl_info.end())
466// {
467// return (*idx).second.get_package_name();
468// }
469// else
470// {
471// return java_p_name;
472// }
473// }
474
475bool
477 ClassInfo::Map& cl_info,
478 const OksClass * c,
479 const std::list<std::string>& include_dirs,
480 const std::list<std::string>& user_classes,
481 bool verbose)
482{
483 if (cl_info.find(c) != cl_info.end())
484 return true;
485
486 // process list of user-defined classes first
487
488 for (const auto &s : user_classes)
489 {
490 std::string::size_type idx = s.find("::");
491 std::string::size_type idx2 = s.find("@", idx + 2);
492
493 std::string cpp_ns_name;
494 std::string class_name;
495 std::string cpp_dir_name;
496
497 if (idx == std::string::npos)
498 {
499 class_name = s.substr(0, idx2);
500 }
501 else
502 {
503 cpp_ns_name = s.substr(0, idx);
504 class_name = s.substr(idx + 2, idx2 - idx - 2);
505 }
506
507 if (idx2 != std::string::npos)
508 cpp_dir_name = s.substr(idx2 + 1);
509
510 if (class_name == c->get_name())
511 {
512 cl_info[c] = ClassInfo(cpp_ns_name, cpp_dir_name);
513 if (verbose)
514 {
515 std::cout << " * class " << c->get_name() << " is defined by user in ";
516
517 if (cpp_ns_name.empty())
518 std::cout << "global namespace";
519 else
520 std::cout << "namespace \"" << cpp_ns_name << '\"';
521
522 if (!cpp_dir_name.empty())
523 std::cout << " with \"" << cpp_dir_name << "\" include prefix";
524
525 std::cout << std::endl;
526 }
527
528 return true;
529 }
530 }
531
532 // process oksdalgen files
533
534 if (verbose)
535 std::cout << "Looking for oksdalgen info files ...\n";
536
537 bool found_class_declaration = false;
538
539 for (const auto& i : include_dirs)
540 {
541 std::string file_name(i);
542 file_name += "/oksdalgen.info";
543
544 std::ifstream f(file_name.c_str());
545
546 if (f)
547 {
548 if (verbose)
549 std::cout << " *** found file \"" << file_name << "\" ***\n";
550
551 std::string cpp_ns_name;
552 std::string cpp_dir_name;
553 // std::string java_pname;
554 bool is_class = false;
555
556 std::string s;
557 while (std::getline(f, s))
558 {
559 if (s.find("//") != std::string::npos)
560 {
561 if (verbose)
562 std::cout << " - skip comment \"" << s << "\"\n";
563 }
564 else if (s.find("classes:") != std::string::npos)
565 {
566 if (verbose)
567 std::cout << " - found classes keyword\n";
568 is_class = true;
569 }
570 else
571 {
572 const char s1[] = "c++-namespace=";
573 std::string::size_type idx = s.find(s1);
574 if (idx != std::string::npos)
575 {
576 cpp_ns_name = s.substr(sizeof(s1) - 1);
577 if (verbose)
578 std::cout << " - c++ namespace = \"" << cpp_ns_name << "\"\n";
579 }
580 else
581 {
582 const char s2[] = "c++-header-dir-prefix=";
583 std::string::size_type idx = s.find(s2);
584 if (idx != std::string::npos)
585 {
586 cpp_dir_name = s.substr(sizeof(s2) - 1);
587 if (verbose)
588 std::cout << " - c++ header dir prefix name = \"" << cpp_dir_name << "\"\n";
589 }
590 // else
591 // {
592 // const char s3[] = "java-package-name=";
593 // std::string::size_type idx = s.find(s3);
594 // if (idx != std::string::npos)
595 // {
596 // java_pname = s.substr(sizeof(s3) - 1);
597 // if (verbose)
598 // std::cout << " - java package name = \"" << java_pname << "\"\n";
599 // }
600 else if (is_class)
601 {
602 std::string cname = s.substr(2);
603 OksClass * cl = c->get_kernel()->find_class(cname);
604 if (cl && cl_info.find(cl) == cl_info.end())
605 {
606 cl_info[cl] = ClassInfo(cpp_ns_name, cpp_dir_name);
607 if (verbose)
608 std::cout << " * class " << cl->get_name() << " is defined by " << file_name << " in namespace \"" << cpp_ns_name << "\" with include prefix \"" << cpp_dir_name << "\"\n";
609 if (cl == c)
610 found_class_declaration = true;
611 }
612 else if (verbose)
613 {
614 std::cout << " - skip class \"" << cname << "\" declaration\n";
615 }
616 }
617 else
618 {
619 std::cerr << "Failed to parse line \"" << s << "\"\n";
620 }
621 // }
622 }
623 }
624 }
625 }
626 else if (verbose)
627 {
628 std::cout << " *** file \"" << file_name << "\" does not exist ***\n";
629 }
630 }
631
632 return found_class_declaration;
633}
634
635std::string
636int2dx(int level)
637{
638 return std::string(level * 2, ' ');
639}
640
641int
642open_cpp_namespace(std::ostream& s, const std::string& value)
643{
644 int level = 0;
645 std::string dx;
646
647 if (!value.empty())
648 {
649 Oks::Tokenizer t(value, ":");
650 std::string token;
651
652 while (!(token = t.next()).empty())
653 {
654 s << dx << "namespace " << token << " {\n";
655 level++;
656 dx += " ";
657 }
658 }
659
660 return level;
661}
662
663void
664close_cpp_namespace(std::ostream& s, int level)
665{
666 while (level > 0)
667 {
668 std::string dx = int2dx(--level);
669 s << dx << "}\n";
670 }
671}
672
673
674
675const std::string begin_header_prologue("BEGIN_HEADER_PROLOGUE");
676const std::string end_header_prologue("END_HEADER_PROLOGUE");
677const std::string begin_header_epilogue("BEGIN_HEADER_EPILOGUE");
678const std::string end_header_epilogue("END_HEADER_EPILOGUE");
679const std::string begin_public_section("BEGIN_PUBLIC_SECTION"); // => java interface
680const std::string end_public_section("END_PUBLIC_SECTION");
681const std::string begin_private_section("BEGIN_PRIVATE_SECTION"); // => c++ and java
682const std::string end_private_section("END_PRIVATE_SECTION");
683const std::string begin_member_initializer_list("BEGIN_MEMBER_INITIALIZER_LIST");
684const std::string end_member_initializer_list("END_MEMBER_INITIALIZER_LIST");
685const std::string has_add_algo_1("ADD_ALGO_1");
686const std::string has_add_algo_n("ADD_ALGO_N");
687
688static std::string
689get_method_header_x_logue(OksMethodImplementation * mi, const std::string& begin, const std::string& end)
690{
691 std::string::size_type begix_idx = mi->get_body().find(begin, 0);
692 if (begix_idx == std::string::npos)
693 return "";
694 std::string::size_type end_idx = mi->get_body().find(end, begix_idx + begin.size());
695 if (end_idx == std::string::npos)
696 return "";
697 return mi->get_body().substr(begix_idx + begin.size(), end_idx - begix_idx - begin.size());
698}
699
700std::string
705
706std::string
711
712std::string
717
718std::string
723
724std::string
729
730bool
732{
733 return (mi->get_body().find(has_add_algo_1, 0) != std::string::npos);
734}
735
736bool
738{
739 return (mi->get_body().find(has_add_algo_n, 0) != std::string::npos);
740}
741
742static void
743remove_string_section(std::string& s, const std::string& begin, const std::string& end)
744{
745 std::string::size_type begix_idx = s.find(begin, 0);
746 if (begix_idx == std::string::npos)
747 return;
748
749 std::string::size_type end_idx = (end.empty() ? (begix_idx + begin.size()) : s.find(end, begix_idx + begin.size()));
750 if (end_idx == std::string::npos)
751 return;
752
753 end_idx += end.size();
754 while (s[end_idx] == '\n')
755 end_idx++;
756
757 s.erase(begix_idx, end_idx - begix_idx);
758}
759
760std::string
777
779find_method_implementation(const OksMethod * method, std::initializer_list<std::string> names)
780{
781 for (const auto& name : names)
782 {
783 if (OksMethodImplementation * mi = method->find_implementation(name))
784 if (mi->get_prototype().empty() == false)
785 return mi;
786 }
787
788 return nullptr;
789}
790
793{
794 return find_method_implementation(method, { "c++", "C++" });
795}
796
The OKS class.
Definition class.hpp:205
const std::string & get_name() const noexcept
Definition class.hpp:368
OKS method implementation class.
Definition method.hpp:40
const std::string & get_body() const noexcept
Definition method.hpp:104
OKS method class.
Definition method.hpp:158
OksMethodImplementation * find_implementation(const std::string &language) const
Find method implementation.
Definition method.cpp:359
String tokenizer.
Definition defs.hpp:63
const std::string next()
Definition time.cpp:194
std::map< const oks::OksClass *, ClassInfo, SortByName > Map
void print_description()
static int64_t now()
const std::string end_private_section("END_PRIVATE_SECTION")
std::string get_type(OksData::Type oks_type, bool is_cpp)
Definition utils.cpp:106
static std::string get_method_header_x_logue(OksMethodImplementation *mi, const std::string &begin, const std::string &end)
Definition utils.cpp:689
std::string get_method_header_prologue(OksMethodImplementation *mi)
Definition utils.cpp:701
const std::string end_header_epilogue("END_HEADER_EPILOGUE")
bool get_add_algo_1(OksMethodImplementation *mi)
Definition utils.cpp:731
static void remove_string_section(std::string &s, const std::string &begin, const std::string &end)
Definition utils.cpp:743
const std::string begin_header_epilogue("BEGIN_HEADER_EPILOGUE")
std::string get_public_section(OksMethodImplementation *mi)
Definition utils.cpp:713
void close_cpp_namespace(std::ostream &s, int level)
Definition utils.cpp:664
std::string get_private_section(OksMethodImplementation *mi)
Definition utils.cpp:719
static OksMethodImplementation * find_method_implementation(const OksMethod *method, std::initializer_list< std::string > names)
Definition utils.cpp:779
const std::string begin_member_initializer_list("BEGIN_MEMBER_INITIALIZER_LIST")
const std::string has_add_algo_n("ADD_ALGO_N")
std::string get_full_cpp_class_name(const OksClass *c, const ClassInfo::Map &cl_info, const std::string &cpp_ns_name)
Definition utils.cpp:411
const std::string end_member_initializer_list("END_MEMBER_INITIALIZER_LIST")
char cvt_symbol(char c)
Definition utils.cpp:33
const std::string has_add_algo_1("ADD_ALGO_1")
OksMethodImplementation * find_cpp_method_implementation(const OksMethod *method)
Definition utils.cpp:792
const std::string begin_header_prologue("BEGIN_HEADER_PROLOGUE")
int open_cpp_namespace(std::ostream &s, const std::string &value)
Definition utils.cpp:642
std::string get_member_initializer_list(OksMethodImplementation *mi)
Definition utils.cpp:725
const std::string begin_public_section("BEGIN_PUBLIC_SECTION")
const std::string begin_private_section("BEGIN_PRIVATE_SECTION")
std::string get_method_implementation_body(OksMethodImplementation *mi)
Definition utils.cpp:761
void print_indented(std::ostream &s, const std::string &text, const char *dx)
Definition utils.cpp:91
bool process_external_class(ClassInfo::Map &cl_info, const OksClass *c, const std::list< std::string > &include_dirs, const std::list< std::string > &user_classes, bool verbose)
Definition utils.cpp:476
std::string int2dx(int level)
Definition utils.cpp:636
const std::string end_public_section("END_PUBLIC_SECTION")
const std::string end_header_prologue("END_HEADER_PROLOGUE")
std::string get_include_dir(const OksClass *c, const ClassInfo::Map &cl_info, const std::string &cpp_hdr_dir)
Definition utils.cpp:431
std::string alnum_name(const std::string &in)
Definition utils.cpp:39
bool get_add_algo_n(OksMethodImplementation *mi)
Definition utils.cpp:737
std::string get_method_header_epilogue(OksMethodImplementation *mi)
Definition utils.cpp:707
std::string capitalize_name(const std::string &in)
Definition utils.cpp:47
void write_info_file(std::ostream &s, const std::string &cpp_namespace, const std::string &cpp_header_dir, const std::set< const OksClass *, std::less< const OksClass * > > &classes)
Definition utils.cpp:385
void gen_dump_application(std::ostream &s, std::list< std::string > &class_names, const std::string &cpp_ns_name, const std::string &cpp_hdr_dir, const char *conf_header, const char *conf_name, const char *headres_prologue, const char *main_function_prologue)
Definition utils.cpp:169