PhoenixProtocolBuffer  1.0.1
Set of tools to decode offset from protocol buffer
Loading...
Searching...
No Matches
FieldParser.h
Go to the documentation of this file.
1/***************************************
2 Auteur : Pierre Aubert
3 Mail : pierre.aubert@lapp.in2p3.fr
4 Licence : CeCILL-C
5****************************************/
6
7#ifndef __FIELDPARSER_H__
8#define __FIELDPARSER_H__
9
10#include <map>
11#include "AbtractField.h"
12#include "phoenix_field.h"
13
14class FieldParser;
15typedef std::vector<FieldParser*> VecFieldParser;
16typedef std::map<size_t, FieldParser *> MapFieldParser;
17
20 public:
22 virtual ~FieldParser();
23
24 FieldParser * addSubMessage(size_t fieldId, const PString & fieldName = "");
25 FieldParser * addSubMessage(const FieldConfig & field);
26 FieldParser * addSubMessage(const FieldConfig & field, const PString & childName);
27 FieldParser * addSubMessage(FieldConfig & childConfig, const FieldConfig & field, const PString & childName);
28
29 template<typename T>
30 void addParseFieldValue(T* varPtr, size_t fieldId, const PString & fieldName = "");
31 template<typename T>
32 void addParseFieldArray(T** tabPtr, size_t * nbElement, size_t fieldId, const PString & fieldName = "");
33
34 template<typename T>
35 bool addParseFieldValue(T* varPtr, const FieldConfig & field);
36 template<typename T>
37 bool addParseFieldValue(T* varPtr, const FieldConfig & field, const PString & childName);
38 template<typename T>
39 bool addParseFieldArray(T** tabPtr, size_t * nbElement, const FieldConfig & field);
40 template<typename T>
41 bool addParseFieldArray(T** tabPtr, size_t * nbElement, const FieldConfig & field, const PString & childName);
42
43 void addParseFieldEnum(size_t* varPtr, size_t fieldId, const PString & fieldName = "");
44 bool addParseFieldEnum(size_t* varPtr, const FieldConfig & field);
45 bool addParseFieldEnum(size_t* varPtr, const FieldConfig & field, const PString & childName);
46
47 bool load(const std::vector<char> & message, std::ostream & out = std::cerr);
48 bool load(const char * message, size_t nbByte, std::ostream & out = std::cerr);
49
50 void resetOffset();
51 void clear();
52 void print(std::ostream & out = std::cout, const PString & indentation = "") const;
53 private:
55 FieldParser * createSubFieldParser(size_t fieldId, const PString & fieldName);
56 void setBaseField(size_t fieldId, const PString & fieldName);
57 template<typename T>
58 bool checkInputType(const FieldConfig & field);
59 bool checkInputType(FieldType::FieldType type, const FieldConfig & field);
60
61 bool loadComputeOffset(char* & iter, const char* endMessage, const char * message, std::ostream & out);
62 bool loadComputeFieldOffset(char* & iter, const char* endMessage, const char * message, size_t fieldId, size_t fieldType, std::ostream & out);
63 bool loadComputeFieldOffsetArray(char* & iter, const char* endMessage, const char * message, std::ostream & out);
64 void createMapFieldParser(MapFieldParser & mapFieldParser);
65 bool loadFromOffset(char* & iter);
66 bool loadFieldFromOffset(char* & iter);
67
72};
73
74
75
76#include "FieldParser_impl.h"
77
78#endif
79
std::vector< FieldParser * > VecFieldParser
Definition FieldParser.h:15
std::map< size_t, FieldParser * > MapFieldParser
Definition FieldParser.h:16
Abtract field to be read from a protocol buffer message.
Configuration to be used to create a field from a yml file.
Parser of Field.
Definition FieldParser.h:19
void resetOffset()
Reset the offset of the FieldParser.
void createMapFieldParser(MapFieldParser &mapFieldParser)
Create the map of Field parser.
AbtractField p_field
Field to be parsed.
Definition FieldParser.h:69
void print(std::ostream &out=std::cout, const PString &indentation="") const
Print the FieldParser.
void setBaseField(size_t fieldId, const PString &fieldName)
Set the basis of a Field to be parsed.
bool checkInputType(const FieldConfig &field)
Check the template type with the FieldConfig.
virtual ~FieldParser()
Destructor of FieldParser.
bool load(const std::vector< char > &message, std::ostream &out=std::cerr)
Load the Fields of the FieldParser (without offset on the first time and with offsets after)
bool loadComputeFieldOffset(char *&iter, const char *endMessage, const char *message, size_t fieldId, size_t fieldType, std::ostream &out)
Compute FIeld offset.
void clear()
Clear all the children of the FieldParser.
FieldParser * addSubMessage(size_t fieldId, const PString &fieldName="")
Add a sub message into the FieldParser.
bool loadFromOffset(char *&iter)
Load the Fields directly from the offset.
void addParseFieldEnum(size_t *varPtr, size_t fieldId, const PString &fieldName="")
Add a sub FieldParser for a enum type.
void addParseFieldArray(T **tabPtr, size_t *nbElement, size_t fieldId, const PString &fieldName="")
Add a sub FieldParser for a Array type.
bool loadComputeFieldOffsetArray(char *&iter, const char *endMessage, const char *message, std::ostream &out)
Compute FIeld offset of an array.
void initialisationFieldParser()
Initialisation function of the class FieldParser.
bool loadComputeOffset(char *&iter, const char *endMessage, const char *message, std::ostream &out)
Load the Fields and compute the offset.
void addParseFieldValue(T *varPtr, size_t fieldId, const PString &fieldName="")
Add a sub FieldParser for a scalar type.
FieldParser()
Default constructor of FieldParser.
bool loadFieldFromOffset(char *&iter)
Load the Field directly from the offset.
VecFieldParser p_vecChildren
Children used to parse other field and sub messages.
Definition FieldParser.h:71
FieldParser * createSubFieldParser(size_t fieldId, const PString &fieldName)
Add a sub FieldParser.
FieldType
Type of the Field.
Definition FieldType.h:14