sica-fondt/reference/adayaml-parser/implementation/yaml-dom-sequence_data.adb
Claude 24f816b6a3
Consolidate 22 sibling repos into layered organism structure
Place useful parts of the surrounding repos into sica-fondt by layer, per the
body model (Ada = membrane; brain/endocrine/capabilities/knowledge non-Ada):

- brain/        LLM reasoning + providers (dapr, hermes, MoMoA)
- capabilities/ REPRAG sidecars: hermes tools/skills, dapr tools, parallel
                dispatch, A51 channels, and the OSINT cluster
- knowledge/    LORAG corpus: 754 cyber-skills, agency personas, secure-coding,
                MITRE ATT&CK data
- reference/    defensive threat-reference (C3, shhbruh doc) + AdaYaml parser

License handling: AGPL sources (worldosint, advanced_evolution, mercury,
Reticulum) and GPL DeTTECT are SPEC-only clean-room/port descriptions — no
copyleft code copied. MIT/Apache/data parts copied as working trees.

Safety: shhbruh escape/persistence material and C3 covert-C2 kept as reference
only, not wired into the running organism. See CONSOLIDATION.md.

https://claude.ai/code/session_01UehUqEXXJJCsHoA4voCU5c
2026-06-10 06:53:01 +00:00

240 lines
8.0 KiB
Ada

