10 TVirtualCollectionProxy& collProxy,
12 m_returnType(iteratorReturnType),
13 m_collProxy(collProxy),
15 m_Iterators(TGenericCollectionIterator::New(address, &collProxy))
24 m_currentElement = m_Iterators->Next();
30 return m_currentElement;
42 m_iteratorReturnType(),
43 m_isAssociative(
false ),
51 "STLContainerHandler::STLContainerHandler");
67 TVirtualCollectionProxy::TPushPop helper(m_collProxy, const_cast<void*>(address));
68 return m_collProxy->Size();
74 if ( ! m_iteratorReturnType ) {
75 throwException(
"Missing the dictionary information for the value_type member of the container \"" +
76 m_type.cppName() +
"\"",
77 "STLContainerHandler::iterate" );
79 void *addr =
const_cast<void*
>(address);
87 m_collProxy->Insert(data, address, 1);
94 TVirtualCollectionProxy::TPushPop helper(m_collProxy, const_cast<void*>(address));
95 return m_collProxy->Clear();
100 return m_iteratorReturnType;
104 m_containerHandler(),
105 m_containerOffset( 0 )
110 for (
auto const & member : members) {
114 throwException(
"The dictionary of the underlying container of \"" +
115 dictionary.
cppName() +
"\" is not available",
116 "SpecialSTLContainerHandler" );
125 throwException(
"Could not retrieve the underlying container of \"" +
126 dictionary.
cppName() +
"\" is not available",
127 "SpecialSTLContainerHandler" );
140 return m_containerHandler->size( static_cast< const char* >( address ) + m_containerOffset );
147 return m_containerHandler->iterate( static_cast< const char* >( address ) + m_containerOffset );
154 m_containerHandler->appendNewElement( static_cast< char* >( address ) + m_containerOffset, data );
160 m_containerHandler->clear( static_cast< const char* >( address ) + m_containerOffset );
166 return m_containerHandler->iteratorReturnType();
~STLContainerIteratorHandler()
Destructor.
~SpecialSTLContainerHandler()
Destructor.
void appendNewElement(void *address, void *data)
Appends a new element and returns its address of the object reference.
edm::TypeWithDict resolvedType(const edm::TypeWithDict &typ)
edm::TypeWithDict & iteratorReturnType()
Returns the iterator return type.
bool isTypeKeyedContainer(const edm::TypeWithDict &typ)
edm::TypeWithDict m_type
The dictionary information.
TGenericCollectionIterator * m_Iterators
edm::TypeWithDict & returnType()
Returns the return type of the iterator dereference method.
~STLContainerHandler()
Destructor.
SpecialSTLContainerHandler(const edm::TypeWithDict &dictionary)
Constructor.
IArrayIteratorHandler * iterate(const void *address)
Returns an initialized iterator.
void * m_currentElement
Current element object pointer.
std::auto_ptr< IArrayHandler > m_containerHandler
The handler of the unserlying container.
TVirtualCollectionProxy * m_collProxy
Proxy of the generic collection.
TClass * getClass() const
std::string cppName() const
STLContainerIteratorHandler(void *address, TVirtualCollectionProxy &collProxy, const edm::TypeWithDict &iteratorReturnType)
Constructor.
TypeWithDict typeOf() const
STLContainerHandler(const edm::TypeWithDict &dictionary)
Constructor.
size_t size(const void *address)
Returns the size of the container.
int m_containerOffset
The offset of the underlying container.
void throwException(const std::string &message, const std::string &methodName) __attribute__((noreturn))
void increment()
Increments itself.
char data[epos_bytes_allocation]
edm::TypeWithDict m_iteratorReturnType
The iterator return type.
IArrayIteratorHandler * iterate(const void *address)
Returns an initialized iterator.
edm::TypeWithDict containerValueType(const edm::TypeWithDict &typ)
void appendNewElement(void *address, void *data)
Appends a new element and returns its address of the object reference.
bool m_isAssociative
Flag indicating whether the container is associative.
volatile std::atomic< bool > shutdown_flag false
void clear(const void *address)
Clear the content of the container.
void clear(const void *address)
Clear the content of the container.
bool isTypeContainer(const edm::TypeWithDict &typ)
edm::TypeWithDict & iteratorReturnType()
Returns the iterator return type.
size_t size(const void *address)
Returns the size of the container.
void * object()
Returns the current object.