PhoenixProtocolBuffer  1.0.1
Set of tools to decode offset from protocol buffer
Loading...
Searching...
No Matches
FieldParser_impl.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_IMPL_H__
8#define __FIELDPARSER_IMPL_H__
9
10#include "FieldParser.h"
11
13
17template<typename T>
18void FieldParser::addParseFieldValue(T* varPtr, size_t fieldId, const PString & fieldName){
19 FieldParser* parser = createSubFieldParser(fieldId, fieldName);
21 parser->p_field.setNbElement(NULL);
22 parser->p_field.setTypeSize(sizeof(T));
23 parser->p_field.setVarPtr(varPtr);
24 parser->p_field.setIsArray(false);
25 parser->p_field.setOffset(0lu);
26 parser->p_field.setIsOffsetReady(false);
27 p_vecChildren.push_back(parser);
28}
29
31
36template<typename T>
37void FieldParser::addParseFieldArray(T** tabPtr, size_t * nbElement, size_t fieldId, const PString & fieldName){
38 FieldParser* parser = createSubFieldParser(fieldId, fieldName);
40 parser->p_field.setNbElement(NULL);
41 parser->p_field.setTypeSize(sizeof(T));
42 parser->p_field.setArrayPtr((void**)tabPtr);
43 parser->p_field.setNbElement(nbElement);
44 parser->p_field.setIsArray(true);
45 parser->p_field.setOffset(0lu);
46 parser->p_field.setIsOffsetReady(false);
47 p_vecChildren.push_back(parser);
48}
49
51
55template<typename T>
56bool FieldParser::addParseFieldValue(T* varPtr, const FieldConfig & field){
57 if(!checkInputType<T>(field)){return false;}
58 addParseFieldValue(varPtr, field.getId(), field.getName());
59 return true;
60}
61
63
68template<typename T>
69bool FieldParser::addParseFieldValue(T* varPtr, const FieldConfig & field, const PString & childName){
70 const std::map<PString, FieldConfig> & mapChildren = field.getVecChildren();
71 std::map<PString, FieldConfig>::const_iterator itFind = mapChildren.find(childName);
72 if(itFind != mapChildren.end()){
73 return addParseFieldValue(varPtr, itFind->second);
74 }else{
75 std::cerr << "FieldParser::addParseFieldValue : FieldConfig has no child named '"<<childName<<"'" << std::endl;
76 return false;
77 }
78}
79
81
86template<typename T>
87bool FieldParser::addParseFieldArray(T** tabPtr, size_t * nbElement, const FieldConfig & field){
88 if(!checkInputType<T>(field) || !field.getIsArray()){std::cerr << "FieldParser::addParseFieldArray : Field '"<<field.getName()<<"' is not defined as an array of the proper type" << std::endl;return false;} //If the field is not an array we quit
89 addParseFieldArray(tabPtr, nbElement, field.getId(), field.getName());
90 return true;
91}
92
94
100template<typename T>
101bool FieldParser::addParseFieldArray(T** tabPtr, size_t * nbElement, const FieldConfig & field, const PString & childName){
102 const std::map<PString, FieldConfig> & mapChildren = field.getVecChildren();
103 std::map<PString, FieldConfig>::const_iterator itFind = mapChildren.find(childName);
104 if(itFind != mapChildren.end()){
105 return addParseFieldArray(tabPtr, nbElement, itFind->second);
106 }else{
107 std::cerr << "FieldParser::addParseFieldArray : FieldConfig has no child named '"<<childName<<"'" << std::endl;
108 return false;
109 }
110}
111
113
116template<typename T>
119 return checkInputType(type, field);
120}
121
122#endif
123
FieldType::FieldType phoenix_fieldType()
Get the default FieldType.
Definition FieldType.h:34
void setType(const FieldType::FieldType &type)
Sets the type of the AbtractField.
void setVarPtr(void *varPtr)
Sets the varPtr of the AbtractField.
void setIsOffsetReady(bool isOffsetReady)
Sets the isOffsetReady of the AbtractField.
void setArrayPtr(void **arrayPtr)
Sets the arrayPtr of the AbtractField.
void setNbElement(size_t *nbElement)
Sets the nbElement of the AbtractField.
void setIsArray(bool isArray)
Sets the isArray of the AbtractField.
void setOffset(size_t offset)
Sets the offset of the AbtractField.
void setTypeSize(size_t typeSize)
Sets the typeSize of the AbtractField.
Configuration to be used to create a field from a yml file.
const PString & getName() const
Gets the name of the FieldConfig.
size_t getId() const
Gets the id of the FieldConfig.
bool getIsArray() const
Gets the isArray of the FieldConfig.
const std::map< PString, FieldConfig > & getVecChildren() const
Gets the vecChildren of the FieldConfig.
AbtractField p_field
Field to be parsed.
Definition FieldParser.h:69
bool checkInputType(const FieldConfig &field)
Check the template type with the FieldConfig.
void addParseFieldArray(T **tabPtr, size_t *nbElement, size_t fieldId, const PString &fieldName="")
Add a sub FieldParser for a Array type.
void addParseFieldValue(T *varPtr, size_t fieldId, const PString &fieldName="")
Add a sub FieldParser for a scalar type.
FieldParser()
Default constructor of FieldParser.
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