Annotation of researchv10dc/man/adm/man3/block.3, revision 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.