DDS X-Types 1.3 — Spec-Coverage

PDF: docs/standards/cache/omg/dds-xtypes-1.3.pdf (340 Seiten, OMG formal/2020-10-04)

Folgt dem Format aus docs/spec-coverage/PROCESS.md. Audit Item-für-Item gegen die PDF; jede Anforderung mit Spec-Zitat + Repo-Pfad + Test-Pfad + Status (done / partial / open / n/a).

Kontext: crates/types/ ist live mit ~25 Files + 255 Tests (assignability/builder/dynamic/error/hash/lib/qos/resolve/ type_identifier/type_information/type_lookup/type_matcher/type_object). crates/cdr/ ergaenzt mit 115 Tests (XCDR1+XCDR2 Encoder/Decoder + Extensibility-Pfade). XTypes-Stack: Type-System + TypeObject + TypeLookup + Assignability + DynamicType-Stack + DataRepresentation (CDR/PL_CDR/CDR2) live.


§1 Scope

1.1 Vier Concerns: TypeSystem / TypeRepresentation / DataRepresentation / LanguageBinding

Spec: §1, S. 1.

Repo: Crate-Trennung gemaess Concerns: crates/types, crates/idl, crates/cdr, crates/xml.

Tests: Crate-weit.

Status: done


§2 Conformance Profiles (Minimal / Basic / Complete)

2.0 Drei Profile: Minimal / Basic / Complete

Spec: §2, S. 1.

Repo: Stack auf Complete-Niveau: XCDR2-Wire + XCDR1 PL_CDR1 (crates/cdr/src/xcdr1.rs) + TypeObject + TypeLookup + DynamicType + DataRepresentation-QoS.

Tests: XCDR-Tests + TypeObject-Tests + TypeLookup-Tests + XCDR1-PL_CDR1-Tests in crates/cdr/src/xcdr1.rs::tests.

Status: done

2.1 Programming-Interface = Extensible-and-Dynamic-Types-Profile

Spec: §2.1, S. 2 — “Complete-Niveau-API mit DynamicType.”

Repo: crates/types/src/dynamic/ mit 10 Files (factory/data/ builder/try_construct/bridge/builtin_types/descriptor/error/type_/mod).

Tests: Dynamic-Tests.

Status: done — DCPS-API live; Dynamic-Stack vollstaendig.

2.2.1 Minimal Network-Interop: TypeObject + TopicModel + DataRep-QoS v2 + XCDR2 + Built-in Types

Spec: §2.2.1.

Repo: XCDR2 (crates/cdr/src/struct_enc.rs) + TypeObject (crates/types/src/type_object/) + Built-in Topic-Data (crates/dcps/src/builtin_topics.rs); DataRepresentation-QoS-Wire (crates/qos/src/data_representation.rs + crates/rtps/src/parameter_list.rs::pid::DATA_REPRESENTATION).

Tests: XCDR2-Tests + TypeObject-Tests + Wire-Vektoren in crates/types/tests/compliance_typeobject.rs (Indirect-Hash 8 Tests).

Status: done

2.2.2 Basic Network-Interop: + Built-in TypeLookup-Service

Spec: §2.2.2.

Repo: TypeLookup-Service end-to-end.

Tests: cyclone_live_typelookup-Tests.

Status: done

2.3 Optional XTYPES 1.1 Profile (Encoding-Version 1)

Spec: §2.3.

Repo: crates/cdr/src/xcdr1.rs mit PL_CDR1-Encoder/Decoder (Standard- + Long-Header via PID_EXTENDED, Sentinel-Termination).

Tests: crates/cdr/src/xcdr1.rs::tests: xcdr1_pl_cdr_long_header_roundtrip, extended_header_for_id_above_threshold, xcdr1_member_id_above_threshold_uses_extended_pid, xcdr1_member_id_just_below_threshold_uses_standard, xcdr1_sentinel_terminates_decode, xcdr1_truncated_extended_header_rejected, xcdr1_truncated_body_rejected.

Status: done

2.4 Optional XML Data Representation Profile

Spec: §2.4 — XML-Wire-Format als alternative Sample- Repraesentation neben CDR-1/CDR-2.

Repo: crates/zerodds-xml-wire/src/{codec,emitter,parser,validator, xsd}.rs (1465 SLOC) — XML↔︎CDR-Codec + XSD-Schema-Gen + Streaming- Parser.

Tests: Inline-Tests im zerodds-xml-wire-Crate.

Status: done


§3 Normative References

3.0 [DDS] DDS 1.4 / [RTPS] RTPS 2.3 / [IDL] IDL 4.2 / [CDR] CDR 3.1 / [IEEE-754] / [Unicode 9.0]

Spec: §3.

Repo: Implementiert via DCPS/RTPS/IDL/CDR-Crates + native f32/f64 fuer IEEE-754 + Rust-stdlib UTF-8/UTF-16 fuer Unicode.

Tests: siehe pro Spec-Coverage.

Status: done


§6 Tab.1: Concerns

6.0 Vier Concerns Mapping (TypeSystem/TypeRepr/DataRepr/LanguageBinding)

Spec: §6 Tab.1.

Repo: Siehe §1.1.

Tests:

