Overview
Comment: | s_expressions-atom_buffers: rename accessors for less overloading |
---|---|
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
16e999a3daaef2b3b757bfed681a1f73 |
User & Date: | nat on 2014-01-13 19:24:42 |
Other Links: | manifest | tags |
Context
2014-01-14
| ||
20:30 | s_expressions-atom_buffers-tests: new test for actual contents after soft reset check-in: b57427c879 user: nat tags: trunk | |
2014-01-13
| ||
19:24 | s_expressions-atom_buffers: rename accessors for less overloading check-in: 16e999a3da user: nat tags: trunk | |
2014-01-12
| ||
16:14 | s_expressions-parsers-tests: basic test suite for S-expression parser check-in: 50d86c2bfe user: nat tags: trunk | |
Changes
Modified src/natools-s_expressions-atom_buffers.adb from [272fdb4d6d] to [5032a4fadd].
︙ | ︙ | |||
77 78 79 80 81 82 83 | function Length (Buffer : Atom_Buffer) return Count is begin return Buffer.Used; end Length; | | | | | | | | 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 | function Length (Buffer : Atom_Buffer) return Count is begin return Buffer.Used; end Length; function Data (Buffer : Atom_Buffer) return Atom is begin if Buffer.Ref.Is_Empty then pragma Assert (Buffer.Available = 0 and Buffer.Used = 0); return Null_Atom; else return Buffer.Ref.Query.Data.all; end if; end Data; function Raw_Query (Buffer : Atom_Buffer) return Atom_Refs.Accessor is function Create return Atom; function Create return Atom is begin return Null_Atom; end Create; begin if Buffer.Ref.Is_Empty then return Atom_Refs.Create (Create'Access).Query; else return Buffer.Ref.Query; end if; end Raw_Query; procedure Query (Buffer : in Atom_Buffer; Process : not null access procedure (Data : in Atom)) is begin if Buffer.Ref.Is_Empty then Process.all (Null_Atom); else Buffer.Ref.Query (Process); end if; end Query; procedure Read (Buffer : in Atom_Buffer; Data : out Atom; Length : out Count) is Transmit : constant Count := Count'Min (Data'Length, Buffer.Used); begin Length := Buffer.Used; if Buffer.Ref.Is_Empty then pragma Assert (Length = 0); null; else Data (Data'First .. Data'First + Transmit - 1) := Buffer.Ref.Query.Data.all (1 .. Transmit); end if; end Read; function Element (Buffer : Atom_Buffer; Position : Count) return Octet is begin return Buffer.Ref.Query.Data.all (Position); end Element; |
︙ | ︙ |
Modified src/natools-s_expressions-atom_buffers.ads from [ac31988134] to [73413c8038].
︙ | ︙ | |||
40 41 42 43 44 45 46 | -- any further allocation. procedure Append (Buffer : in out Atom_Buffer; Data : in Atom); procedure Append (Buffer : in out Atom_Buffer; Data : in Octet); -- Append Data after the end of Buffer function Length (Buffer : Atom_Buffer) return Count; | | < | > > > | 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | -- any further allocation. procedure Append (Buffer : in out Atom_Buffer; Data : in Atom); procedure Append (Buffer : in out Atom_Buffer; Data : in Octet); -- Append Data after the end of Buffer function Length (Buffer : Atom_Buffer) return Count; function Data (Buffer : Atom_Buffer) return Atom; procedure Query (Buffer : in Atom_Buffer; Process : not null access procedure (Data : in Atom)); procedure Read (Buffer : in Atom_Buffer; Data : out Atom; Length : out Count); function Element (Buffer : Atom_Buffer; Position : Count) return Octet; -- Accessors to the whole buffer as an Atom function Raw_Query (Buffer : Atom_Buffer) return Atom_Refs.Accessor; -- Accessor to the whole allocated memory procedure Hard_Reset (Buffer : in out Atom_Buffer); -- Clear buffer and release internal memory procedure Soft_Reset (Buffer : in out Atom_Buffer); -- Clear buffer keeping internal memory |
︙ | ︙ |
Modified src/natools-s_expressions-parsers.adb from [0ce9683aff] to [3aa2c30191].
︙ | ︙ | |||
30 31 32 33 34 35 36 | function Current_Atom (P : in Parser) return Atom is begin if P.Latest /= Events.Add_Atom then raise Program_Error; end if; | | | 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | function Current_Atom (P : in Parser) return Atom is begin if P.Latest /= Events.Add_Atom then raise Program_Error; end if; return P.Buffer.Data; end Current_Atom; function Current_Level (P : in Parser) return Natural is begin return P.Level; end Current_Level; |
︙ | ︙ | |||
61 62 63 64 65 66 67 | Data : out Atom; Length : out Count) is begin if P.Latest /= Events.Add_Atom then raise Program_Error; end if; | | | 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 | Data : out Atom; Length : out Count) is begin if P.Latest /= Events.Add_Atom then raise Program_Error; end if; P.Buffer.Read (Data, Length); end Read_Atom; procedure Next_Event (P : in out Parser; Input : not null access Ada.Streams.Root_Stream_Type'Class) is |
︙ | ︙ | |||
169 170 171 172 173 174 175 | then P.Buffer.Append (Encodings.Decode_Base64 (P.Internal.Chunk.Data (0 .. P.Internal.Chunk.Length - 1))); if P.Internal.State = Base64_Atom then P.Latest := Events.Add_Atom; else | | | 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 | then P.Buffer.Append (Encodings.Decode_Base64 (P.Internal.Chunk.Data (0 .. P.Internal.Chunk.Length - 1))); if P.Internal.State = Base64_Atom then P.Latest := Events.Add_Atom; else P.Override.Append (P.Buffer.Data); P.Buffer.Soft_Reset; end if; P.Internal := (State => Waiting); end if; when Hex_Atom => if Encodings.Is_Hex_Digit (O) then |
︙ | ︙ |
Modified tests/natools-s_expressions-atom_buffers-tests.adb from [429ec5c6b1] to [7b455a1983].
︙ | ︙ | |||
51 52 53 54 55 56 57 | begin Buffer.Append (Data (0 .. 10)); Buffer.Append (Data (11 .. 11)); Buffer.Append (Data (12 .. 101)); Buffer.Append (Data (102 .. 101)); Buffer.Append (Data (102 .. 255)); | | | 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | begin Buffer.Append (Data (0 .. 10)); Buffer.Append (Data (11 .. 11)); Buffer.Append (Data (12 .. 101)); Buffer.Append (Data (102 .. 101)); Buffer.Append (Data (102 .. 255)); Test_Tools.Test_Atom (Report, Name, Data, Buffer.Data); end; exception when Error : others => Report.Report_Exception (Name, Error); end Test_Block_Append; procedure Test_Octet_Append (Report : in out NT.Reporter'Class) is |
︙ | ︙ | |||
73 74 75 76 77 78 79 | declare Buffer : Atom_Buffer; begin for O in Octet loop Buffer.Append (O); end loop; | | | | | | | | | | | | | | | | | 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 | declare Buffer : Atom_Buffer; begin for O in Octet loop Buffer.Append (O); end loop; Test_Tools.Test_Atom (Report, Name, Data, Buffer.Data); end; exception when Error : others => Report.Report_Exception (Name, Error); end Test_Octet_Append; procedure Test_Preallocate (Report : in out NT.Reporter'Class) is Name : constant String := "Preallocation of memory"; begin declare Buffer : Atom_Buffer; begin Buffer.Preallocate (256); declare Old_Accessor : Atom_Refs.Accessor := Buffer.Raw_Query; begin for O in Octet loop Buffer.Append (O); end loop; Report.Item (Name, NT.To_Result (Old_Accessor.Data = Buffer.Raw_Query.Data)); end; end; exception when Error : others => Report.Report_Exception (Name, Error); end Test_Preallocate; procedure Test_Query (Report : in out NT.Reporter'Class) is Name : constant String := "Accessors"; Data : Atom (0 .. 255); begin for O in Octet loop Data (Count (O)) := O; end loop; declare Buffer : Atom_Buffer; begin Buffer.Append (Data); if Buffer.Length /= Data'Length then Report.Item (Name, NT.Fail); Report.Info ("Buffer.Length returned" & Count'Image (Buffer.Length) & ", expected" & Count'Image (Data'Length)); return; end if; if Buffer.Data /= Data then Report.Item (Name, NT.Fail); Report.Info ("Data, returning an Atom"); Test_Tools.Dump_Atom (Report, Buffer.Data, "Found"); Test_Tools.Dump_Atom (Report, Data, "Expected"); return; end if; if Buffer.Raw_Query.Data.all /= Data then Report.Item (Name, NT.Fail); Report.Info ("Raw_Query, returning an accessor"); Test_Tools.Dump_Atom (Report, Buffer.Raw_Query.Data.all, "Found"); Test_Tools.Dump_Atom (Report, Data, "Expected"); return; end if; if Buffer.Element (25) /= Data (24) then Report.Item (Name, NT.Fail); Report.Info ("Element, returning an octet"); return; end if; declare Retrieved : Atom (10 .. 310); Length : Count; begin Buffer.Read (Retrieved, Length); if Length /= Data'Length or else Retrieved (10 .. Length + 9) /= Data then Report.Item (Name, NT.Fail); Report.Info ("Read into an existing buffer"); Report.Info ("Length returned" & Count'Image (Length) & ", expected" & Count'Image (Data'Length)); Test_Tools.Dump_Atom (Report, Retrieved (10 .. Length + 9), "Found"); Test_Tools.Dump_Atom (Report, Data, "Expected"); return; end if; end; declare Retrieved : Atom (20 .. 50); Length : Count; begin Buffer.Read (Retrieved, Length); if Length /= Data'Length or else Retrieved /= Data (0 .. 30) then Report.Item (Name, NT.Fail); Report.Info ("Read into a buffer too small"); Report.Info ("Length returned" & Count'Image (Length) & ", expected" & Count'Image (Data'Length)); Test_Tools.Dump_Atom (Report, Retrieved, "Found"); Test_Tools.Dump_Atom (Report, Data (0 .. 30), "Expected"); return; end if; end; |
︙ | ︙ | |||
207 208 209 210 211 212 213 | Report.Item (Name, NT.Success); exception when Error : others => Report.Report_Exception (Name, Error); end Test_Query; procedure Test_Query_Null (Report : in out NT.Reporter'Class) is | | | | | | | | | | | 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 | Report.Item (Name, NT.Success); exception when Error : others => Report.Report_Exception (Name, Error); end Test_Query; procedure Test_Query_Null (Report : in out NT.Reporter'Class) is Name : constant String := "Accessor variants against a null buffer"; begin declare Buffer : Atom_Buffer; begin if Buffer.Data /= Null_Atom then Report.Item (Name, NT.Fail); Report.Info ("Data, returning an Atom"); Test_Tools.Dump_Atom (Report, Buffer.Data, "Found"); return; end if; if Buffer.Raw_Query.Data.all /= Null_Atom then Report.Item (Name, NT.Fail); Report.Info ("Raw_Query, returning an accessor"); Test_Tools.Dump_Atom (Report, Buffer.Raw_Query.Data.all, "Found"); return; end if; declare Retrieved : Atom (1 .. 10); Length : Count; begin Buffer.Read (Retrieved, Length); if Length /= 0 then Report.Item (Name, NT.Fail); Report.Info ("Read into an existing buffer"); Report.Info ("Length returned" & Count'Image (Length) & ", expected 0"); return; end if; end; declare |
︙ | ︙ | |||
276 277 278 279 280 281 282 | Buffer : Atom_Buffer; begin for O in Octet loop Buffer.Append (O); end loop; declare | | | | | | 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 | Buffer : Atom_Buffer; begin for O in Octet loop Buffer.Append (O); end loop; declare Accessor : Atom_Refs.Accessor := Buffer.Raw_Query; begin Buffer.Soft_Reset; if Buffer.Length /= 0 then Report.Item (Name, NT.Fail); Report.Info ("Soft reset left length" & Count'Image (Buffer.Length)); return; end if; if Buffer.Raw_Query.Data /= Accessor.Data then Report.Item (Name, NT.Fail); Report.Info ("Soft reset changed storage area"); return; end if; if Buffer.Raw_Query.Data.all'Length /= Buffer.Available then Report.Item (Name, NT.Fail); Report.Info ("Available length inconsistency, recorded" & Count'Image (Buffer.Available) & ", actual" & Count'Image (Buffer.Raw_Query.Data.all'Length)); return; end if; end; for O in Octet'(10) .. Octet'(50) loop Buffer.Append (O); end loop; |
︙ | ︙ |
Modified tests/natools-s_expressions-test_tools.adb from [d4ac9882a2] to [a3c92b3b45].
︙ | ︙ | |||
207 208 209 210 211 212 213 | end loop; end if; end Write; function Get_Data (Stream : Memory_Stream) return Atom is begin | | | | | 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 | end loop; end if; end Write; function Get_Data (Stream : Memory_Stream) return Atom is begin return Stream.Internal.Data; end Get_Data; function Unread_Data (Stream : Memory_Stream) return Atom is begin if Stream.Read_Pointer < Stream.Internal.Length then return Stream.Internal.Raw_Query.Data.all (Stream.Read_Pointer + 1 .. Stream.Internal.Length); else return Null_Atom; end if; end Unread_Data; procedure Set_Data (Stream : in out Memory_Stream; Data : in Atom) is begin Stream.Internal.Soft_Reset; Stream.Internal.Append (Data); end Set_Data; function Unread_Expected (Stream : Memory_Stream) return Atom is begin if Stream.Expect_Pointer < Stream.Expected.Length then return Stream.Expected.Raw_Query.Data.all (Stream.Expect_Pointer + 1 .. Stream.Expected.Length); else return Null_Atom; end if; end Unread_Expected; |
︙ | ︙ |