Compare commits

...

5 Commits

Author SHA1 Message Date
Maarten L. Hekkelman
743e2800f8 update changelog 2025-09-30 11:21:03 +02:00
Maarten L. Hekkelman
32ac884127 Do not stop on empty audit_conform fields 2025-09-29 10:34:29 +02:00
Maarten L. Hekkelman
bec69f7d07 Fix reconstruction when entity ID's are missing 2025-09-29 09:59:04 +02:00
Maarten L. Hekkelman
a99215ad6a version bump 2025-09-24 16:45:05 +02:00
Maarten L. Hekkelman
e3d2cbd044 Lower required catch2 version 2025-09-24 16:42:45 +02:00
6 changed files with 32 additions and 9 deletions

View File

@@ -32,7 +32,7 @@ endif()
# set the project name
project(
libcifpp
VERSION 9.0.3
VERSION 9.0.4
LANGUAGES CXX C)
list(PREPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")

View File

@@ -1,3 +1,6 @@
Version 9.0.4
- Fix various stopping and reconstruction errors
Version 9.0.3
- Reconstruction fixed when some entity ids are missing

View File

@@ -25,8 +25,11 @@
*/
#include "cif++/datablock.hpp"
#include "cif++/validate.hpp"
#include <exception>
namespace cif
{
@@ -42,7 +45,16 @@ datablock::datablock(const datablock &db)
void datablock::load_dictionary()
{
if (auto *audit_conform = get("audit_conform"); audit_conform and not audit_conform->empty())
set_validator(&validator_factory::instance().get(*audit_conform));
{
try
{
set_validator(&validator_factory::instance().get(*audit_conform));
}
catch (const std::exception &ex)
{
std::clog << ex.what() << '\n';
}
}
}
void datablock::set_validator(const validator *v)
@@ -96,7 +108,8 @@ bool datablock::strip()
bool result = true;
// remove all categories that have no validator
erase(std::remove_if(begin(), end(), [](category &c) {
erase(std::remove_if(begin(), end(), [](category &c)
{
bool result = false;
if (c.get_cat_validator() == nullptr)
{
@@ -104,8 +117,8 @@ bool datablock::strip()
std::clog << "Dropping category " << c.name() << '\n';
result = true;
}
return result;
}), end());
return result; }),
end());
// then strip the remaining categories
for (auto &cat : *this)

View File

@@ -295,11 +295,13 @@ void createEntityIDs(datablock &db)
{ "id", entity_id },
{ "type", "water" } });
else
{
entity.emplace({ //
{ "id", entity_id },
{ "type", "non-polymer" } });
newEntitiesForCompound[comp_id] = entity_id;
newEntitiesForCompound[comp_id] = entity_id;
}
}
entity_ids[i] = entity_id;

View File

@@ -561,8 +561,10 @@ const validator &validator_factory::get(const category &audit_conform)
// If the audit conform contains only one record, this is easy
if (audit_conform.size() == 1)
{
const auto &[name, version] = audit_conform.front().get<std::string, std::optional<std::string>>("dict_name", "dict_version");
return m_validators.emplace_back(construct_validator(name, version));
const auto &[name, version] =
audit_conform.front().get<std::string, std::optional<std::string>>("dict_name", "dict_version");
if (not name.empty())
return m_validators.emplace_back(construct_validator(name, version));
}
// A new, merged dictionary
@@ -570,6 +572,9 @@ const validator &validator_factory::get(const category &audit_conform)
std::optional<validator> v;
for (const auto &[name, version] : audit_conform.rows<std::string, std::optional<std::string>>("dict_name", "dict_version"))
{
if (name.empty())
continue;
if (not v)
v = construct_validator(name, version);
else

View File

@@ -31,7 +31,7 @@ if(NOT (Catch2_FOUND OR TARGET Catch2))
FetchContent_Declare(
Catch2
GIT_REPOSITORY https://github.com/catchorg/Catch2.git
GIT_TAG v3.8.0)
GIT_TAG v3.4.0)
FetchContent_MakeAvailable(Catch2)