36    StringProperty containerPrefixProp(
"PoolContainerPrefix", 
"CollectionTree");
 
   37    StringProperty containerNameHintProp(
"TopLevelContainerName", 
"");
 
   38    StringProperty branchNameHintProp(
"SubLevelBranchName", 
"<type>/<key>");
 
   40       propertyServer->getProperty(&containerPrefixProp).ignore();
 
   41       propertyServer->getProperty(&containerNameHintProp).ignore();
 
   42       propertyServer->getProperty(&branchNameHintProp).ignore();
 
   47    return StatusCode::SUCCESS;
 
   59    return pool::POOL_StorageType.
type();
 
   65    bool ownTokAddr = 
false;
 
   66    if (tokAddr == 
nullptr || tokAddr->
getToken() == 
nullptr) {
 
   68       auto token = std::make_unique<Token>();
 
   69       token->fromString(*(pAddr->par()));
 
   70       GenericAddress* genAddr = 
dynamic_cast<GenericAddress*
>(pAddr);
 
   72         ATH_MSG_ERROR(
"Dynamic cast failed in AthenaPoolConverter::createObj");
 
   74         return StatusCode::FAILURE;
 
   80       const std::string contextStr = 
std::format(
"[CTXT={:08X}]", 
static_cast<int>(*(pAddr->ipar())));
 
   81       std::strncpy(
text, contextStr.c_str(), 
sizeof(
text) - 1);
 
   90       std::string 
key = pAddr->par()[1];
 
   99    if (pObj == 
nullptr) {
 
  103       delete tokAddr; tokAddr = 
nullptr;
 
  106    if (pObj == 
nullptr) {
 
  107       return StatusCode::FAILURE;
 
  109    return StatusCode::SUCCESS;
 
  114    if (
proxy == 
nullptr) {
 
  115       ATH_MSG_ERROR(
"AthenaPoolConverter CreateRep failed to cast DataProxy, key = " << pObj->name());
 
  116       return StatusCode::FAILURE;
 
  122          return StatusCode::FAILURE;
 
  126       return StatusCode::FAILURE;
 
  129    if (pAddr == 
nullptr) {
 
  133       GenericAddress* gAddr = 
dynamic_cast<GenericAddress*
>(pAddr);
 
  134       if (gAddr != 
nullptr) {
 
  138    return StatusCode::SUCCESS;
 
  146          return StatusCode::FAILURE;
 
  150       return StatusCode::FAILURE;
 
  152    return StatusCode::SUCCESS;
 
  156    return pool::POOL_StorageType.
type();
 
  161         ::
Converter(storageType(), myCLID, pSvcLocator),
 
  163                                name ? 
name : 
"AthenaPoolConverter"),
 
  164     m_detStore(
"DetectorStore", 
name ? 
name : 
"AthenaPoolConverter"),
 
  165     m_athenaPoolCnvSvc(pSvcLocator && pSvcLocator->existsService(
"AthenaPoolSharedIOCnvSvc") ? 
"AthenaPoolSharedIOCnvSvc" : 
"AthenaPoolCnvSvc", 
name ? 
name : 
"AthenaPoolConverter"),
 
  169     m_containerPrefix(
""),
 
  170     m_containerNameHint(
""),
 
  171     m_branchNameHint(
""),
 
  172     m_dataObject(nullptr),
 
  173     m_i_poolToken(nullptr) {
 
  179    std::string::size_type pos1 = 
output.find(
'[');
 
  180    std::string outputConnectionSpec = 
output.substr(0, pos1);
 
  187    if( containerPrefix == 
"Default" ) {
 
  191    std::string containerName;
 
  194    std::size_t colonPos = containerPrefix.find(
':');
 
  195    if (colonPos != std::string::npos) {
 
  196       dhContainerPrefix = containerPrefix.substr(0, colonPos + 1) + dhContainerPrefix;
 
  202    std::string containerFriendPostfix;
 
  203    while (pos1 != std::string::npos) {
 
  204       const std::string::size_type pos2 = 
output.find(
'=', pos1);
 
  205       const std::string thisKey = 
output.substr(pos1 + 1, pos2 - pos1 - 1);
 
  206       const std::string::size_type pos3 = 
output.find(
']', pos2);
 
  207       const std::string 
value = 
output.substr(pos2 + 1, pos3 - pos2 - 1);
 
  208       if (thisKey == 
"OutputCollection") {
 
  209          dhContainerPrefix = std::move(
value);
 
  210       } 
else if (thisKey == 
"PoolContainerPrefix") {
 
  211          containerPrefix = std::move(
value);
 
  212       } 
else if (thisKey == 
"TopLevelContainerName") {
 
  213         containerNameHint = std::move(
value);
 
  214       } 
else if (thisKey == 
"SubLevelBranchName") {
 
  215          branchNameHint = std::move(
value);
 
  216       } 
else if (thisKey == 
"PoolContainerFriendPostfix") {
 
  217          containerFriendPostfix = std::move(
value);
 
  219       pos1 = 
output.find(
'[', pos3);
 
  223    if( tname.compare(0, 10, 
"DataHeader") == 0 ) {
 
  224       if( tname.compare(10, 4, 
"Form") == 0 ) {
 
  225          containerName = dhContainerPrefix + 
"Form" + 
"(" + tname + 
")";
 
  227          if (
key[
key.size() - 1] == 
'/') {
 
  228             containerName = dhContainerPrefix + 
"(" + 
key + tname + 
")";
 
  230             containerName = dhContainerPrefix + 
"(" + tname + 
")";
 
  235    else if (tname.compare(0, 13, 
"AttributeList") == 0) {
 
  237       if( pool::ROOTRNTUPLE_StorageType.exactMatch(tech) ) {
 
  242          tech = pool::ROOTTREE_StorageType.
type();
 
  248       const std::string typeTok = 
"<type>", keyTok = 
"<key>";
 
  249       containerName = containerPrefix + containerFriendPostfix + containerNameHint;
 
  250       if (!branchNameHint.empty()) {
 
  251          containerName += 
"(" + branchNameHint + 
")";
 
  253       const std::size_t pos1 = containerName.find(typeTok);
 
  254       if (pos1 != std::string::npos) {
 
  255          containerName.replace(pos1, typeTok.size(), tname);
 
  257       const std::size_t pos2 = containerName.find(keyTok);
 
  258       if (pos2 != std::string::npos) {
 
  260             containerName.replace(pos2, keyTok.size(), tname);
 
  262             containerName.replace(pos2, keyTok.size(), 
key);
 
  281    ATH_MSG_DEBUG(
"AthenaPoolConverter cleanUp called for base class.");
 
  282    return StatusCode::SUCCESS;