v0.19.0 — dds::xtypes (DDS-XTypes Dynamic Data support)
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 modeldds::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 withto_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.