Jpp  19.1.0-rc.1
the software that should make you happy
Classes | Functions
classdef2code.cc File Reference
#include <filesystem>
#include <fstream>
#include <iomanip>
#include <iostream>
#include <regex>
#include <sstream>
#include <stdexcept>
#include <string>
#include <vector>

Go to the source code of this file.

Classes

struct  Includes
 

Functions

void outputTypes (std::ostream &out, const Includes &includes)
 
void outputIncludes (std::ostream &out, const Includes &includes)
 
Includes parseIncludes (const std::vector< std::string > &includes)
 
int main (int argc, char **argv)
 Helper program to create includes files for types and includes from a list of JDB includes. More...
 

Function Documentation

◆ outputTypes()

void outputTypes ( std::ostream &  out,
const Includes includes 
)

Definition at line 19 of file classdef2code.cc.

19  {
20  out << R"(#ifndef __JDB__JDBTypes__
21 #define __JDB__JDBTypes__
22 
23 /**
24  * @file
25  * This file is automatically created by classdef2code during CMake build.
26  */
27 
28 namespace JDATABASE {
29 
30 )";
31 
32  for (auto v1 : includes.api) {
std::vector< std::string > api

◆ outputIncludes()

void outputIncludes ( std::ostream &  out,
const Includes includes 
)

Definition at line 34 of file classdef2code.cc.

36  {\n\n";
37  for (auto v2 : includes.apiV2) {
38  out << " class " << v2 << ";\n";
39  }
40 
const int n
Definition: JPolint.hh:786

◆ parseIncludes()

Includes parseIncludes ( const std::vector< std::string > &  includes)

Definition at line 42 of file classdef2code.cc.

48  {
49  out << R"(/**
50  * @file
51  * This file is automatically created by classdef2code during CMake build.
52  */
53 
54 )";
55  for (auto i : includes.files) {
56  std::filesystem::path p(i);
57  out << "#include \"JDB/" << p.filename().string() << "\"\n";
58  }
59 }
60 
62  Includes cn;
63  for (auto infile : includes) {
64  ifstream in(infile);
65  if (!in.is_open()) {
66  std::cerr << "Cannot open input file " << infile << "\n";
67  exit(1);
68  }
69  string line;
70  std::regex classDefRegex(R"(ClassDef\s*(?:NV)?\‍(\s*(.*)\s*,\s*(\d*))");
71  std::regex apiV2Regex("namespace.*APIV2");
72  std::smatch classDefMatch;
73  bool v2{false};
74  string stype{""};
75  bool used{false};
76  while (getline(in, line)) {
77  if (std::regex_search(line, apiV2Regex)) {
78  v2 = true;
Includes parseIncludes(const std::vector< std::string > &includes)
std::istream & getline(std::istream &in, JString &object)
Read string from input stream until end of line.
Definition: JString.hh:478

◆ main()

int main ( int  argc,
char **  argv 
)

Helper program to create includes files for types and includes from a list of JDB includes.

Definition at line 85 of file classdef2code.cc.

86  {
87  cn.api.emplace_back(stype);
88  used = true;
89  }
90  }
91  }
92  if (used) {
93  cn.files.emplace_back(infile);
94  }
95  }
96  return cn;
97 }
98 
99 /**
100  * Helper program to create includes files for types and includes
101  * from a list of JDB includes
102  *
103  */
104 int main(int argc, char **argv) {
105  if (argc < 5) {
106  throw runtime_error("need at least 4 arguments");
107  }
108  string outfile = argv[1]; // output file name
109  string outputType = argv[2]; // output type ("types" or "includes")
110  vector<string> classdefs; // input include files (absolute paths or relative
111  // to current dir)
112  for (int i = 3; i < argc; i++) {
113  classdefs.emplace_back(argv[i]);
114  }
115 
116  auto includes = parseIncludes(classdefs);
int main(int argc, char **argv)
Helper program to create includes files for types and includes from a list of JDB includes.