|
DataMuseum.dkPresents historical artifacts from the history of: Rational R1000/400 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Rational R1000/400 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - download
Length: 11264 (0x2c00) Types: Ada Source Notes: 03_class, FILE, R1k_Segment, e3_tag, package Lines, seg_0046d9
└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000 └─ ⟦5a81ac88f⟧ »Space Info Vol 1« └─⟦this⟧
--| @SUMMARY This package provides a lines abstraction, allowing an arbitrary --| number of arbitrary-length lines to be collected together in a --| well-defined order. --| --| @INDICES (Text_Processing, Data_Structure) --| --| @RAISES All operations raise "Not_Initialized" if passed an uninitialized --| object. Also, all "Add" operations propagate Storage_Error if it occurs. --| with Unbounded_String; with Doubly_Linked_List_Generic; package Lines is type Line is private; --| @SUMMARY Returns an initialized line corresponding to the --| specified string. --| function Create (From_String : in String) return Line; --| @SUMMARY Returns an empty, initialized line. --| function Empty_Line return Line; --| @SUMMARY Returns a true (non-aliased) copy of the specified line. --| Very different from ":=". --| function Copy (Of_Line : in Line) return Line; --| @SUMMARY Returns the string image of the specified line. --| function Image (Of_Line : in Line) return String; type Iterator is private; --| @SUMMARY Returns an empty iterator. --| function Create return Iterator; --| @SUMMARY Returns True if the specified iterator contains no lines. --| function Is_Empty (This_Iterator : in Iterator) return Boolean; --| @SUMMARY Returns the number of lines in the specified iterator. --| function Lines_In (This_Iterator : in Iterator) return Natural; --| @SUMMARY Returns a true (non-aliased) copy of the specified iterator. --| Very different from ":=". --| function Copy (Of_Iterator : in Iterator) return Iterator; --| @SUMMARY Resets the current line in the iterator to be the first line. --| --| @SPECIAL_NOTES If the iterator is empty, has no effect (the iterator --| remains "Done"). --| procedure Reset_To_First (This_Iterator : in out Iterator); --| @SUMMARY Resets the current line in the iterator to be the last line. --| --| @SPECIAL_NOTES If the iterator is empty, has no effect (the iterator --| remains "Done"). --| procedure Reset_To_Last (This_Iterator : in out Iterator); --| @SUMMARY Returns True if the iterator has been advanced past the --| last element, has been backed-up past the first element, or is empty. --| --| @SPECIAL_NOTES Note that empty iterators are always "Done", but "Done" --| iterators are not necessarily empty. --| function Done (This_Iterator : in Iterator) return Boolean; --| @SUMMARY Returns True if the current position is the first line in --| the iterator. --| --| @SPECIAL_NOTES Will be True at the same time as "At_Last" if the --| iterator contains only one line. --| --| Returns False if the iterator is empty. --| function At_First (This_Iterator : in Iterator) return Boolean; --| @SUMMARY Returns True if the current position is the last line in --| the iterator. --| --| @SPECIAL_NOTES Will be True at the same time as "At_First" if the --| iterator contains only one line. --| --| Returns False if the iterator is empty. --| function At_Last (This_Iterator : in Iterator) return Boolean; --| @SUMMARY Advances the current line in the iterator to the --| previous line. --| --| @RAISES No_Previous_Line (if "Done"). --| procedure Previous (This_Iterator : in out Iterator); --| @SUMMARY Advances the current line in the iterator to the next line. --| --| @RAISES No_Next_Line (if "Done"). --| procedure Next (This_Iterator : in out Iterator); --| @SUMMARY Returns the current line in the iterator. --| --| @RAISES No_Current_Line (if "Done"). --| function Current (This_Iterator : in Iterator) return Line; --| @SPECIAL_NOTES Lines are numbered 1..N type Line_Number is new Positive; --| @SUMMARY Returns the line number corresponding to the current line in --| the iterator. --| --| @RAISES No_Current_Line (if already "Done"). --| function Position (In_Iterator : in Iterator) return Line_Number; --| @SUMMARY Sets the current line in the iterator to the specified --| line number. --| --| @RAISES Out_Of_Range (if the specified line number is out of range). --| procedure Set (This_Iterator : in out Iterator; To_Line : in Line_Number); --| @SUMMARY Returns the line corresponding to the specified line number. --| --| @RAISES Out_Of_Range (if the specified line number is out of range). --| function Line_At (This_Position : in Line_Number; In_Iterator : in Iterator) return Line; --| @SUMMARY Adds the specified line to the end of the iterator. --| --| @SPECIAL_NOTES Does not alter iterator state. The iterator is still --| pointing to the same line as it was before the operation (the only --| exception to this is if the line just added is the only line in the --| iterator, in which case it becomes the first line, the last line, the --| current position, and the current line simultaneously). --| procedure Add (To_Iterator : in out Iterator; This_Line : in Line); --| @SPECIAL_NOTES Control position of additions. --| type Orientations is (Preceeding, Following); --| @SUMMARY If "With_Orientation" is "Following", adds the specified --| line to the iterator after the current position. If "With_Orientation" --| is "Preceeding", adds the specified line to the iterator before the --| current position. --| --| @RAISES No_Current_Line (if "Done"). --| --| @SPECIAL_NOTES This operation does not alter iterator state. The --| iterator is still pointing to the same line as it was before the --| operation (note, however, that insertions which increase the number --| of lines preceeding the original position will increment the original --| position by 1). --| procedure Add (To_Iterator : in out Iterator; This_Line : in Line; With_Orientation : in Orientations); --| @SUMMARY If "With_Orientation" is "Following", adds the specified --| line to the iterator after the indicated position. If "With_Orientation" --| is "Preceeding", adds the specified line to the iterator before the --| specified position. --| --| @RAISES Out_Of_Range (if the specified position is out of range). --| --| @SPECIAL_NOTES This operation does not alter iterator state. The --| iterator is still pointing to the same line as it was before the --| operation (note, however, that insertions which increase the number --| of lines preceeding the original position will increment the original --| position by 1). --| procedure Add (To_Iterator : in out Iterator; This_Line : in Line; At_Position : in Line_Number; With_Orientation : in Orientations); --| @SUMMARY Replaces the current line in the iterator with the new line. --| Can be called during iteration without altering iterator's position. --| --| @RAISES No_Current_Line (if already "Done"). --| procedure Modify (This_Iterator : in out Iterator; New_Line : in Line); --| @SUMMARY Deletes the current line. Current line is set to the line --| immediately following the deleted line. --| --| @RAISES No_Current_Line (if the iterator is "Done" before the delete --| is attempted). --| --| @SPECIAL_NOTES If the deleted line was the last line in the iterator, --| the iterator becomes "Done". --| procedure Delete (From_Iterator : in out Iterator); --| @SUMMARY Deletes the line at the specified position from the iterator. --| --| @RAISES Out_Of_Range (if the specified line number is out of range). --| --| @SPECIAL_NOTES If the line at the specified position is not the current --| line, the state of the iterator is unchanged (note, however, that --| deletions which decrease the number of lines preceeding the original --| position will decrement the current position by 1). --| --| If the line at the specified position is the current line, --| the new current line is set to the line immediately following --| the deleted line (note that the position remains unchanged). If --| the deleted line was the last line in the iterator, the iterator --| becomes "Done". --| procedure Delete (From_Iterator : in out Iterator; This_Position : in Line_Number); --| @SUMMARY Reclaims storage. --| procedure Dispose (Of_This_Iterator : in out Iterator); Not_Initialized : exception; No_Current_Line : exception; No_Previous_Line : exception; No_Next_Line : exception; Out_Of_Range : exception; private package Vstrings is new Unbounded_String; type Line is record Contents : Vstrings.Variable_String; Is_Initialized : Boolean := False; end record; package Strings is new Doubly_Linked_List_Generic (Line); type Iterator is record Contents : Strings.List := Strings.Create; Is_Initialized : Boolean := False; end record; end Lines;
nblk1=a nid=0 hdr6=14 [0x00] rec0=1f rec1=00 rec2=01 rec3=05a [0x01] rec0=1e rec1=00 rec2=02 rec3=00c [0x02] rec0=19 rec1=00 rec2=03 rec3=00a [0x03] rec0=1d rec1=00 rec2=04 rec3=038 [0x04] rec0=1a rec1=00 rec2=05 rec3=04a [0x05] rec0=15 rec1=00 rec2=06 rec3=042 [0x06] rec0=13 rec1=00 rec2=07 rec3=01e [0x07] rec0=16 rec1=00 rec2=08 rec3=046 [0x08] rec0=16 rec1=00 rec2=09 rec3=00c [0x09] rec0=1f rec1=00 rec2=0a rec3=000 tail 0x215004c10815c672d279e 0x42a00088462061e03