Skip to content

Releases: LBNL-ETA/FileParse

Version_1.1.6

Choose a tag to compare

@vidanovic vidanovic released this 20 Aug 22:25

What's New

  • The node adapter contract is now a C++20 concept (NodeAdapterLike) instead of a virtual INodeAdapter base class. Serializers were already duck-typed templates, so consumer code compiles unchanged; custom mock/test adapters no longer derive from a base and can validate themselves with a static_assert against the concept.
  • The JSON adapter holds its state inline instead of behind a shared pimpl.
  • JSON files are written tab-indented instead of four-space, making them more compact to store and faster to write.

Version_1.1.5

Choose a tag to compare

@vidanovic vidanovic released this 05 Jun 16:36

FileParse Version_1.1.5

Build / tooling

  • Added local development mode: the local CMake preset sets LBNL_LOCAL_SIBLINGS, preferring sibling working copies (../<Name>) of dependencies when checked out, with independent fallback to each declared remote.
  • Cross-platform presets / Ninja-on-Unix groundwork and MSVC /MP (multi-processor compilation).
  • Regenerated the dependency chart (doc/FileParse.md) from the template.

Dependencies

  • nlohmann_json bumped v3.11.3 -> v3.12.0 (consolidated across the Windows-Tools dependency graph).
  • xmlParser pinned at v1.0.5 (unchanged).
  • googletest (test only) bumped to v1.17.0.

No public API changes.

Version_1.1.3

Choose a tag to compare

@vidanovic vidanovic released this 05 May 20:31

Bug fix

operator>> for std::optional<T> now treats empty XML elements as nullopt.

Previously, an empty self-closing element like <X/> (or its equivalent <X></X>) would populate the optional with a default-constructed T{} because the predicate guarding deserialization was just !node.isEmpty() — and a parsed empty element is "non-empty" in the XML-node sense (the node exists, just has no children or text).

That caused round-trips of schema-equivalent-to-missing elements to come back as optional{T{}} instead of nullopt. Downstream consumers comparing an authored record (no element written) against a loaded record (empty wrapper deserialized to default-constructed T) saw spurious differences.

The predicate is now !node.isEmpty() && (!node.getChildNodes().empty() || !node.getText().empty()) — the optional is populated only when the node both exists and carries content. Empty wrappers stay nullopt, matching the typical XML convention.

Behavior

XML form | before 1.1.3 | from 1.1.3 -- | -- | -- element absent | nullopt | nullopt 91 (text content) | optional{91} | optional{91} ... (children) | optional{T{...}} | optional{T{...}}  or  (empty wrapper) | optional{T{}} | nullopt

Trade-offs

The new predicate has lossy round-trips for two edge cases:

  • optional<std::string>{""} written as <X></X> deserializes as nullopt. If your schema uses empty-string-as-value distinctly from "no string", supply a custom serializer at the call site.
  • Optional types whose payload lives entirely in attributes (
Read more

Version 1.1.2

Choose a tag to compare

@vidanovic vidanovic released this 05 Mar 17:39

What's Changed

Build

  • Removed forced static CRT () on MSVC — consumers now control runtime library selection
  • Added auto-generated dependency diagram via CMake

CI

  • Updated CI matrix: Windows 2022/2025, macOS 14/15/26, Ubuntu 24.04
  • Replaced Ninja/Clang setup with standard CMake builds

Version_1.1.1

Choose a tag to compare

@vidanovic vidanovic released this 02 Mar 18:52

Changes

  • Updated XMLParser dependency to v1.0.4 (char-only, wide-char support removed)
  • Added if(NOT TARGET) guards to FetchContent declarations to avoid duplicate targets
  • Removed MSVC runtime library override — consuming projects should control this setting
  • Added dependency chart documentation

Dependencies

  • xmlParser: v1.0.4
  • nlohmann_json: v3.11.3

Version_1.0.5

Choose a tag to compare

@vidanovic vidanovic released this 13 Mar 16:35
  • Conversion to C++20

Version_1.0.4

Choose a tag to compare

@vidanovic vidanovic released this 23 Jan 23:22
  • General function for converting case-insensitive enumerator strings are added

Version_1.0.3

Choose a tag to compare

@vidanovic vidanovic released this 22 Jan 17:22
  • Warnings level for different compiler lifted (W4 MSVC and Wall for others)

Version_1.0.2

Choose a tag to compare

@vidanovic vidanovic released this 22 Jan 00:41
  • Using version of XMLParser that contain fix for build issues in pyWinCalc manylinux wheels

Version_1.0.1

Choose a tag to compare

@vidanovic vidanovic released this 29 Oct 16:22
  • Conversion to double from string is now pure function
  • xmlParser branch version variable introduced