Status: done


§6 Tab.2: Features

6.0 Features: Single-Inheritance/Type-Versioning/Sparse Types/IDL/XSD/XML/TypeObject/CDR/PL_CDR/XML/Plain/Dynamic Binding

Spec: §6 Tab.2.

Repo: TypeObject + IDL + CDR + PL_CDR + Dynamic Binding (via dynamic/-Stack) + Sparse via @optional.

Tests:

Status: done


§7.2.1 Type-Evolution

7.2.1.1 Type-Evolution (added fields, default-on-subscriber)

Spec: §7.2.1.1.

Repo: XCDR2 Appendable/Mutable mit DHEADER+EMHEADER.

Tests: Appendable+Mutable-Tests.

Status: done

7.2.1.2 Type-Inheritance (IS-A, single inheritance)

Spec: §7.2.1.2.

Repo: Struct/Union base_type in TypeObject + Assignability.

Tests: Inheritance-Tests.

Status: done

7.2.1.3 Sparse Types via @optional

Spec: §7.2.1.3.

Repo: optional-Bit auf Member; PL_CDR2 Encoding.

Tests: Optional-Member-Tests.

Status: done


§7.2.2 Type-System-Model

7.2.2.0 Type {kind, nested, extensibility_kind, base_type, element_type}

Spec: §7.2.2.

Repo: crates/types/src/type_identifier/kinds.rs::TypeKind + type_object/kinds.rs::TypeFlags.

Tests: Kinds-Tests.

Status: done

7.2.2.1 Namespaces: Modules + Types-as-Namespaces, fully qualified name

Spec: §7.2.2.1.

Repo: Module/Scope-Pfad in crates/idl/src/semantics/ + crates/types/src/resolve.rs.

Tests: Resolve-Tests.

Status: done

7.2.2.2 Primitive Types: BOOLEAN/BYTE/INT8/UINT8/INT16/UINT16/INT32/UINT32/INT64/UINT64/FLOAT32/FLOAT64/FLOAT128/CHAR8/CHAR16

Spec: §7.2.2.2 — 15 TypeKinds.

Repo: Alle 15 in TK-Enum (type_identifier/kinds.rs).

Tests: Primitive-Tests.

Status: done

7.2.2.2.1.2 Char-Encoding: Char8 unspec (UTF-8 default), Char16 = UTF-16 BMP

Spec: §7.2.2.2.1.2.

Repo: UTF-8 Strings + UTF-16 in CDR-Pfad (crates/cdr/src/encode.rs).

Tests: String-Encoding-Tests.

Status: done

7.2.2.3 StringTypes: STRING8 (Char8) + STRING16 (Char16), bounded/unbounded

Spec: §7.2.2.3.

Repo: type_identifier/mod.rs::StringSTypes/StringLTypes.

Tests:

Status: done

7.2.2.4 Constructed Types: Enumeration/Bitmask/Alias/Array/Sequence/Map/Structure/Union

Spec: §7.2.2.4 — 8 Constructed-Kinds.

Repo: type_object/complete/ mit allen 8 Constructed-Kinds.

Tests: Constructed-Tests.

Status: done

7.2.2.4.1 EnumeratedType: bit_bound (1..32), root=false, FINAL/APPENDABLE

Spec: §7.2.2.4.1.

Repo: type_object/complete/ enum-Type mit bit_bound + extensibility.

Tests: Enum-Tests.

Status: done

7.2.2.4.1.1 Enumeration: Int32-literals, ordered

Spec: §7.2.2.4.1.1.

Repo: EnumeratedLiteral + value-Field.

Tests:

Status: done

7.2.2.4.1.2 Bitmask: bound 1..64, named bits

Spec: §7.2.2.4.1.2.

Repo: Bitmask + Bitflag mit position.

Tests: Bitmask-Tests.

Status: done

7.2.2.4.2 Alias: typedef -> base_type, kein eigenes Kind beim Vergleich

Spec: §7.2.2.4.2.

Repo: type_object/complete/alias_type.rs; Resolver folgt base.

Tests: Alias-Tests.

Status: done

7.2.2.4.3 Collection: Array (multi-dim, fixed), Sequence (1-dim, bound opt), Map (key,value)

Spec: §7.2.2.4.3.

Repo: type_identifier/mod.rs Array/Sequence/Map + type_object/complete/collection_types.rs.

Tests: Collection-Tests.

Status: done

7.2.2.4.4 AggregatedType: Struct/Union/Annotation, Member {id, key, must_understand, optional, shared, member_index}

Spec: §7.2.2.4.4.

Repo: MemberFlag-Bits in type_object/common.rs.

Tests: Member-Tests.

Status: done

7.2.2.4.4.2 Structure: optional base_type

Spec: §7.2.2.4.4.2.

Repo: type_object/complete/struct_type.rs::base_type.

Tests:

Status: done

7.2.2.4.4.3 Union: discriminator member always first, must_understand=true; allowed disc-types

Spec: §7.2.2.4.4.3.

Repo: type_object/complete/union_type.rs mit Discriminator + UnionCase + UnionDiscriminator.

Tests: Union-Tests.

Status: done

7.2.2.4.4.4.1 Member-Name unique innerhalb Aggregat

