CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Member Functions | Protected Attributes | Private Attributes
ora::ObjectStreamerBase Class Referenceabstract

#include <ObjectStreamer.h>

Inheritance diagram for ora::ObjectStreamerBase:
ora::ObjectReader ora::ObjectUpdater ora::ObjectWriter

Public Member Functions

void buildBaseDataMembers (DataElement &dataElement, IRelationalData &relationalData, const Reflex::Type &objType, RelationalBuffer *operationBuffer)
 
bool buildDataMembers (DataElement &dataElement, IRelationalData &relationalData, RelationalBuffer *operationBuffer)
 
 ObjectStreamerBase (const Reflex::Type &objectType, MappingElement &mapping, ContainerSchema &contSchema)
 
virtual void processDataMember (DataElement &dataElement, IRelationalData &relationalData, Reflex::Type &dataMemberType, MappingElement &dataMemberMapping, RelationalBuffer *operationBuffer)=0
 
virtual ~ObjectStreamerBase ()
 

Protected Attributes

RelationalStreamerFactory m_streamerFactory
 

Private Attributes

MappingElementm_mapping
 
Reflex::Type m_objectType
 

Detailed Description

Definition at line 15 of file ObjectStreamer.h.

Constructor & Destructor Documentation

ora::ObjectStreamerBase::ObjectStreamerBase ( const Reflex::Type &  objectType,
MappingElement mapping,
ContainerSchema contSchema 
)

Definition at line 11 of file ObjectStreamer.cc.

13  :
14  m_streamerFactory( contSchema ),
15  m_objectType( objectType ),
16  m_mapping( mapping ){
17 }
MappingElement & m_mapping
RelationalStreamerFactory m_streamerFactory
ora::ObjectStreamerBase::~ObjectStreamerBase ( )
virtual

Definition at line 19 of file ObjectStreamer.cc.

19  {
20 }

Member Function Documentation

void ora::ObjectStreamerBase::buildBaseDataMembers ( DataElement dataElement,
IRelationalData relationalData,
const Reflex::Type &  objType,
RelationalBuffer operationBuffer 
)

Definition at line 22 of file ObjectStreamer.cc.

References ora::DataElement::addChild(), CustomConfigs::Base(), newFWLiteAna::base, i, j, ora::ClassUtils::resolvedType(), ora::MappingRules::scopedVariableName(), and ora::throwException().

25  {
26 
27  for ( unsigned int i=0;i<objType.BaseSize();i++){
28  Reflex::Base base = objType.BaseAt(i);
29  Reflex::Type baseType = ClassUtils::resolvedType( base.ToType() );
30  buildBaseDataMembers( dataElement, relationalData, baseType, operationBuffer );
31  for ( unsigned int j=0;j<baseType.DataMemberSize();j++){
32  Reflex::Member dataMember = baseType.DataMemberAt(j);
33  DataElement& dataMemberElement = dataElement.addChild( dataMember.Offset(), base.OffsetFP() );
34  // Ignore the transients and the statics (how to deal with non-const statics?)
35  if ( dataMember.IsTransient() || dataMember.IsStatic() ) continue;
36  // Get the member type and resolve possible typedef chains
37  Reflex::Type dataMemberType = ClassUtils::resolvedType( dataMember.TypeOf() );
38  if ( ! dataMemberType ) {
39  throwException( "Missing dictionary information for data member \"" +
40  dataMember.Name() + "\" of class \"" +
41  baseType.Name(Reflex::SCOPED|Reflex::FINAL) + "\"",
42  "ObjectStreamerBase::buildBaseDataMembers" );
43  }
44 
45  // check if the member is from a class in the inheritance tree
46  Reflex::Type declaringType = ClassUtils::resolvedType( dataMember.DeclaringType());
47  std::string scope = declaringType.Name(Reflex::SCOPED|Reflex::FINAL);
48  // Get the data member name
49  std::string dataMemberName = MappingRules::scopedVariableName( dataMember.Name(), scope );
50  // Retrieve the relevant mapping element
51  MappingElement::iterator iDataMemberMapping = m_mapping.find( dataMemberName );
52  if ( iDataMemberMapping == m_mapping.end() ) {
53  throwException( "Data member \"" + dataMemberName +
54  "\" not found in the mapping element of variable \""+m_mapping.variableName()+"\".",
55  "ObjectStreamerBase::buildBaseDataMembers" );
56  }
57  MappingElement& dataMemberMapping = iDataMemberMapping->second;
58  processDataMember( dataMemberElement, relationalData, dataMemberType, dataMemberMapping, operationBuffer );
59  }
60  }
61 
62 }
tuple base
Main Program
Definition: newFWLiteAna.py:92
int i
Definition: DBlmapReader.cc:9
static std::string scopedVariableName(const std::string &variableName, const std::string &scope)
variable name manipulation
const std::string & variableName() const
MappingElement & m_mapping
virtual void processDataMember(DataElement &dataElement, IRelationalData &relationalData, Reflex::Type &dataMemberType, MappingElement &dataMemberMapping, RelationalBuffer *operationBuffer)=0
int j
Definition: DBlmapReader.cc:9
void buildBaseDataMembers(DataElement &dataElement, IRelationalData &relationalData, const Reflex::Type &objType, RelationalBuffer *operationBuffer)
iterator find(const std::string &key)
Retrieves a sub-element.
std::map< std::string, MappingElement >::iterator iterator
Iterator definition.
Reflex::Type resolvedType(const Reflex::Type &typ)
Definition: ClassUtils.cc:380
iterator end()
Returns an iterator in the end of the sequence.
void throwException(const std::string &message, const std::string &methodName)
Definition: Exception.cc:10
bool ora::ObjectStreamerBase::buildDataMembers ( DataElement dataElement,
IRelationalData relationalData,
RelationalBuffer operationBuffer 
)

