Skip to content

v0.19.0 — dds::xtypes (DDS-XTypes Dynamic Data support)

Choose a tag to compare

@SoundMatt SoundMatt released this 28 Jul 05:11
· 13 commits to main since this release
aeaf6a3

dds::xtypes — DDS-XTypes Dynamic Data support

Implements the next Tier-3 roadmap item: a faithful C++ port of go-DDS's tools/xtypes/xtypes.go (Dynamic Data / runtime type system, loosely aligned with OMG DDS-XTypes 1.3), the first item of ROADMAP.md's "Tier 3 — xtypes, tsn, idl, cdr".

Added

  • dds::xtypes::TypeKind / FieldDescriptor / TypeDescriptor — the runtime schema model
  • dds::xtypes::identify() / TypeIdentifier — content-addressed type fingerprint (SHA-256 over a canonical JSON encoding, order-independent over field declaration)
  • dds::xtypes::DynamicData — schema-validated property map with to_json()/from_json(), unknown fields silently skipped on read (forward compatibility)
  • dds::xtypes::TypeRegistry — thread-safe, name-keyed store with structural-conflict detection (ErrTypeMismatch)
  • dds::xtypes::check_compatibility() — forward/backward schema-evolution rules

TypeIdentifier's canonical-JSON hash is verified byte-for-byte against reference vectors independently derived from a fresh go-DDS clone, including Go's default HTML-safe JSON string-escaping rule, confirmed against real go-DDS output rather than assumed. No external crypto dependency is fetched for this project, so SHA-256 is implemented from scratch under src/xtypes/detail/ (independent of dds::security's own scratch SHA-256, which is explicitly scoped to security.cpp only) and verified against FIPS 180-4 known-answer vectors.

Scope: internal, additive — dds::xtypes is a standalone type system and dynamic-data package, not wired into RTPS discovery or dds::adapt(), matching dds::safety::E2EPublisher's and dds::security::Plugin's own precedent.

Adds REQ-XTYPE-001 through REQ-XTYPE-006 and REQ-TREG-001 through REQ-TREG-003, traced and tested. Checks off the xtypes item in ROADMAP.md.

36 new tests (417/417 total), verified with Release C++17/C++20 builds and a Debug ASan+UBSan pass; CI additionally exercises Linux/gcc-12 ASan+UBSan.