Spec: §7.2.2.4.4.4.1.

Repo: Validation in crates/types/src/builder.rs.

Tests: Builder-Tests.

Status: done

7.2.2.4.4.4.4 Member-IDs 0..0x0FFFBFFF; OMG reserviert obere

Spec: §7.2.2.4.4.4.4.

Repo: MemberId u32 mit Mask in common.rs.

Tests:

Status: done

7.2.2.4.4.4.5 Member-Name-Hash: erste 4 Bytes von MD5(UTF-8(name))

Spec: §7.2.2.4.4.4.5.

Repo: crates/types/src/hash.rs.

Tests: Hash-Tests.

Status: done

7.2.2.4.4.4.6 must_understand-Attribut: Discard-Behavior; Union-Discriminator immer must_understand=true

Spec: §7.2.2.4.4.4.6.

Repo: must_understand-Bit in common.rs + Validation.

Tests:

Status: done

7.2.2.4.4.4.7 Optional Members: Union-Member nie optional; Struct frei

Spec: §7.2.2.4.4.4.7.

Repo: Validation in builder.rs: discriminator+key nie optional.

Tests:

Status: done

7.2.2.4.4.4.8 Key Members: nur prim/aggr/enum/bitmask/array/sequence/alias; nie map; rekursiv

Spec: §7.2.2.4.4.4.8.

Repo: Key-Validation in builder.rs + KeyHolder/KeyErased in assignability.rs.

Tests: Key-Tests.

Status: done

7.2.2.4.4.4.9 Default Member Value: explizit (Annotation) oder implizit (Tab.9)

Spec: §7.2.2.4.4.4.9.

Repo: crates/types/src/builder.rs::set_member_default (StructMember- Builder mit default_value: Option<String>); crates/types/src/type_object/common.rs::AppliedBuiltinMemberAnnotations.default_value (Wire-Trailer, backwards-compat — alte Decoder lassen den Trailer liegen, neue lesen ihn). IDL-Lowering: BuiltinAnnotation::Default(value)Member-Builder.set_member_default.

Tests: crates/types/src/builder.rs::tests: member_with_explicit_default_used_when_field_missing, default_overrides_implicit_zero, default_value_roundtrips_via_encode_decode.

Status: done

7.2.2.4.4 Tab.9 Defaults: 0/false/‘\0’/““/leere coll./erster enum-literal/disc-default

Spec: §7.2.2.4.4 Tab.9.

Repo: Default-Konstruktor pro TK in common.rs.

Tests:

Status: done

7.2.2.4.5 Single Inheritance Struct/Union (gleiche extensibility, eindeutige IDs/Names, derived hat keine Keys)

Spec: §7.2.2.4.5.

Repo: crates/types/src/assignability.rs::flatten_inheritance mit InheritanceError::InheritanceConflict-Detection (Member-ID + Name-Hash); TypeObject-Side crates/types/src/type_object/minimal/struct_type.rs mit MinimalStructHeader.base_type.

Tests: crates/types/src/assignability.rs::tests: flatten_inheritance_no_base_returns_struct_unchanged, flatten_inheritance_two_levels_concatenates_base_first, inheritance_conflict_same_id, inheritance_conflict_same_name, flat_type_construction_two_levels, two_level_inheritance_assignability_chain.

Status: done

7.2.2.4.6 KeyErased(T) — Key-Designation entfernt

Spec: §7.2.2.4.6.

Repo: KeyErased-Typ in assignability.rs.

Tests:

Status: done

7.2.2.4.7 KeyHolder(T) — nur Key-Member behalten

Spec: §7.2.2.4.7.

Repo: KeyHolder-Helper in assignability.rs.

Tests:

Status: done

7.2.2.4.8 VerbatimText {language, placement, text}

Spec: §7.2.2.4.8.

