Annotation of researchv10dc/man/adm/man3/block.3, revision 1.1.1.1

1.1       root        1: .TH BLOCK 3+
                      2: .CT 2 datatype
                      3: .SH NAME
                      4: block \- adjustable arrays
                      5: .SH SYNOPSIS
                      6: .nf
                      7: .B "#include <Block.h>"
                      8: .PP
                      9: .ds T \fIT\fP
                     10: .ft L
                     11: Blockdeclare(\*T)
                     12: Blockimplement(\*T)
                     13: .PP
                     14: .ft L
                     15: struct Block(\*T) {
                     16:        Block(\*T)(unsigned = 0);
                     17:        Block(\*T)(const Block(\*T&);
                     18:        ~Block(\*T);
                     19:        Block(\*T)& operator= (const Block(\*T)&);
                     20:        \*T& operator[] (int);
                     21:        operator \*T* ();
                     22:        unsigned size();
                     23:        unsigned size(unsigned);
                     24:        \*T* end();
                     25:        void swap(const Block(\*T)&);
                     26: }
                     27: .ft R
                     28: .fi
                     29: .SH DESCRIPTION
                     30: A
                     31: .BI Block( T )
                     32: is an array of zero or more
                     33: .IR elements 
                     34: of type
                     35: .I T,
                     36: where 
                     37: .I T
                     38: is a type name.
                     39: .I T
                     40: must have assignment
                     41: .RB ( operator= )
                     42: and initialization
                     43: .RB ( \*T(\*T&) )
                     44: operations.
                     45: .PP
                     46: The macro call
                     47: .BI Blockdeclare( T )
                     48: declares the class
                     49: .BI Block( T ) .
                     50: It must appear once in every source file that uses type
                     51: .BI Block( T ) .
                     52: The macro call
                     53: .BI Blockimplement( T )
                     54: defines the functions that implement the block class.
                     55: It must appear exactly once in the entire program.
                     56: .PP
                     57: New elements 
                     58: are initialized to the value of an otherwise
                     59: uninitialized static object of type
                     60: .I T.
                     61: .SS Constructors
                     62: .nr xx \w'\fLBlock(\fIT\fL)(\fIb\fL)'
                     63: .TP \n(xxu
                     64: .BI Block( T )
                     65: An empty block.
                     66: .TP
                     67: .BI Block( T )( n )
                     68: A block of
                     69: .I n
                     70: elements.
                     71: .TP
                     72: .BI Block( T )( b )
                     73: A new block
                     74: whose elements are copies of the elements of
                     75: .BR b .
                     76: .SS Operations
                     77: Assignment copies elements and size.
                     78: .TP \n(xxu
                     79: .IB b [ k ]
                     80: A reference to element
                     81: .L k
                     82: of block
                     83: .IR b ;
                     84: undefined if
                     85: .I k
                     86: is out of bounds.
                     87: .TP
                     88: .BI ( T *) b
                     89: A pointer to the first element of block
                     90: .I b.
                     91: .SS Other functions
                     92: .TP \n(xxu
                     93: .IB b .size()
                     94: Return the number of elements in
                     95: .I b.
                     96: .TP
                     97: .IB b .size( n )
                     98: Set the size of 
                     99: .I b
                    100: to
                    101: .LR n .
                    102: If the new size is greater than the old.
                    103: Otherwise, 
                    104: .I n
                    105: old elements are kept.
                    106: Return the new size.
                    107: .TP
                    108: .IB b .reserve( n )
                    109: The size of
                    110: .I b
                    111: is increased, if necessary, to some value greater than 
                    112: .I n.
                    113: If
                    114: .I b
                    115: already has room,
                    116: .I b
                    117: is not changed.
                    118: Return zero if memory could not be allocated
                    119: and non-zero otherwise.
                    120: .TP
                    121: .IB b .end()
                    122: Returns
                    123: a pointer to just past the last element in
                    124: .LR b .
                    125: Equivalent to 
                    126: .BR (T*)b+b.size() .
                    127: .TP
                    128: .IB a .swap( b )
                    129: The memory associated with blocks
                    130: .I a
                    131: and
                    132: .I b
                    133: is exchanged.
                    134: .SS Performance
                    135: Most operations
                    136: are implemented by the obvious uses of the
                    137: .L new
                    138: and
                    139: .L delete
                    140: operators.
                    141: .I Reserve
                    142: checks the size inline.
                    143: If it isn't big enough, the size is increased by multiplying by 3/2
                    144: (and adding one) enough times to increase it beyond
                    145: .I n .
                    146: .SH EXAMPLES
                    147: .EX
                    148: Blockdeclare(long)
                    149: unsigned n = 0;
                    150: Block(long) b;
                    151: long x;
                    152: while (cin >> x) {
                    153:        b.reserve(n);
                    154:        b[n++] = x;
                    155: }
                    156: .EE
                    157: .SH SEE ALSO
                    158: .IR malloc (3),
                    159: .IR map (3)
                    160: .SH DIAGNOSTICS
                    161: The only error detected is running out of memory;
                    162: this is indicated in all cases by setting the size of the
                    163: block for which allocation failed to zero.
                    164: .SH BUGS
                    165: Elements are copied during reallocation by using
                    166: .L T::operator=
                    167: instead of
                    168: .LR T(T&) .
                    169: .br
                    170: Because the `type parameter'
                    171: .I T
                    172: is implemented by the C preprocessor, white space is
                    173: forbidden inside the parentheses of
                    174: .BI Block( T ) .
                    175: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.