pool::IDbContainer Node1 pool::IDbContainer + release() + size() + name() + isShapeSupported() + setOption() + getOption() + allocate() + allocate() + free() + nextRecordId() and 15 more... # ~IDbContainer() Node2 pool::DbContainerImp # m_name # m_canUpdate # m_canDestroy - m_stack - m_size - m_writeSize - m_stackType + DbContainerImp() + release() + size() + name() + nextRecordId() + useNextRecordId() + close() + getOption() + setOption() + transAct() and 15 more... # ~DbContainerImp() # stackType() # stackSize() # updatesPending() # stackEntry() # destroyObject() # updateObject() # writeObject() # commitTransaction() Node1->Node2 Node3 pool::RNTupleContainer # m_type # m_fieldDescs # m_dbH # m_rootDb # m_ioBytes # m_isDirty # m_index # m_indexSize # m_indexBump # m_indexMulti # m_ntupleWriter # m_ntupleReader + RNTupleContainer() + ~RNTupleContainer() + close() + open() + getOption() + setOption() + isShapeSupported() + size() + getName() + isDirty() and 10 more... - initObjectFieldDesc() Node2->Node3 Node4 pool::RootKeyContainer - m_dir - m_dbH - m_rootDb - m_ioHandler - m_policy - m_ioBytes + RootKeyContainer() + ~RootKeyContainer() + RootKeyContainer() + operator=() + close() + open() + isShapeSupported() + select() + size() + nextRecordId() and 7 more... # destroyObject() # writeObject() Node2->Node4 Node5 pool::RootTreeContainer # m_tree # m_type # m_branches # m_dbH # m_rootDb # m_branchName # m_ioBytes # m_treeFillMode # m_isDirty + RootTreeContainer() + ~RootTreeContainer() + close() + open() + getOption() + setOption() + isShapeSupported() + select() + size() + getTTree() and 11 more... - addBranch() - addObject() - selectRow() - finishTransAct() - branch() - setBranchOffsetTabLen() Node2->Node5 Node6 pool::RootTreeIndexContainer - m_indexBranch - m_index_entries - m_index_multi - m_index - m_indexBump - m_firstRead + RootTreeIndexContainer() + RootTreeIndexContainer() + operator=() + ~RootTreeIndexContainer() + open() + nextRecordId() + useNextRecordId() + loadObject() + writeObject() Node5->Node6