Fawkes API  Fawkes Development Version
cpp_generator.h
1 
2 /***************************************************************************
3  * cpp_generator.h - C++ Interface generator
4  *
5  * Created: Thu Oct 12 01:59:02 2006
6  * Copyright 2006-2008 Tim Niemueller [www.niemueller.de]
7  *
8  ****************************************************************************/
9 
10 /* This program is free software; you can redistribute it and/or modify
11  * it under the terms of the GNU General Public License as published by
12  * the Free Software Foundation; either version 2 of the License, or
13  * (at your option) any later version.
14  *
15  * This program is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18  * GNU Library General Public License for more details.
19  *
20  * Read the full text in the LICENSE.GPL file in the doc directory.
21  */
22 
23 #ifndef _INTERFACES_GENERATOR_CPP_GENERATOR_H_
24 #define _INTERFACES_GENERATOR_CPP_GENERATOR_H_
25 
26 #include "constant.h"
27 #include "enum_constant.h"
28 #include "field.h"
29 #include "message.h"
30 #include "pseudomap.h"
31 
32 #include <stdio.h>
33 #include <string>
34 #include <vector>
35 
37 {
38 public:
39  CppInterfaceGenerator(std::string directory,
40  std::string interface_name,
41  std::string config_basename,
42  std::string author,
43  std::string year,
44  std::string creation_date,
45  std::string data_comment,
46  const unsigned char * hash,
47  size_t hash_size,
48  const std::vector<InterfaceConstant> & constants,
49  const std::vector<InterfaceEnumConstant> &enum_constants,
50  const std::vector<InterfaceField> & data_fields,
51  const std::vector<InterfacePseudoMap> & pseudo_maps,
52  const std::vector<InterfaceMessage> & messages);
54 
55  void write_h(FILE *f);
56  void write_cpp(FILE *f);
57 
58  void write_constants_cpp(FILE *f);
59  void write_constants_h(FILE *f);
61 
62  void write_messages_cpp(FILE *f);
63  void write_messages_h(FILE *f);
64  void write_ctor_dtor_h(FILE *f, std::string /* indent space */ is, std::string classname);
65  void write_ctor_dtor_cpp(FILE * f,
66  std::string classname,
67  std::string super_class,
68  std::string inclusion_prefix,
69  std::vector<InterfaceField> fields,
70  std::vector<InterfaceMessage> messages);
71 
72  void write_message_ctor_dtor_h(FILE * f,
73  std::string /* indent space */ is,
74  std::string classname,
75  std::vector<InterfaceField> fields);
76  void write_message_ctor_dtor_cpp(FILE * f,
77  std::string classname,
78  std::string super_class,
79  std::string inclusion_prefix,
80  std::vector<InterfaceField> fields);
81  void write_message_clone_method_h(FILE *f, std::string is);
82  void write_message_clone_method_cpp(FILE *f, std::string classname);
83 
84  void
85  write_methods_h(FILE *f, std::string /* indent space */ is, std::vector<InterfaceField> fields);
86  void write_methods_cpp(FILE * f,
87  std::string interface_classname,
88  std::string classname,
89  std::vector<InterfaceField> fields,
90  std::string inclusion_prefix,
91  bool write_data_changed);
92 
93  void write_create_message_method_cpp(FILE *f);
94  void write_copy_value_method_cpp(FILE *f);
95  void write_enum_tostring_method_cpp(FILE *f);
96  void write_basemethods_h(FILE *f, std::string is);
97  void write_basemethods_cpp(FILE *f);
98 
99  void write_methods_h(FILE * f,
100  std::string /* indent space */ is,
101  std::vector<InterfaceField> fields,
102  std::vector<InterfacePseudoMap> pseudo_maps);
103  void write_methods_cpp(FILE * f,
104  std::string interface_classname,
105  std::string classname,
106  std::vector<InterfaceField> fields,
107  std::vector<InterfacePseudoMap> pseudo_maps,
108  std::string inclusion_prefix);
109 
110  void write_management_funcs_cpp(FILE *f);
111 
112  void write_enum_map_population(FILE *f);
113  void write_add_fieldinfo_calls(FILE *f, std::vector<InterfaceField> &fields);
114 
115  void write_struct(FILE * f,
116  std::string name,
117  std::string /* indent space */ is,
118  std::vector<InterfaceField> fields);
119  void write_enum_maps_h(FILE *f);
120 
121  void write_header(FILE *f, std::string filename);
122  void write_deflector(FILE *f);
123  void generate();
124 
125 private:
126  std::vector<InterfaceConstant> constants;
127  std::vector<InterfaceEnumConstant> enum_constants;
128  std::vector<InterfaceField> data_fields;
129  std::vector<InterfacePseudoMap> pseudo_maps;
130  std::vector<InterfaceMessage> messages;
131 
132  std::string dir;
133  std::string filename_cpp;
134  std::string filename_h;
135  std::string filename_o;
136  std::string class_name;
137  std::string deflector;
138  std::string gendate;
139  std::string author;
140  std::string year;
141  std::string creation_date;
142  std::string data_comment;
143 
144  const unsigned char *hash;
145  size_t hash_size;
146 };
147 
148 #endif
CppInterfaceGenerator::write_enum_tostring_method_cpp
void write_enum_tostring_method_cpp(FILE *f)
Write enum_tostring() method to CPP file.
Definition: cpp_generator.cpp:512
CppInterfaceGenerator::write_message_clone_method_cpp
void write_message_clone_method_cpp(FILE *f, std::string classname)
Write message clone method.
Definition: cpp_generator.cpp:613
CppInterfaceGenerator::generate
void generate()
Generator cpp and h files.
Definition: cpp_generator.cpp:1306
CppInterfaceGenerator::write_messages_h
void write_messages_h(FILE *f)
Write messages to h file.
Definition: cpp_generator.cpp:369
CppInterfaceGenerator::write_methods_cpp
void write_methods_cpp(FILE *f, std::string interface_classname, std::string classname, std::vector< InterfaceField > fields, std::string inclusion_prefix, bool write_data_changed)
Write methods to cpp file.
Definition: cpp_generator.cpp:924
CppInterfaceGenerator::write_create_message_method_cpp
void write_create_message_method_cpp(FILE *f)
Write create_message() method to cpp file.
Definition: cpp_generator.cpp:447
CppInterfaceGenerator::write_message_ctor_dtor_cpp
void write_message_ctor_dtor_cpp(FILE *f, std::string classname, std::string super_class, std::string inclusion_prefix, std::vector< InterfaceField > fields)
Write constructor and destructor for message to cpp file.
Definition: cpp_generator.cpp:781
CppInterfaceGenerator::write_basemethods_h
void write_basemethods_h(FILE *f, std::string is)
Write base methods header entries.
Definition: cpp_generator.cpp:1248
CppInterfaceGenerator::write_add_fieldinfo_calls
void write_add_fieldinfo_calls(FILE *f, std::vector< InterfaceField > &fields)
Write the add_fieldinfo() calls.
Definition: cpp_generator.cpp:657
CppInterfaceGenerator::write_message_clone_method_h
void write_message_clone_method_h(FILE *f, std::string is)
Write message clone method header.
Definition: cpp_generator.cpp:603
CppInterfaceGenerator::write_h
void write_h(FILE *f)
Write h file.
Definition: cpp_generator.cpp:1263
CppInterfaceGenerator::write_constants_cpp
void write_constants_cpp(FILE *f)
Write constants to cpp file.
Definition: cpp_generator.cpp:269
CppInterfaceGenerator::write_struct
void write_struct(FILE *f, std::string name, std::string is, std::vector< InterfaceField > fields)
Write optimized struct.
Definition: cpp_generator.cpp:126
CppInterfaceGenerator::write_constants_h
void write_constants_h(FILE *f)
Write constants to h file.
Definition: cpp_generator.cpp:327
CppInterfaceGenerator
Definition: cpp_generator.h:36
CppInterfaceGenerator::write_ctor_dtor_h
void write_ctor_dtor_h(FILE *f, std::string is, std::string classname)
Write constructor and destructor to h file.
Definition: cpp_generator.cpp:552
CppInterfaceGenerator::write_basemethods_cpp
void write_basemethods_cpp(FILE *f)
Write base methods.
Definition: cpp_generator.cpp:539
CppInterfaceGenerator::write_management_funcs_cpp
void write_management_funcs_cpp(FILE *f)
Write management functions.
Definition: cpp_generator.cpp:256
CppInterfaceGenerator::write_cpp
void write_cpp(FILE *f)
Write cpp file.
Definition: cpp_generator.cpp:219
CppInterfaceGenerator::write_header
void write_header(FILE *f, std::string filename)
Write header to file.
Definition: cpp_generator.cpp:172
CppInterfaceGenerator::write_enum_map_population
void write_enum_map_population(FILE *f)
Write enum maps.
Definition: cpp_generator.cpp:634
CppInterfaceGenerator::write_ctor_dtor_cpp
void write_ctor_dtor_cpp(FILE *f, std::string classname, std::string super_class, std::string inclusion_prefix, std::vector< InterfaceField > fields, std::vector< InterfaceMessage > messages)
Write constructor and destructor to cpp file.
Definition: cpp_generator.cpp:722
CppInterfaceGenerator::CppInterfaceGenerator
CppInterfaceGenerator(std::string directory, std::string interface_name, std::string config_basename, std::string author, std::string year, std::string creation_date, std::string data_comment, const unsigned char *hash, size_t hash_size, const std::vector< InterfaceConstant > &constants, const std::vector< InterfaceEnumConstant > &enum_constants, const std::vector< InterfaceField > &data_fields, const std::vector< InterfacePseudoMap > &pseudo_maps, const std::vector< InterfaceMessage > &messages)
Constructor.
Definition: cpp_generator.cpp:58
CppInterfaceGenerator::~CppInterfaceGenerator
~CppInterfaceGenerator()
Destructor.
Definition: cpp_generator.cpp:105
CppInterfaceGenerator::write_messages_cpp
void write_messages_cpp(FILE *f)
Write messages to cpp file.
Definition: cpp_generator.cpp:397
CppInterfaceGenerator::write_deflector
void write_deflector(FILE *f)
Write header deflector.
Definition: cpp_generator.cpp:209
CppInterfaceGenerator::write_message_ctor_dtor_h
void write_message_ctor_dtor_h(FILE *f, std::string is, std::string classname, std::vector< InterfaceField > fields)
Write constructor and destructor for message to h file.
Definition: cpp_generator.cpp:572
CppInterfaceGenerator::write_enum_maps_h
void write_enum_maps_h(FILE *f)
Write enum maps to header.
Definition: cpp_generator.cpp:158
CppInterfaceGenerator::write_methods_h
void write_methods_h(FILE *f, std::string is, std::vector< InterfaceField > fields)
Write methods to h file.
Definition: cpp_generator.cpp:1175
CppInterfaceGenerator::write_copy_value_method_cpp
void write_copy_value_method_cpp(FILE *f)
Write copy_value() method to CPP file.
Definition: cpp_generator.cpp:485
CppInterfaceGenerator::write_enum_constants_tostring_cpp
void write_enum_constants_tostring_cpp(FILE *f)
Write enum constant tostring methods to cpp file.
Definition: cpp_generator.cpp:293