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{
38public:
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
93 void write_copy_value_method_cpp(FILE *f);
95 void write_basemethods_h(FILE *f, std::string is);
96 void write_basemethods_cpp(FILE *f);
97
98 void write_methods_h(FILE * f,
99 std::string /* indent space */ is,
100 std::vector<InterfaceField> fields,
101 std::vector<InterfacePseudoMap> pseudo_maps);
102 void write_methods_cpp(FILE * f,
103 std::string interface_classname,
104 std::string classname,
105 std::vector<InterfaceField> fields,
106 std::vector<InterfacePseudoMap> pseudo_maps,
107 std::string inclusion_prefix);
108
109 void write_management_funcs_cpp(FILE *f);
110
111 void write_enum_map_population(FILE *f);
112 void write_add_fieldinfo_calls(FILE *f, std::vector<InterfaceField> &fields);
113
114 void write_struct(FILE * f,
115 std::string name,
116 std::string /* indent space */ is,
117 std::vector<InterfaceField> fields);
118 void write_enum_maps_h(FILE *f);
119
120 void write_header(FILE *f, std::string filename);
121 void write_deflector(FILE *f);
122 void generate();
123
124private:
125 std::vector<InterfaceConstant> constants;
126 std::vector<InterfaceEnumConstant> enum_constants;
127 std::vector<InterfaceField> data_fields;
128 std::vector<InterfacePseudoMap> pseudo_maps;
129 std::vector<InterfaceMessage> messages;
130
131 std::string dir;
132 std::string filename_cpp;
133 std::string filename_h;
134 std::string filename_o;
135 std::string class_name;
136 std::string deflector;
137 std::string gendate;
138 std::string author;
139 std::string year;
140 std::string creation_date;
141 std::string data_comment;
142
143 const unsigned char *hash;
144 size_t hash_size;
145};
146
147#endif
Generator that transforms input from the InterfaceParser into valid C++ classes.
Definition: cpp_generator.h:37
void write_ctor_dtor_h(FILE *f, std::string is, std::string classname)
Write constructor and destructor to h file.
void write_struct(FILE *f, std::string name, std::string is, std::vector< InterfaceField > fields)
Write optimized struct.
void write_basemethods_cpp(FILE *f)
Write base methods.
void write_management_funcs_cpp(FILE *f)
Write management functions.
void write_deflector(FILE *f)
Write header deflector.
void write_h(FILE *f)
Write h file.
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.
void generate()
Generator cpp and h files.
void write_basemethods_h(FILE *f, std::string is)
Write base methods header entries.
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.
void write_methods_h(FILE *f, std::string is, std::vector< InterfaceField > fields)
Write methods to h file.
void write_message_clone_method_cpp(FILE *f, std::string classname)
Write message clone method.
void write_enum_tostring_method_cpp(FILE *f)
Write enum_tostring() method to CPP file.
void write_enum_map_population(FILE *f)
Write enum maps.
void write_constants_cpp(FILE *f)
Write constants to cpp file.
void write_copy_value_method_cpp(FILE *f)
Write copy_value() method to CPP file.
void write_add_fieldinfo_calls(FILE *f, std::vector< InterfaceField > &fields)
Write the add_fieldinfo() calls.
void write_cpp(FILE *f)
Write cpp file.
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.
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.
void write_create_message_method_cpp(FILE *f)
Write create_message() method to cpp file.
void write_enum_constants_tostring_cpp(FILE *f)
Write enum constant tostring methods to cpp file.
void write_messages_h(FILE *f)
Write messages to h file.
void write_messages_cpp(FILE *f)
Write messages to cpp file.
void write_constants_h(FILE *f)
Write constants to h file.
~CppInterfaceGenerator()
Destructor.
void write_enum_maps_h(FILE *f)
Write enum maps to header.
void write_header(FILE *f, std::string filename)
Write header to file.
void write_methods_cpp(FILE *f, std::string interface_classname, std::string classname, std::vector< InterfaceField > fields, std::string inclusion_prefix)
Write methods to cpp file.
void write_message_clone_method_h(FILE *f, std::string is)
Write message clone method header.