Museum

Home

Lab Overview

Retrotechnology Articles

⇒ Online Manual

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

ios(3C++)

istream(3C++)

ostream(3C++)






       manip(3C++)                                              manip(3C++)


       NAME
             manip - iostream out of band manipulations

       SYNOPSIS
             #include <iostream.h>
             #include <iomanip.h>

             IOMANIPdeclare(T) ;

             class SMANIP(T) {
                   SMANIP(T)( ios& (*)(ios&,T), T);
                   friend      istream& operator>>(istream&, SMANIP(T)&);
                   friend      ostream& operator<<(ostream&, SMANIP(T)&);
             };
             class SAPP(T) {
                   SAPP(T)( ios& (*)(ios&,T));
                   SMANIP(T) operator()(T);
             };
             class IMANIP(T) {
                   IMANIP(T)( istream& (*)(istream&,T), T);
                   friend      istream& operator>>(istream&, IMANIP(T)&);
             };
             class IAPP(T) {
                   IAPP(T)( istream& (*)(istream&,T));
                   IMANIP(T) operator()(T);
             };
             class OMANIP(T) {
                   OMANIP(T)( ostream& (*)(ostream&,T), T);
                   friend      ostream& operator<<(ostream&, OMANIP(T)&);
             };
             class OAPP(T) {
                   OAPP(T)( ostream& (*)(ostream&,T));
                   OMANIP(T) operator()(T);
             };
             class IOMANIP(T) {
                   IOMANIP(T)( iostream& (*)(iostream&,T), T);
                   friend      istream& operator>>(iostream&, IOMANIP(T)&);
                   friend      ostream& operator<<(iostream&, IOMANIP(T)&);
             };
             class IOAPP(T) {
                   IOAPP(T)( iostream& (*)(iostream&,T));
                   IOMANIP(T) operator()(T);
             };

             IOMANIPdeclare(int);
             IOMANIPdeclare(long);


                           Copyright 1994 Novell, Inc.               Page 1













      manip(3C++)                                              manip(3C++)


            SMANIP(long)      resetiosflags(long);
            SMANIP(int) setfill(int);
            SMANIP(long)      setiosflags(long);
            SMANIP(int) setprecision(int);
            SMANIP(int) setw(int w);

      DESCRIPTION
            Manipulators are values that may be ``inserted into'' or
            ``extracted from'' streams to achieve some effect (other than
            to insert or extract a value representation), with a
            convenient syntax.  They enable one to embed a function call
            in an expression containing a series of insertions or
            extractions.  For example, the predefined manipulator for
            ostreams, flush, can be used as follows:
            cout << flush
            to flush cout.  Several iostream classes supply manipulators:
            see ios(3C++), istream(3C++), and ostream(3C++).  flush is a
            simple manipulator; some manipulators take arguments, such as
            the predefined ios manipulators, setfill and setw (see below).
            The header file iomanip.h supplies macro definitions which
            programmers can use to define new parameterized manipulators.

            Ideally, the types relating to manipulators would be
            parameterized as "templates."  The macros defined in iomanip.h
            are used to simulate templates.  IOMANIPdeclare(T) declares
            the various classes and operators.  (All code is declared
            inline so that no separate definitions are required.)  Each of
            the other Ts is used to construct the real names and therefore
            must be a single identifier.  Each of the other macros also
            requires an identifier and expands to a name.

            In the following descriptions, assume:
            - t is a T, or type name.
            - s is an ios.
            - i is an istream.
            - o is an ostream.
            - io is an iostream.
            - f is an ios& (*)(ios&).
            - if is an istream& (*)(istream&).
            - of is an ostream& (*)(ostream&).
            - iof is an iostream& (*)(iostream&).
            - n is an int.
            - l is a long.





                          Copyright 1994 Novell, Inc.               Page 2













       manip(3C++)                                              manip(3C++)


             s<<SMANIP(T)(f,t)
             s>>SMANIP(T)(f,t)
             s<<SAPP(T)(f)(t)
             s>>SAPP(T)(f)(t)
                   Returns f(s,t), where s is the left operand of the
                   insertion or extractor operator (i.e., s, i, o, or io).

             i>>IMANIP(T)(if,t)
             i>>IAPP(T)(if)(t)
                   Returns if(i,t).

             o<<OMANIP(T)(of,t)
             o<<OAPP(T)(of)(t)
                   Returns of(o,t).

             io<<IOMANIP(T)(iof,t)
             io>>IOMANIP(T)(iof,t)
             io<<IOAPP(T)(iof)(t)
             io>>IOAPP(T)(iof)(t)
                   Returns iof(io,t).

             iomanip.h contains two declarations, IOMANIPdeclare(int) and
             IOMANIPdeclare(long) and some manipulators that take an int or
             a long argument.  These manipulators all have to do with
             changing the format state of a stream; see ios(3C++) for
             further details.

             o<<setw(n)
             i>>setw(n)
                   Sets the field width of the stream (left-hand operand: o
                   or i) to n.

             o<<setfill(n)
             i>>setfill(n)
                   Sets the fill character of the stream (o or i) to be n.

             o<<setprecision(n)
             i>>setprecision(n)
                   Sets the precision of the stream (o or i) to be n.

             o<<setiosflags(l)
             i>>setiosflags(l)
                   Turns on in the stream (o or i) the format flags marked
                   in l.  (Calls o.setf(l) or i.setf(l)).




                           Copyright 1994 Novell, Inc.               Page 3













      manip(3C++)                                              manip(3C++)


            o<<resetiosflags(l)
            i>>resetiosflags(l)
                  Clears in the stream (o or i) the format bits specified
                  by l.  (Calls o.setf(0,l) or i.setf(0,l)).

         Diagnostics
            Syntax errors will be reported if IOMANIPdeclare(T) occurs
            more than once in a file with the same T.

      REFERENCES
            ios(3C++), istream(3C++), ostream(3C++)





































                          Copyright 1994 Novell, Inc.               Page 4








Typewritten Software • bear@typewritten.org • Edmonds, WA 98026