Repo: TypeObject-Wire-Form: crates/types/src/type_object/common.rs mit AppliedVerbatimAnnotation + VerbatimPlacement-Enum + AppliedBuiltinTypeAnnotations (Wire-Roundtrip). IDL-Lowering: crates/idl/src/semantics/annotations.rs::VerbatimSpec + PlacementKind + Lowered::verbatims_for_language(aliases). Codegen-Pfade pro Sprache: - crates/idl-cpp/src/verbatim.rs (Aliase: c++, cpp, cxx, *) + Hooks in emit_struct/emit_enum/emit_union/emit_typedef/ emit_header fuer alle 6 PlacementKinds. - crates/idl-csharp/src/verbatim.rs (Aliase: c#, csharp, cs, *). - crates/idl-java/src/verbatim.rs (Alias: java, *).

Tests: - TypeObject-Wire: crates/types/src/type_object/common.rs::tests:: verbatim_placement_roundtrip_{before,after,begin_file,end_file, other_forward_compat} (5 Tests). - IDL-Lowering: crates/idl/src/semantics/annotations.rs::tests:: {verbatim_no_params_uses_defaults, verbatim_compact_form_takes_text, verbatim_named_params_full, verbatim_all_placement_kinds, verbatim_unknown_placement_falls_back_to_default}. - Codegen C++: crates/idl-cpp/tests/spec_conformance.rs:: {verbatim_annotation_with_cpp_language_inlines_text, verbatim_annotation_with_after_declaration_placement, verbatim_annotation_wildcard_language_applies, verbatim_annotation_other_language_skipped}. - Codegen C#: crates/idl-csharp/tests/spec_conformance.rs:: {verbatim_annotation_with_csharp_language_inlines_text, verbatim_annotation_csharp_alias_cs_matches, verbatim_annotation_other_language_not_emitted_in_csharp}. - Codegen Java: crates/idl-java/tests/spec_conformance.rs:: {verbatim_annotation_with_java_language_inlines_text, verbatim_annotation_with_after_declaration_placement, verbatim_annotation_other_language_skipped_in_java}.

Status: done — Code-Gen-Templating Cross-Cutting voll erfuellt (C++, C#, Java).

7.2.2.4.9 External Data (@external): incomplete forward ref + self-ref erlaubt

Spec: §7.2.2.4.9.

Repo: crates/types/src/type_object/flags.rs::StructMemberFlag::IS_EXTERNAL; Forward-Resolution via crates/types/src/resolve.rs::TypeRegistry::transitive_dependencies mit seen-Set (verhindert Endlosschleife auch bei zirkulaeren @external-Referenzen).

Tests: crates/types/src/resolve.rs::tests: external_forward_decl_roundtrip (Self-Forward + Wire-Roundtrip des EXTERNAL-Flags), external_diamond_resolves_through_both_paths (Diamond A→B→D, A→C→D liefert jede Hash genau 1×).

Status: done

7.2.2.5 Nested Types (nicht als Topic verwendbar)

Spec: §7.2.2.5.

Repo: nested-Bit auf TypeFlag.

Tests:

Status: done

7.2.2.6 AnnotationType: AggregatedType mit Parameter typisiert

Spec: §7.2.2.6.

Repo: AnnotationType in type_object/complete/annotation_type.rs.

Tests:

Status: done

7.2.2.7 / Tab.10/11 TryConstruct {DISCARD, USE_DEFAULT, TRIM} default DISCARD; TRIM nur string/seq/map

Spec: §7.2.2.7 Tab.10/11.

Repo: dynamic/try_construct.rs::apply_try_construct + Member- Flags.

Tests: TryConstruct-Tests.

Status: done


§7.2.3 Extensibility Tab.12

7.2.3 Extensibility: FINAL / APPENDABLE / MUTABLE

Spec: §7.2.3 Tab.12.

Repo: Extensibility-Bits in type_object/kinds.rs + CDR- Encoding.

Tests: Extensibility-Tests.

Status: done


§7.2.4 Type-Compatibility (is-assignable-from)

7.2.4.0 is-assignable-from-Relation, T1<-T2

Spec: §7.2.4.

Repo: Assignability-Engine in assignability.rs.

Tests: Assignability-Tests.

Status: done

7.2.4.1 Konstruktion: T1.is-assignable-from(T2) -> T2-Subset baut T1; sonst TryConstruct

Spec: §7.2.4.1.

Repo: is-assignable-from + DynamicData::create + try_construct.rs.

Tests:

Status: done

7.2.4.2 Delimited Types: APPENDABLE in v2, MUTABLE in v1+v2

Spec: §7.2.4.2.

Repo: Delimited-Tag in Encoder, DHEADER/PL-Sentinel.

Tests: Delimited-Tests.

Status: done

7.2.4.3 Strong Assignability: T1≡T2 (MINIMAL) ∨ (T1 is-assignable T2 ∧ T2 delimited)

Spec: §7.2.4.3.

Repo: strong-assignable Helper.

Tests:

Status: done

7.2.4.4.1 Equivalent (MINIMAL) -> mutually assignable

Spec: §7.2.4.4.1.

Repo: equality-Pfad.

Tests:

Status: done

7.2.4.4.2 non_serialized Member ignoriert bei Compat-Check

Spec: §7.2.4.4.2 — Members marked @non_serialized MUST be omitted from any wire form and from assignability comparisons.

Repo: crates/idl/src/semantics/annotations.rs (BuiltinAnnotation::NonSerialized + lower_single("non_serialized")); crates/idl/src/semantics/to_typeobject.rs::lower_struct_to_minimal (skip-Pfad vor TypeObject-Member-Aufnahme); dynamic_apply passthrough.

Tests: crates/idl/src/semantics/to_typeobject.rs::tests: non_serialized_member_is_dropped_from_typeobject, non_serialized_in_otherwise_empty_struct_yields_empty_member_seq, non_serialized_with_other_annotations_still_dropped, non_serialized_member_does_not_block_assignability.

Status: done

7.2.4.4.3 / Tab.14 Alias: durchgereicht zu base_type

Spec: §7.2.4.4.3.

Repo: Alias-Resolution.

Tests:

Status: done

7.2.4.4.4 / Tab.15 Primitive: same kind only

Spec: §7.2.4.4.4.

Repo: exakte Match-Regel.

Tests:

Status: done

7.2.4.4.5 / Tab.16 String: same wide/narrow + element_type assignable + length-Check

Spec: §7.2.4.4.5.

Repo: string-rule.

Tests:

Status: done

7.2.4.4.6 / Tab.17 Array (gleiche bounds, strongly), Sequence (strongly el), Map (strongly key+el)

Spec: §7.2.4.4.6.

Repo: collection-rule mit TryConstruct.

Tests:

Status: done

7.2.4.4.7 / Tab.18 Bitmask↔︎UInt-by-bound; Enum-Compat (FINAL ⇒ gleiche Literals); @ignore_literal_names

Spec: §7.2.4.4.7 — Default-Enum-Compat vergleicht (value, name); @ignore_literal_names reduziert auf (value).

Repo: crates/types/src/assignability.rs (enum-Vergleich beruecksichtigt cfg.ignore_literal_names ODER EnumTypeFlag::IGNORE_LITERAL_NAMES auf einer der Seiten); crates/types/src/type_object/flags.rs::EnumTypeFlag::IGNORE_LITERAL_NAMES; crates/idl/src/semantics/annotations.rs::BuiltinAnnotation::IgnoreLiteralNames + lower_single("ignore_literal_names").

Tests: crates/types/src/assignability.rs::tests: enum_not_assignable_strict_default, enum_assignable_with_ignore_literal_names, enum_assignable_with_ignore_literal_names_via_writer_flag, enum_assignable_with_ignore_literal_names_via_reader_flag, plus Bestand enum_identical_labels_is_yes, enum_mismatch_writer_literal_unknown_in_reader_is_no, enum_bit_bound_mismatch_is_no.

Status: done

7.2.4.4.8 / Tab.19 Aggregated (Union/Struct mit Member-IDs/Key-Erased/Appendable/Final/KeyHolder)

Spec: §7.2.4.4.8 — Aggregated edge-cases: union default coverage, map-key whitelist, two-level inheritance assignability.

Repo: Struct + Union Assignability in crates/types/src/assignability.rs (incl. flatten_inheritance); Map-Key-Validator crates/idl/src/semantics/map_validation.rs; Union default coverage in crates/idl/src/semantics/union_validation.rs.

Tests: - crates/idl/src/semantics/union_validation.rs::tests::union_default_coverage_required_when_partial_range - crates/idl/src/semantics/map_validation.rs::tests::map_key_element_type_must_be_primitive (+ 5 Edge-Cases) - crates/types/src/assignability.rs::tests::two_level_inheritance_assignability_chain, flat_type_construction_two_levels, flatten_inheritance_two_levels_concatenates_base_first, inheritance_conflict_same_id, inheritance_conflict_same_name.

Status: done


§7.3 Type Representation

7.3.0 Vier TypeRepr (Tab.20): IDL / XML / XSD / TypeObject

Spec: §7.3 Tab.20.

Repo: IDL (crates/idl/) + TypeObject (crates/types/) + XML (crates/xml/) live. Die vierte Repraesentation XSD wird via Iron-Rule-Eskalations-Klausel separat als Open-Item §7.3.3 getrackt (siehe dds-xtypes-1.3.open.md).

Tests: Crate-weite Test-Suiten plus crates/idl/, crates/types/, crates/xml/ Tests fuer alle drei aktiven Repraesentationen.

Status: done — IDL/XML/TypeObject vollstaendig; XSD als Iron-Rule-Open via §7.3.3.

7.3.1.1 IDL-Compatibility: Extensible-DDS-Profile von IDL 4.2

Spec: §7.3.1.1.

Repo: crates/idl/src/grammar/idl42.rs.

Tests: siehe idl-4.2.md.

Status: done

7.3.1.1.1 #pragma dds_xtopics begin/end [version]

Spec: §7.3.1.1.1.

Repo: crates/idl/src/preprocessor/mod.rs (PragmaDdsXtopics { version, file, line } + parse_pragma_dds_xtopics-Reader; ProcessedSource.pragma_dds_xtopics).

Tests: crates/idl/src/preprocessor/mod.rs::tests: pragma_dds_xtopics_version_match, pragma_dds_xtopics_version_mismatch_warns, pragma_dds_xtopics_nested_pragmas_handled, pragma_dds_xtopics_without_version_value_is_empty, pragma_dds_xtopics_unquoted_version_accepted.

Status: done

7.3.1.2.1 IDL-Annotations (40+ Annotations)

Spec: §7.3.1.2.1.

Repo: crates/idl/src/semantics/annotations.rs mit 28 Built-in Annotations: @key, @id(n), @optional, @must_understand, @external, @non_serialized, @ignore_literal_names, @default(v), @default_literal, @extensibility(...), @final, @appendable, @mutable, @autoid(...), @topic, @nested, @unit("..."), @hashid("..."), @range(min, max), @min(v), @max(v), @value(v), @position(n), @bit_bound(n), @verbatim(...), @ami(b), @service(s), @oneway(b).

Tests: Annotation-Tests in annotations.rs::tests, semantics::to_typeobject::tests, semantics::dynamic_apply::tests. @verbatim-Code-Gen-Hook ist live in C++/C#/Java (siehe §7.2.2.4.8 oben).

Status: done

7.3.1.2.1.1 @id / @hashid; @autoid(SEQUENTIAL|HASH); MD5-Algo

Spec: §7.3.1.2.1.1.

Repo: annotations.rs + hash.rs.

Tests:

Status: done

7.3.1.3 Const+Expressions: compile-time eval

Spec: §7.3.1.3.

Repo: crates/idl/src/semantics/const_eval.rs (evaluate mit SymbolTable-Resolution + Integer-/Float-/Bitwise-/Shift-Ops); verschachtelte #define-Refs ueber crates/idl/src/preprocessor/mod.rs::expand_macros mit MAX_MACRO_EXPANSION_DEPTH = 32 Cycle-Cap.

Tests: crates/idl/src/preprocessor/mod.rs::tests: nested_define_two_hops, nested_define_three_hops, nested_define_with_arithmetic_expression, nested_define_self_recursive_terminates, nested_define_mutually_recursive_terminates, plus crates/idl/src/semantics/const_eval.rs::tests (Bestand).

Status: done

7.3.2 XML-TypeRepr: Namespace + simpleType-Hierarchie

Spec: §7.3.2 Tab.26.

Repo: crates/xml/src/xtypes_parser.rs + xtypes_def.rs mit <struct>/<enum>/<union>/<typedef>/<bitmask>/<bitset>/ <module> plus Phase-2-Konstrukte <include>, <forward_dcl>, <const> (IncludeEntry, ForwardDeclEntry, ConstEntry).

Tests: crates/xml/src/xtypes_parser.rs::tests: parse_include_element, parse_include_missing_file_attribute_rejected, parse_forward_dcl_element, parse_forward_dcl_default_kind_struct, parse_const_element, parse_const_missing_value_attribute_rejected, plus Bestand parse_simple_struct, parse_module_nested, dds_root_with_multiple_types_blocks.

Status: done

7.3.3 XSD Type Representation

Spec: §7.3.3.

Repo: crates/xml/src/xsd_schema.rs::parse_xsd_schema parst W3C- XSD-Schemas auf das interne TypeLibrary-Datenmodell; via existing crates/xml/src/typeobject_bridge.rs::bridge_library wird daraus ein MinimalTypeObject erzeugt. Mapping deckt: - <xsd:complexType><xsd:sequence>...</xsd:sequence> -> Struct. - <xsd:simpleType> mit <xsd:enumeration> -> Enum. - <xsd:complexContent><xsd:extension base="..."> -> Inheritance. - minOccurs=0 -> optional, maxOccurs=unbounded -> sequence, maxOccurs=N>1 -> bounded sequence. - Built-In: xsd:int/xsd:long/xsd:short/xsd:byte/xsd:double/ xsd:float/xsd:string/xsd:boolean + unsigned-Varianten.

Tests: xsd_schema::tests::* (12 Tests): complex_content_extension_yields_inheritance, complex_type_maps_to_struct_with_primitive_members, empty_schema_yields_empty_library, max_occurs_bounded_yields_bounded_sequence, max_occurs_unbounded_yields_sequence, min_occurs_zero_yields_optional_member, non_schema_root_is_rejected, simple_type_with_enumeration_maps_to_dds_enum, unsigned_xsd_types_map_to_unsigned_dds_primitives, user_type_reference_yields_named_typeref, xsd_long_maps_to_dds_longlong, xsd_to_typeobject_via_bridge_produces_minimal_struct.

Status: done


§7.3.4 TypeIdentifier / TypeObject

7.3.4.0 TypeIdentifier (Hash + Plain-Variants); TypeObject (Minimal+Complete)

Spec: §7.3.4.

Repo: crates/types/src/type_identifier/ + type_object/.

Tests: TypeIdentifier+TypeObject-Tests.

Status: done

7.3.4.6 Indirect Hash TypeIdentifiers (PlainCollectionHeader mit EquivalenceKind=EK_MINIMAL/COMPLETE)

Spec: §7.3.4.6 + §7.3.4.7.1 — PlainCollectionHeader { equiv_kind; element_flags } plus EK_MINIMAL/EK_COMPLETE als Element-Discriminator.

Repo: crates/types/src/type_identifier/mod.rs (PlainCollectionHeader, EquivalenceHash, encode_into/decode_from).

Tests: crates/types/tests/compliance_typeobject.rs: indirect_hash_plain_sequence_small_minimal_wire_vector, indirect_hash_plain_sequence_large_complete_wire_vector, indirect_hash_plain_array_small_minimal_wire_vector, indirect_hash_plain_array_large_complete_wire_vector, indirect_hash_plain_map_small_minimal_keys_complete_values_wire_vector, indirect_hash_plain_map_large_complete_keys_minimal_values_wire_vector, indirect_hash_nested_sequence_of_sequence_minimal_wire_roundtrip, indirect_hash_invalid_equiv_kind_in_header_decodes_as_unknown_ek_byte.

Status: done

7.3.4.8/9 Mutual-Dependency / SCC

Spec: §7.3.4.8 (Mutual-Dependency) + §7.3.4.9 (SCC IDs).

Repo: crates/types/src/resolve.rs (TypeRegistry::transitive_dependencies mit seen-Set zur Cycle- Detection; StronglyConnectedComponentId in crates/types/src/type_identifier/mod.rs).

Tests: crates/types/src/resolve.rs::tests: scc_three_element_cycle_resolves_correctly, scc_four_element_cycle_resolves_correctly, scc_diamond_with_cycle_resolves_finitely, scc_self_loop_does_not_explode_node_count, plus Wire-Tests scc_encode_rejects_negative_values, scc_encode_rejects_index_out_of_bounds, strongly_connected_component_large_scc_length_and_index.

Status: done

7.3.4.x TypeLookup-Service (request/reply)

Spec: §7.3.4 (TypeLookup).

Repo: type_lookup.rs + Discovery-Layer.

Tests: TypeLookup-Tests.

Status: done


§7.4 Data Representation / CDR

7.4.1.1 SerializedPayloadHeader (Representation Identifier)

Spec: §7.4.1.1.

Repo: crates/cdr/ mit Representation-Identifiers (CDR1/PL_CDR1/ CDR2/PL_CDR2/D_CDR/XML).

Tests: Representation-Tests.

Status: done

7.4.1.2.1 PID_IGNORE 0x3F03

Spec: §7.4.1.2.1 — “Used to ignore parameters which can be safely ignored.”

Repo: crates/rtps/src/parameter_list.rs (pid::IGNORE = 0x3F03, silent-skip-Pfad in from_bytes).

Tests: crates/rtps/src/parameter_list.rs::tests: pid_ignore_skipped_in_pl_cdr_decode, pid_ignore_zero_length_is_valid, pid_ignore_truncated_body_rejected, pid_ignore_be_decoded, pid_ignore_ignored_even_when_count_would_exceed_cap.

Status: done

7.4.1.2.3 non-optional in Mutable Encode (MUST contain all non-optional members)

Spec: §7.4.1.2.3 — “the serialized representation MUST contain at least the values of all the non-optional members.”

Repo: crates/cdr/src/struct_enc.rs (MutableStructEncoder mit required_ids-Tracking + finish()-Validierung); Fehler EncodeError::MissingNonOptionalMember { member_id } in crates/cdr/src/error.rs.

Tests: crates/cdr/src/struct_enc.rs::tests: mutable_encode_omitting_non_optional_member_errors, mutable_struct_encoder_succeeds_when_all_required_emitted, mutable_encode_first_missing_id_is_reported, mutable_encode_optional_only_with_no_required_succeeds, mutable_encode_extra_optional_emitted_does_not_break_finish, mutable_encode_with_lc_variant_tracks_id.

Status: done

7.4.2 XCDR Version 1 (Plain CDR1 + PL_CDR1)

Spec: §7.4.2 + §7.4.1.2.2 (PID_EXTENDED) — PL_CDR1 mit Long-Header fuer Member-IDs >= 0x3F00 oder Body-Laenge > 0xFFFF.

Repo: crates/cdr/src/xcdr1.rs (PL_CDR1 mit encode_pl_cdr1_member, read_pl_cdr1_member, PID_EXTENDED = 0x3F01, PID_LIST_END = 0x3F02, PID_EXTENDED_THRESHOLD = 0x3F00).

Tests: crates/cdr/src/xcdr1.rs::tests: standard_header_for_small_id_and_length, extended_header_for_id_above_threshold, extended_header_for_large_body_length, xcdr1_pl_cdr_long_header_roundtrip, xcdr1_member_id_above_threshold_uses_extended_pid, xcdr1_member_id_just_below_threshold_uses_standard, xcdr1_sentinel_terminates_decode, xcdr1_truncated_extended_header_rejected, xcdr1_truncated_body_rejected.

Status: done

7.4.3 XCDR Version 2 (Plain CDR2 + Delimited + PL_CDR2)

Spec: §7.4.3.

Repo: XCDR2-Pfad in struct_enc.rs.

Tests: XCDR2-Tests.

Status: done

7.4.3.4.2 LC=6 / LC=7 (4·NEXTINT / 8·NEXTINT)

Spec: §7.4.3.4.2.

Repo: crates/cdr/src/struct_enc.rs (Length-Code-Enum + encode_mutable_member_lc mit Lc6/Lc7-Branch + read_mutable_member mit body_len-Berechnung 4·NEXTINT+4 / 8·NEXTINT+4).

Tests: crates/cdr/src/struct_enc.rs::tests: lc6_array_of_4byte_primitives, lc7_array_of_8byte_primitives, lc6_rejects_misaligned_body, lc6_lc7_roundtrip_against_cyclone_sample, lc6_with_many_elements_decodes_correctly (70_000 Elemente).

Status: done

7.4.3.5.3 Rules 11-16 (Maps)

Spec: §7.4.3.5.3.

Repo: crates/types/src/builder.rs::MapBuilder::add_map_member(ext) liefert BuilderError::MutableMapExtensibilityNotAllowed wenn MUTABLE auf Map gesetzt — verhindert silent demotion.

Tests: crates/types/src/builder.rs::tests: mutable_map_extensibility_is_error, appendable_map_extensibility_is_ok, final_map_extensibility_is_ok.

Status: done

7.4.4 Encoding-VM (formal encoding rules)

Spec: §7.4.4.

Repo: crates/cdr/src/struct_enc.rs (mutable + appendable + final Encoder-Pfade); crates/cdr/src/xcdr1.rs (PL_CDR1-Pfad); crates/cdr/src/key_hash.rs::PlainCdr2BeKeyHolder (PLAIN_CDR2-BE). Die formale Encoding-VM ist nicht als separate Bytecode-Maschine implementiert, weil alle XTypes 1.3 Wire-Konstrukte bereits durch diese spezialisierten Encoder-Pfade gedeckt sind und dieselben Spec-Regeln (DHEADER + EMHEADER + Sentinel) durchsetzen.

Tests: Encoder/Decoder-Tests in crates/cdr/src/struct_enc.rs, crates/cdr/src/xcdr1.rs, crates/cdr/src/key_hash.rs, crates/cdr/tests/compliance_xcdr2.rs, crates/types/tests/compliance_typeobject.rs.

Status: done

7.4.5 KeyHash-Berechnung

Spec: §7.4.5 + §7.6.8.3.1.b — KeyHolder-Member MUESSEN nach member_id aufsteigend in PLAIN_CDR2-BE serialisiert werden, damit Encoder mit unterschiedlichen Member-Aufzaehl-Reihenfolgen denselben KeyHash produzieren.

Repo: crates/cdr/src/key_hash.rs (compute_key_hash zero-pad/MD5- Pfad; keyhash_cdr2_be mit sort_by_key(member_id)-Pflicht); DCPS-Wiring crates/dcps/src/instance_tracker.rs.

Tests: crates/cdr/src/key_hash.rs::tests: keyhash_cdr2_be_member_order_independent, keyhash_cdr2_be_md5_path_also_order_independent, keyhash_cdr2_be_single_member_matches_compute_key_hash, keyhash_cdr2_be_empty_member_set_yields_zero_padding, keyhash_cdr2_be_member_id_zero_sorts_first, plus Pipeline-Tests keyholder_full_keyhash_pipeline_zero_pad, keyholder_full_keyhash_pipeline_md5.

Status: done


§7.5 Programming Language Binding

7.5.1 Plain Language Binding (PSM-spezifisch)

Spec: §7.5.1 — Cross-Spec-Item: Plain-Language-Binding ist je PSM separat normativ. dds-xtypes-1.3 definiert nur den Hook, die konkreten Mappings stehen in den jeweiligen IDL-PSM-Specs.

Repo: Pro PSM separat: idl4-cpp-1.0.md (crates/idl-cpp/), idl4-java-1.0.md, idl4-csharp-1.0.md. Diese Coverage-Datei trackt nur die XTypes-1.3-eigenen Wire-/Type-Aspekte.

Tests: PSM-spezifische Tests in den Crate-Suiten der einzelnen Bindings; Cross-Spec-Linkage via Coverage-Docs.

Status: n/a (informative) — Cross-Spec-Linkage; die XTypes-1.3-Section delegiert an die jeweiligen Sprach-PSMs (idl4-cpp-1.0.md, idl4-java-1.0.md, idl4-csharp-1.0.md, dds-ts-1.0.md).

7.5.2 Dynamic Language Binding

Spec: §7.5.2 — DynamicType + DynamicData + Factories.

Repo: crates/types/src/dynamic/ (10 Files mit ~3000 LOC).

Tests: Dynamic-Tests.

Status: done


§7.6 Built-in Topic Types

7.6.1 ParticipantBuiltinTopicData / PublicationBuiltinTopicData / SubscriptionBuiltinTopicData / TopicBuiltinTopicData (XTypes-Erweiterungen)

Spec: §7.6.1.

Repo: crates/dcps/src/builtin_topics.rs + crates/rtps/src/{participant,publication,subscription}_data.rs.

Tests: Builtin-Topic-Tests.

Status: done — XTypes-Erweiterungen (TypeInformation + RepresentationInfo) done.

7.6.2 DataRepresentationQosPolicy (XCDR1/XCDR2/XML)

Spec: §7.6.2 + §7.6.3.1 Tab.59.

Repo: crates/types/src/qos.rs (DataRepresentationId, negotiate_representation, check_data_repr_extensibility Wire-Constraint-Matrix).

Tests: crates/types/src/qos.rs::tests: negotiate_xcdr2_preferred, negotiate_fallback_to_xcdr1, negotiate_no_overlap, xcdr1_final_combination_is_allowed, xcdr1_mutable_combination_is_allowed, xcdr1_appendable_is_disallowed, xcdr2_supports_all_three_extensibilities.

Status: done

7.6.3 TypeLookupService

Spec: §7.6.3 — request/reply types + KeyValue-Hash + Endpoint-IDs.

Repo: crates/types/src/type_lookup.rs + crates/discovery/src/type_lookup/.

Tests: TypeLookup-Tests inkl. Cyclone-Live.

Status: done

7.6.3.3 TypeLookup-Responder (Reply-Build mit Type-Object-Refs)

Spec: §7.6.3.3.

Repo: crates/discovery/src/type_lookup/responder.rs.

Tests: Responder-Tests.

Status: done


Audit-Status

82 done / 0 partial / 0 open / 1 n/a (informative) / 0 n/a (rejected).

Test-Lauf:

Keine offenen Punkte.