Commit 0b66d67e by Maarten L. Hekkelman

fixing git repository

parent 25512340
......@@ -888,8 +888,11 @@ void DictParser::linkItems()
{
if (not mDataBlock)
error("no datablock");
auto& dict = *mDataBlock;
std::map<std::tuple<std::string,std::string,int>,size_t> linkIndex;
std::map<std::tuple<std::string,std::string>,size_t> linkIndex;
std::map<std::tuple<std::string,std::string>,int> linkGroupIds;
std::vector<std::tuple<std::vector<std::string>,std::vector<std::string>>> linkKeys;
for (auto gl: dict["pdbx_item_linked_group_list"])
......@@ -906,11 +909,13 @@ void DictParser::linkItems()
if (piv == nullptr)
error("in pdbx_item_linked_group_list, item '" + parent + "' is not specified");
auto key = make_tuple(piv->mCategory->mName, civ->mCategory->mName, link_group_id);
auto key = std::make_tuple(piv->mCategory->mName, civ->mCategory->mName);
if (not linkIndex.count(key))
{
linkIndex[key] = linkKeys.size();
linkKeys.push_back({});
linkGroupIds[key] = link_group_id;
}
size_t ix = linkIndex.at(key);
......@@ -919,39 +924,43 @@ void DictParser::linkItems()
std::get<1>(linkKeys.at(ix)).push_back(civ->mTag);
}
// for (auto li: mImpl->mLinkedItems)
// {
// std::string child, parent;
// std::tie(child, parent) = li;
//
// auto civ = mValidator.getValidatorForItem(child);
// if (civ == nullptr)
// error("in pdbx_item_linked_group_list, item '" + child + "' is not specified");
//
// auto piv = mValidator.getValidatorForItem(parent);
// if (piv == nullptr)
// error("in pdbx_item_linked_group_list, item '" + parent + "' is not specified");
//
// auto key = make_tuple(piv->mCategory->mName, civ->mCategory->mName, piv->mTag);
// if (not linkIndex.count(key))
// {
// linkIndex[key] = linkKeys.size();
// linkKeys.push_back({});
// }
//
// size_t ix = linkIndex.at(key);
// auto& keys = linkKeys.at(ix);
//
// keys.insert(civ->mTag);
// }
// for links recorded in categories but not in pdbx_item_linked_group_list
for (auto li: mImpl->mLinkedItems)
{
std::string child, parent;
std::tie(child, parent) = li;
auto civ = mValidator.getValidatorForItem(child);
if (civ == nullptr)
error("in pdbx_item_linked_group_list, item '" + child + "' is not specified");
auto piv = mValidator.getValidatorForItem(parent);
if (piv == nullptr)
error("in pdbx_item_linked_group_list, item '" + parent + "' is not specified");
auto key = std::make_tuple(piv->mCategory->mName, civ->mCategory->mName);
if (not linkIndex.count(key))
{
linkIndex[key] = linkKeys.size();
linkKeys.push_back({});
}
size_t ix = linkIndex.at(key);
std::get<0>(linkKeys.at(ix)).push_back(piv->mTag);
std::get<1>(linkKeys.at(ix)).push_back(civ->mTag);
}
auto& linkedGroup = dict["pdbx_item_linked_group"];
// now store the links in the validator
for (auto& kv: linkIndex)
{
ValidateLink link;
std::tie(link.mParentCategory, link.mChildCategory, link.mLinkGroupID) = kv.first;
ValidateLink link = {};
std::tie(link.mParentCategory, link.mChildCategory) = kv.first;
if (linkGroupIds.count(kv.first))
link.mLinkGroupID = linkGroupIds[kv.first];
std::tie(link.mParentKeys, link.mChildKeys) = linkKeys[kv.second];
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment