topic "Stream utilities";
[2 $$0,0#00000000000000000000000000000000:Default]
[i448;a25;kKO9;2 $$1,0#37138531426314131252341829483380:class]
[l288;2 $$2,0#27521748481378242620020725143825:desc]
[0 $$3,0#96390100711032703541132217272105:end]
[H6;0 $$4,0#05600065144404261032431302351956:begin]
[i448;a25;kKO9;2 $$5,0#37138531426314131252341829483370:item]
[l288;a4;*@5;1 $$6,6#70004532496200323422659154056402:requirement]
[l288;i1121;b17;O9;~~~.1408;2 $$7,0#10431211400427159095818037425705:param]
[i448;b42;O9;2 $$8,8#61672508125594000341940100500538:tparam]
[b42;2 $$9,9#13035079074754324216151401829390:normal]
[{_}%EN-US 
[s0; [5 Stream helpers]&]
[s0;3%- &]
[ {{10000t/25b/25@1 [s0;%- [* Function List]]}}&]
[s3;%- &]
[s5;:LoadStream`(Stream`&`):%- [_^String^ String]_[* LoadStream]([_^Stream^ Stream][@(0.0.255) `&
]_[*@3 in])&]
[s2; Reads the stream starting with the current position till the 
end is reached and returns data in String.&]
[s7; [%-*C@3 in]-|Stream.&]
[s7; [*/ Return value]-|Content of stream.&]
[s3;%- &]
[s4;%- &]
[s5;:SaveStream`(Stream`&`,const String`&`):%- [@(0.0.255) bool]_[* SaveStream]([_^Stream^ S
tream][@(0.0.255) `&]_[*@3 out], [@(0.0.255) const]_[_^String^ String][@(0.0.255) `&]_[*@3 da
ta])&]
[s2; Writes data to stream.&]
[s7; [%-*C@3 out]-|Output stream.&]
[s7; [%-*C@3 data]-|Data to write.&]
[s7; [*/ Return value]-|True if all data were successfully written to 
the stream.&]
[s3;%- &]
[s4;%- &]
[s5;:CopyStream`(Stream`&`,Stream`&`,int64`):%- [_^int64^ int64]_[* CopyStream]([_^Stream^ S
tream][@(0.0.255) `&]_[*@3 dest], [_^Stream^ Stream][@(0.0.255) `&]_[*@3 src], 
[_^int64^ int64]_[*@3 count])&]
[s2; Copies data from source to destination stream.&]
[s7; [%-*C@3 dest]-|Destination stream.&]
[s7; [%-*C@3 src]-|Source stream.&]
[s7; [%-*C@3 count]-|Number of bytes to copy.&]
[s7; [*/ Return value]-|Number of bytes actually copies.&]
[s3;%- &]
[s4;%- &]
[s5;:CopyStream`(Stream`&`,Stream`&`):%- [_^int64^ int64]_[* CopyStream]([_^Stream^ Stream][@(0.0.255) `&
]_[*@3 dest], [_^Stream^ Stream][@(0.0.255) `&]_[*@3 src])&]
[s2; Copies all data from source stream starting with current position 
to the destination stream.&]
[s7; [%-*C@3 dest]-|Destination stream.&]
[s7; [%-*C@3 src]-|Source stream.&]
[s7; [*/ Return value]-|Number of bytes copied.&]
[s3;%- &]
[s4;%- &]
[s5;:Cout`(`):%- [_^Stream^ Stream][@(0.0.255) `&]_[* Cout]()&]
[s2; Returns special output stream representing console output. Data 
written to this stream are displayed as characters in console.&]
[s7; [*/ Return value]-|Console stream.&]
[s3;%- &]
[s4;%- &]
[s5;:ReadStdIn`(`):%- [_^String^ String]_[* ReadStdIn]()&]
[s2; Reads one line of input data from the console.&]
[s7; [*/ Return value]-|Console input.&]
[s3;%- &]
[s4;%- &]
[s5;:NilStream`(`):%- [_^Stream^ Stream][@(0.0.255) `&]_[* NilStream]()&]
[s2; Returns special stream that is always in IsEof state and simply 
discards all data written to it.&]
[s7; [*/ Return value]-|`"Black hole`" stream.&]
[s3;%- &]
[s4;%- &]
[s5;:LoadFile`(const char`*`):%- [_^String^ String]_[* LoadFile]([@(0.0.255) const]_[@(0.0.255) c
har]_`*[*@3 filename])&]
[s2; Loads the content of specified file.&]
[s7; [%-*C@3 filename]-|File name.&]
[s7; [*/ Return value]-|Content of file.&]
[s3;%- &]
[s4;%- &]
[s5;:SaveFile`(const char`*`,const String`&`):%- [@(0.0.255) bool]_[* SaveFile]([@(0.0.255) c
onst]_[@(0.0.255) char]_`*[*@3 filename], [@(0.0.255) const]_[_^String^ String][@(0.0.255) `&
]_[*@3 data])&]
[s2; Saves data as the file (overwrites existing).&]
[s7; [%-*C@3 filename]-|File name.&]
[s7; [%-*C@3 data]-|Data to write.&]
[s7; [*/ Return value]-|true if file was successfully written.&]
[s3;%- &]
[s4;%- &]
[s5;:operator`%`(Stream`&`,T`&`):%- [@(0.0.255) template]_<[@(0.0.255) class]_[*@4 T][@(0.0.255) >
]_[_^Stream^ Stream][@(0.0.255) `&]_[* operator%]([_^Stream^ Stream][@(0.0.255) `&]_[*@3 s], 
[*@4 T][@(0.0.255) `&]_[*@3 x])&]
[s2; Serialization operator. Simply invokes x.Serialize(s);&]
[s7; [*C@4 T]-|Type of variable to be serialized.&]
[s7; [%-*C@3 s]-|Stream.&]
[s7; [%-*C@3 x]-|Variable to be serialized.&]
[s7; [*/ Return value]-|s for chaining.&]
[s3;%- &]
[s4;%- &]
[s5;:operator`<`<`(Stream`&`,const char`*`):%- [_^Stream^ Stream][@(0.0.255) `&]_[* operato
r<<]([_^Stream^ Stream][@(0.0.255) `&]_[*@3 s], [@(0.0.255) const]_[@(0.0.255) char]_`*[*@3 x
])&]
[s2; Overload of stream insertion operator to get simple case work. 
Insertion operator uses formatted stream output (Putf).&]
[s7; [%-*C@3 s]-|Output stream.&]
[s7; [%-*C@3 x]-|Data to write `- all characters are written to the 
stream.&]
[s7; [*/ Return value]-|s for chaining.&]
[s3;%- &]
[s4;%- &]
[s5;:operator`<`<`(Stream`&`,char`*`):%- [_^Stream^ Stream][@(0.0.255) `&]_[* operator<<]([_^Stream^ S
tream][@(0.0.255) `&]_[*@3 s], [@(0.0.255) char]_`*[*@3 x])&]
[s2; Overload of stream insertion operator to get simple case work. 
Insertion operator uses formatted stream output (Putf).&]
[s7; [%-*C@3 s]-|Output stream.&]
[s7; [%-*C@3 x]-|Data to write `- all characters are written to the 
stream.&]
[s7; [*/ Return value]-|s for chaining.&]
[s3;%- &]
[s4;%- &]
[s5;:operator`<`<`(Stream`&`,const String`&`):%- [_^Stream^ Stream][@(0.0.255) `&]_[* opera
tor<<]([_^Stream^ Stream][@(0.0.255) `&]_[*@3 s], [@(0.0.255) const]_[_^String^ String]_`&[*@3 x
])&]
[s2; Overload of stream insertion operator to get simple case work. 
Insertion operator uses formatted stream output (Putf).&]
[s7; [%-*C@3 s]-|Output stream.&]
[s7; [%-*C@3 x]-|Data to write `- all characters are written to the 
stream.&]
[s7; [*/ Return value]-|s for chaining.&]
[s3;%- &]
[s4;%- &]
[s5;:operator`<`<`(Stream`&`,char`):%- [_^Stream^ Stream][@(0.0.255) `&]_[* operator<<]([_^Stream^ S
tream][@(0.0.255) `&]_[*@3 s], [@(0.0.255) char]_[*@3 x])&]
[s2; Overload of stream insertion operator to get simple case work. 
Insertion operator uses formatted stream output (Putf).&]
[s7; [%-*C@3 s]-|Output stream.&]
[s7; [%-*C@3 x]-|Data to write `- it is written as single character.&]
[s7; [*/ Return value]-|s for chaining.&]
[s3;%- &]
[s4;%- &]
[s5;:operator`<`<`(Stream`&`,const void`*`):%- [_^Stream^ Stream][@(0.0.255) `&]_[* operato
r<<]([_^Stream^ Stream][@(0.0.255) `&]_[*@3 s], [@(0.0.255) const]_[@(0.0.255) void]_`*[*@3 x
])&]
[s2; Overload of stream insertion operator to get simple case work. 
Insertion operator uses formatted stream output (Putf).&]
[s7; [%-*C@3 s]-|Output stream.&]
[s7; [%-*C@3 x]-|Data to write `- pointer is formatted as hexadecimal 
value.&]
[s7; [*/ Return value]-|s for chaining.&]
[s3;%- &]
[s4;%- &]
[s5;:operator`<`<`(Stream`&`,void`*`):%- [_^Stream^ Stream][@(0.0.255) `&]_[* operator<<]([_^Stream^ S
tream][@(0.0.255) `&]_[*@3 s], [@(0.0.255) void]_`*[*@3 x])&]
[s2; Overload of stream insertion operator to get simple case work. 
Insertion operator uses formatted stream output (Putf).&]
[s7; [%-*C@3 s]-|Output stream.&]
[s7; [%-*C@3 x]-|Data to write `- pointer is formatted as hexadecimal 
value.&]
[s7; [*/ Return value]-|s for chaining.&]
[s3;%- &]
[s4;%- &]
[s5;:operator`<`<`(Stream`&`,const T`&`):%- [@(0.0.255) template]_<[@(0.0.255) class]_[*@4 T
][@(0.0.255) >]_[_^Stream^ Stream][@(0.0.255) `&]_[* operator<<]([_^Stream^ Stream][@(0.0.255) `&
]_[*@3 s], [@(0.0.255) const]_[*@4 T][@(0.0.255) `&]_[*@3 x])&]
[s2; Global stream insertion operator. Calls AsString for x and stores 
the result to the stream. Global AsString version in turn calls 
ToString method of x.&]
[s7; [*C@4 T]-|Type of data to write to the stream.&]
[s7; [%-*C@3 s]-|Output stream.&]
[s7; [%-*C@3 x]-|Data to write.&]
[s7; [*/ Return value]-|s for chaining.&]
[s3; &]
[s0; ]