-- part of AdaYaml, (c) 2017 Felix Krause
-- released under the terms of the MIT license, see the file "copying.txt"
with Yaml.Dom.Node;
package body Yaml.Dom.Sequence_Data is
use type Count_Type;
type Iterator is new Iterators.Forward_Iterator with record
Container : not null access constant Instance;
end record;
function First (Object : Iterator) return Cursor is
((Container => Object.Container, Index => 1));
function Next (Object : Iterator; Position : Cursor)
return Cursor is
((Container => Object.Container,
Index => Natural'Min (Position.Index,
Object.Container.Data.Last_Index) + 1));
function "=" (Left, Right : Instance) return Boolean is
begin
if Left.Data.Length /= Right.Data.Length then
return False;
else
for Index in 1 .. Left.Data.Length loop
if Left.Data (Positive (Index)) /= Right.Data (Positive (Index)) then
return False;
end if;
end loop;
return True;
end if;
end "=";
function Capacity (Container : Instance) return Count_Type is
(Container.Data.Capacity);
procedure Reserve_Capacity (Container : in out Instance;
Capacity : in Count_Type) is
begin
Container.Data.Reserve_Capacity (Capacity);
end Reserve_Capacity;
function Length (Object : Instance) return Count_Type is
(Object.Data.Length);
function Is_Empty (Container : Instance) return Boolean is
(Container.Data.Is_Empty);
procedure Clear (Container : in out Instance) is
begin
Container.Data.Clear;
end Clear;
function To_Cursor (Container : Instance;
Index : Natural) return Cursor is
((Container => Container'Unrestricted_Access, Index => Index));
function To_Index (Position : Cursor) return Natural is
(Position.Index);
function Has_Element (Position : Cursor) return Boolean is
(Position.Container /= null and then Position.Index > 0 and then
Position.Index <= Position.Container.Data.Last_Index);
function Element (Object : Instance; Index : Positive)
return Node_Reference is
begin
Increase_Refcount (Object.Document);
return ((Ada.Finalization.Controlled with
Data => Object.Data.Element (Index),
Document => Object.Document));
end Element;
function Element (Object : Instance; Position : Cursor)
return Node_Reference is
(Object.Element (Positive (Position.Index)));
procedure Iterate (Object : Instance;
Process : not null access procedure
(Item : not null access Node.Instance)) is
begin
for Item of Object.Data loop
Process.all (Item);
end loop;
end Iterate;
function Iterate (Object : Instance)
return Iterators.Forward_Iterator'Class is
(Iterator'(Container => Object'Unrestricted_Access));
procedure Replace_Element (Container : in out Instance;
Index : in Positive;
New_Item : in Node_Reference) is
begin
Container.Data.Replace_Element (Index, New_Item.Data);
end Replace_Element;
procedure Replace_Element (Container : in out Instance;
Position : in Cursor;
New_Item : in Node_Reference) is
begin
Container.Data.Replace_Element (Position.Index, New_Item.Data);
end Replace_Element;
procedure Insert (Container : in out Instance;
Before : in Positive;
New_Item : in Node_Reference) is
begin
Container.Data.Insert (Before, New_Item.Data);
end Insert;
procedure Insert (Container : in out Instance;
Before : in Cursor;
New_Item : in Node_Reference) is
begin
Container.Data.Insert (Before.Index, New_Item.Data);
end Insert;
procedure Insert (Container : in out Instance;
Before : in Cursor;
New_Item : in Node_Reference;
Position : out Cursor) is
Raw_Cursor : Node_Vectors.Cursor;
begin
Container.Data.Insert (Container.Data.To_Cursor (Before.Index),
New_Item.Data, Raw_Cursor);
Position := (Container => Container'Unrestricted_Access,
Index => Node_Vectors.To_Index (Raw_Cursor));
end Insert;
procedure Prepend (Container : in out Instance;
New_Item : in Node_Reference) is
begin
Container.Data.Prepend (New_Item.Data);
end Prepend;
procedure Append (Container : in out Instance;
New_Item : in Node_Reference) is
begin
Container.Data.Append (New_Item.Data);
end Append;
procedure Delete (Container : in out Instance;
Index : in Positive;
Count : in Count_Type := 1) is
begin
Container.Data.Delete (Index, Count);
end Delete;
procedure Delete (Container : in out Instance;
Position : in out Cursor;
Count : in Count_Type := 1) is
begin
Container.Data.Delete (Position.Index, Count);
end Delete;
procedure Delete_First (Container : in out Instance;
Count : in Count_Type := 1) is
begin
Container.Data.Delete_First (Count);
end Delete_First;
procedure Delete_Last (Container : in out Instance;
Count : in Count_Type := 1) is
begin
Container.Data.Delete_Last (Count);
end Delete_Last;
procedure Reverse_Elements (Container : in out Instance) is
begin
Container.Data.Reverse_Elements;
end Reverse_Elements;
procedure Swap (Container : in out Instance;
I, J : in Positive) is
begin
Container.Data.Swap (I, J);
end Swap;
procedure Swap (Container : in out Instance;
I, J : in Cursor) is
begin
Container.Data.Swap (I.Index, J.Index);
end Swap;
function First_Index (Container : Instance) return Positive is
(Container.Data.First_Index);
function First (Container : Instance) return Cursor is
((Container => Container'Unrestricted_Access,
Index => Container.Data.First_Index));
function First_Element (Container : Instance) return Node_Reference is
(Container.Element (Container.Data.First_Index));
function Last_Index (Container : Instance) return Natural is
(Container.Data.Last_Index);
function Last (Container : Instance) return Cursor is
((Container => Container'Unrestricted_Access,
Index => Container.Data.Last_Index));
function Last_Element (Container : Instance) return Node_Reference is
(Container.Element (Container.Data.Last_Index));
function Next (Position : Cursor) return Cursor is
((Container => Position.Container,
Index => Natural'Min (Position.Index,
Position.Container.Data.Last_Index) + 1));
procedure Next (Position : in out Cursor) is
begin
Position.Index := Natural'Min (Position.Index,
Position.Container.Data.Last_Index) + 1;
end Next;
function Previous (Position : Cursor) return Cursor is
((Container => Position.Container,
Index => Position.Index - 1));
procedure Previous (Position : in out Cursor) is
begin
Position.Index := Position.Index - 1;
end Previous;
package body Friend_Interface is
function For_Document (Document : not null access Document_Instance)
return Instance is
(Document => Document, Data => <>);
procedure Raw_Append (Container : in out Instance;
New_Item : not null access Node.Instance) is
begin
Container.Data.Append (Node_Pointer (New_Item));
end Raw_Append;
end Friend_Interface;
end Yaml.Dom.Sequence_Data;