Definition at line 64 of file ObjectStreamer.cc.

References ora::DataElement::addChild(), i, ora::ClassUtils::resolvedType(), ora::MappingRules::scopedVariableName(), and ora::throwException().

66  {
67  buildBaseDataMembers( dataElement, relationalData, m_objectType, operationBuffer );
68  // Loop over the data members of the class.
69  for ( unsigned int i=0;i<m_objectType.DataMemberSize();i++){
70 
71  Reflex::Member dataMember = m_objectType.DataMemberAt(i);
72  DataElement& dataMemberElement = dataElement.addChild( dataMember.Offset(), 0 );
73 
74  Reflex::Type declaringType = ClassUtils::resolvedType( dataMember.DeclaringType());
75  if( declaringType != m_objectType ){
76  continue;
77  }
78 
79  // Ignore the transients and the statics (how to deal with non-const statics?)
80  if ( dataMember.IsTransient() || dataMember.IsStatic() ) continue;
81 
82  // Get the member type and resolve possible typedef chains
83  Reflex::Type dataMemberType = ClassUtils::resolvedType( dataMember.TypeOf() );
84  if ( ! dataMemberType ) {
85  throwException( "Missing dictionary information for data member \"" +
86  dataMember.Name() + "\" of class \"" +
87  m_objectType.Name(Reflex::SCOPED|Reflex::FINAL) + "\"",
88  "ObjectStreamerBase::buildDataMembers" );
89  }
90 
91  // check if the member is from a class in the inheritance tree
92  std::string scope("");
93  // Get the data member name
94  std::string dataMemberName = MappingRules::scopedVariableName( dataMember.Name(), scope );
95 
96  // Retrieve the relevant mapping element
97  MappingElement::iterator idataMemberMapping = m_mapping.find( dataMemberName );
98  if ( idataMemberMapping == m_mapping.end() ) {
99  throwException( "Data member \"" + dataMemberName +
100  "\" not found in the mapping element of variable \""+m_mapping.variableName()+"\".",
101  "ObjectStreamerBase::buildDataMembers" );
102  }
103  MappingElement& dataMemberMapping = idataMemberMapping->second;
104  processDataMember( dataMemberElement, relationalData, dataMemberType, dataMemberMapping, operationBuffer );
105  }
106  return true;
107 }
int i
Definition: DBlmapReader.cc:9
static std::string scopedVariableName(const std::string &variableName, const std::string &scope)
variable name manipulation
const std::string & variableName() const
MappingElement & m_mapping
virtual void processDataMember(DataElement &dataElement, IRelationalData &relationalData, Reflex::Type &dataMemberType, MappingElement &dataMemberMapping, RelationalBuffer *operationBuffer)=0
void buildBaseDataMembers(DataElement &dataElement, IRelationalData &relationalData, const Reflex::Type &objType, RelationalBuffer *operationBuffer)
iterator find(const std::string &key)
Retrieves a sub-element.
std::map< std::string, MappingElement >::iterator iterator
Iterator definition.
Reflex::Type resolvedType(const Reflex::Type &typ)
Definition: ClassUtils.cc:380
iterator end()
Returns an iterator in the end of the sequence.
void throwException(const std::string &message, const std::string &methodName)
Definition: Exception.cc:10
virtual void ora::ObjectStreamerBase::processDataMember ( DataElement dataElement,
IRelationalData relationalData,
Reflex::Type &  dataMemberType,
MappingElement dataMemberMapping,
RelationalBuffer operationBuffer 
)
pure virtual

Member Data Documentation

MappingElement& ora::ObjectStreamerBase::m_mapping
private

Definition at line 26 of file ObjectStreamer.h.

Reflex::Type ora::ObjectStreamerBase::m_objectType
private

Definition at line 25 of file ObjectStreamer.h.

RelationalStreamerFactory ora::ObjectStreamerBase::m_streamerFactory
protected

Definition at line 23 of file ObjectStreamer.h.