Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • doc/user/user.tex

    r08065aa4 r9e0a360  
    1111%% Created On       : Wed Apr  6 14:53:29 2016
    1212%% Last Modified By : Peter A. Buhr
    13 %% Last Modified On : Tue Jun 25 08:51:33 2019
    14 %% Update Count     : 3871
     13%% Last Modified On : Sat Jun 15 16:29:45 2019
     14%% Update Count     : 3847
    1515%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1616
     
    33463346
    33473347
    3348 \section{Stream I/O Library}
    3349 \label{s:StreamIOLibrary}
     3348\section{I/O Stream Library}
     3349\label{s:IOStreamLibrary}
    33503350\index{input/output stream library}
    33513351\index{stream library}
    33523352
    3353 The goal of \CFA stream input/output (I/O) is to simplify the common cases\index{I/O!common case}, while fully supporting polymorphism and user defined types in a consistent way.
    3354 Stream I/O can be implicitly or explicitly formatted.
    3355 Implicit formatting means \CFA selects the output or input format for values that match with the type of a variable.
    3356 Explicit formatting means additional information is specified to augment how an output or input of value is interpreted.
    3357 \CFA formatting is a cross between C ©printf© and \CC ©cout© manipulators, and Python implicit spacing and newline.
    3358 Specifically:
     3353The goal of \CFA input/output (I/O) is to simplify the common cases\index{I/O!common case}, while fully supporting polymorphism and user defined types in a consistent way.
     3354\CFA I/O combines ideas from C ©printf©, \CC, and Python.
     3355I/O can be unformatted or formatted.
     3356Unformatted means \CFA selects the output or input format for values that match with the type of a variable.
     3357Formatted means additional information is specified to augment how an output or input of value is interpreted.
     3358\CFA formatting is a cross between C ©printf© and \CC ©cout© manipulators.
    33593359\begin{itemize}
    33603360\item
    3361 ©printf©/Python format codes are dense, making them difficult to read and remember.
     3361©printf© format codes are dense, making them difficult to read and remember.
    33623362\CFA/\CC format manipulators are named, making them easier to read and remember.
    33633363\item
    3364 ©printf©/Python separates format codes from associated variables, making it difficult to match codes with variables.
     3364©printf© separates format codes from associated variables, making it difficult to match codes with variables.
    33653365\CFA/\CC co-locate codes with associated variables, where \CFA has the tighter binding.
    33663366\item
    3367 Format manipulators in \CFA have local effect, whereas \CC have global effect, except ©setw©.
     3367Format manipulators in \CC have global rather than local effect, except ©setw©.
    33683368Hence, it is common programming practice to toggle manipulators on and then back to the default to prevent downstream side-effects.
    33693369Without this programming style, errors occur when moving prints, as manipulator effects incorrectly flow into the new location.
    33703370(To guarantee no side-effects, manipulator values must be saved and restored across function calls.)
    3371 \item
    3372 \CFA has more sophisticated implicit spacing between values than Python, plus implicit newline at the end of a print.
    33733371\end{itemize}
    33743372The \CFA header file for the I/O library is \Indexc{fstream.hfa}.
    33753373
    3376 For implicit formatted output, the common case is printing a series of variables separated by whitespace.
     3374For unformatted output, the common case is printing a sequence of variables separated by whitespace.
    33773375\begin{cquote}
    3378 \begin{tabular}{@{}l@{\hspace{2em}}l@{\hspace{2em}}l@{}}
    3379 \multicolumn{1}{c@{\hspace{2em}}}{\textbf{\CFA}}        & \multicolumn{1}{c@{\hspace{2em}}}{\textbf{\CC}}       & \multicolumn{1}{c}{\textbf{Python}}   \\
     3376\begin{tabular}{@{}l@{\hspace{3em}}l@{}}
     3377\multicolumn{1}{c@{\hspace{3em}}}{\textbf{\CFA}}        & \multicolumn{1}{c}{\textbf{\CC}}      \\
    33803378\begin{cfa}
    33813379int x = 1, y = 2, z = 3;
     
    33873385cout << x ®<< " "® << y ®<< " "® << z << endl;
    33883386\end{cfa}
    3389 &
    3390 \begin{cfa}
    3391 x = 1;  y = 2;  z = 3
    3392 print( x, y, z )
    3393 \end{cfa}
    33943387\\
    3395 \begin{cfa}[showspaces=true,aboveskip=0pt,belowskip=0pt]
    3396 1® ®2® ®3
    3397 \end{cfa}
    3398 &
    33993388\begin{cfa}[showspaces=true,aboveskip=0pt,belowskip=0pt]
    340033891® ®2® ®3
     
    34403429There is a weak similarity between the \CFA logical-or operator and the \Index{Shell pipe-operator} for moving data, where data flows in the correct direction for input but the opposite direction for output.
    34413430
    3442 For implicit formatted input, the common case is reading a sequence of values separated by whitespace, where the type of an input constant must match with the type of the input variable.
     3431For unformatter input, the common case is reading a sequence of values separated by whitespace, where the type of an input constant must match with the type of the input variable.
    34433432\begin{cquote}
    34443433\begin{lrbox}{\LstBox}
     
    34473436\end{cfa}
    34483437\end{lrbox}
    3449 \begin{tabular}{@{}l@{\hspace{3em}}l@{\hspace{3em}}l@{}}
     3438\begin{tabular}{@{}l@{\hspace{3em}}l@{}}
    34503439\multicolumn{1}{@{}l@{}}{\usebox\LstBox} \\
    3451 \multicolumn{1}{c@{\hspace{2em}}}{\textbf{\CFA}}        & \multicolumn{1}{c@{\hspace{2em}}}{\textbf{\CC}}       & \multicolumn{1}{c}{\textbf{Python}}   \\
     3440\multicolumn{1}{c@{\hspace{3em}}}{\textbf{\CFA}}        & \multicolumn{1}{c}{\textbf{\CC}}      \\
    34523441\begin{cfa}[aboveskip=0pt,belowskip=0pt]
    34533442sin | x | y | z;
     
    34573446cin >> x >> y >> z;
    34583447\end{cfa}
    3459 &
    3460 \begin{cfa}[aboveskip=0pt,belowskip=0pt]
    3461 x = int(input());  y = float(input());  z = input();
    3462 \end{cfa}
    34633448\\
    34643449\begin{cfa}[showspaces=true,aboveskip=0pt,belowskip=0pt]
    34653450®1® ®2.5® ®A®
    3466 
    3467 
    34683451\end{cfa}
    34693452&
    34703453\begin{cfa}[showspaces=true,aboveskip=0pt,belowskip=0pt]
    34713454®1® ®2.5® ®A®
    3472 
    3473 
    3474 \end{cfa}
    3475 &
    3476 \begin{cfa}[showspaces=true,aboveskip=0pt,belowskip=0pt]
    3477 ®1®
    3478 ®2.5®
    3479 ®A®
    34803455\end{cfa}
    34813456\end{tabular}
     
    373037050b0 0b11011 0b11011 0b11011 0b11011
    37313706sout | bin( -27HH ) | bin( -27H ) | bin( -27 ) | bin( -27L );
    3732 0b11100101 0b1111111111100101 0b11111111111111111111111111100101 0b®(58 1s)®100101
     37070b11100101 0b1111111111100101 0b11111111111111111111111111100101 0b(58 1s)100101
    37333708\end{cfa}
    37343709
     
    38073782®  ®4.000000 ® ®4.000000 4.000000
    38083783®  ®ab ® ®ab ab
     3784    ab    ab ab
    38093785\end{cfa}
    38103786If the value is larger, it is printed without truncation, ignoring the ©minimum©.
Note: See TracChangeset for help on using the changeset viewer.