unit SharedMLAdapters; interface type Relationships = class public function create(_obj: Relationships); function Init(); function GetRelationshipById(_key: string); function GetRelationshipByTarget(_key: string); function AddRelationship(_value: Relationship); property RelationshipCount: uinteger read relationship_count_; private object_: Relationships; relationship_id_hash_: hash; relationship_target_hash_: hash; relationship_count_: uinteger; end; type Types = class public function create(_obj: Types); function Init(); function GetDefaultByExtension(_key: string); function AddDefault(_value: Default); function GetOverrideByPartName(_key: string); function AddOverride(_value: Override); property DefaultCount: uinteger read default_count_; property OverrideCount: uinteger read override_count_; private object_: Types; default_extension_hash_: hash; default_count_: uinteger; override_partname_hash_: hash; override_count_: uinteger; end; implementation function Relationships.create(_obj: Relationships); begin object_ := _obj; relationship_count_ := 0; relationship_id_hash_ := array(); relationship_target_hash_ := array(); {self.}Init(); end; function Relationships.Init(); begin elements := object_.Relationships(); for k,v in elements do begin relationship_id_hash_[v.Id] := v; relationship_target_hash_[v.Target] := v; relationship_count_++; end end; function Relationships.GetRelationshipById(_key: string); begin return relationship_id_hash_[_key]; end; function Relationships.GetRelationshipByTarget(_key: string); begin return relationship_target_hash_[_key]; end; function Relationships.AddRelationship(_value: Relationship); begin relationship_id_hash_[_value.Id] := _value; relationship_target_hash_[_value.Target] := _value; relationship_count_++; end; function Types.create(_obj: Types); begin object_ := _obj; default_count_ := 0; default_extension_hash_ := array(); override_count_ := 0; override_partname_hash_ := array(); {self.}Init(); end; function Types.Init(); begin elements := object_.Defaults(); for k,v in elements do default_extension_hash_[v.Extension] := v; default_count_++; elements := object_.Overrides(); for k,v in elements do override_partname_hash_[v.PartName] := v; override_count_++; end; function Types.GetDefaultByExtension(_key: string); begin return default_extension_hash_[_key]; end; function Types.AddDefault(_value: Default); begin default_extension_hash_[_value.Extension] := _value; default_count_++; end; function Types.GetOverrideByPartName(_key: string); begin return override_partname_hash_[_key]; end; function Types.AddOverride(_value: Override); begin override_partname_hash_[_value.PartName] := _value; override_count_++; end; end.