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

1.1       root        1: .TH MAP 3+
                      2: .CT 2 datatype
                      3: .SH NAME
                      4: Map \- associative array classes
                      5: .SH SYNOPSIS
                      6: .nf
                      7: .B "#include <Map.h>"
                      8: .PP
                      9: .ds 1s \*S
                     10: .ds S \fIS\fP
                     11: .ds T \fIT\fP
                     12: .ft L
                     13: Mapdeclare(\*S,\*T)
                     14: Mapimplement(\*S,\*T)
                     15: .PP
                     16: .ft L
                     17: struct Map(\*S,\*T) {
                     18:        Map(\*S,\*T)();
                     19:        Map(\*S,\*T)(const \*T&);
                     20:        Map(\*S,\*T)(const Map(\*S,\*T)&);
                     21:        ~Map(\*S,\*T);
                     22:        Map(\*S,\*T)& operator= (const Map(\*S,\*T)&);
                     23:        \*T& operator[] (int);
                     24:        int size();
                     25:        Mapiter(\*S,\*T) element(const \*S&);
                     26:        Mapiter(\*S,\*T) first();
                     27:        Mapiter(\*S,\*T) last();
                     28: };
                     29: .PP
                     30: .ft L
                     31: struct Mapiter(\*S,\*T) {
                     32:        Mapiter(\*S,\*T) (const Map(\*S,\*T)&);
                     33:        ~Mapiter(\*S,\*T);
                     34:        operator int();
                     35:        \*S key();
                     36:        \*T value();
                     37:        Mapiter(\*S,\*T)& operator++ (Mapiter(\*S,\*T)&);
                     38:        Mapiter(\*S,\*T)& operator-- (Mapiter(\*S,\*T)&);
                     39: };
                     40: .ft R
                     41: .fi
                     42: .SH DESCRIPTION
                     43: A
                     44: .I map
                     45: is a collection of
                     46: .I elements,
                     47: each of which contains a
                     48: .I key
                     49: part of type
                     50: .I S
                     51: and a
                     52: .I value
                     53: part of type
                     54: .I T,
                     55: where
                     56: .I S
                     57: and
                     58: .I T
                     59: are type names.
                     60: Both
                     61: .I S
                     62: and
                     63: .I T
                     64: must have value semantics:
                     65: assignment or initialization have the effect of copying.
                     66: (It is unlikely for
                     67: .I S
                     68: and
                     69: .I T
                     70: to be pointers.)
                     71: .PP
                     72: Map elements are ordered by key: type
                     73: .I S
                     74: must have a transitive boolean
                     75: .BR operator< .
                     76: .PP
                     77: The macro call
                     78: .L Mapdeclare(\*S,\*T)
                     79: declares the classes
                     80: .B Map(\*S,\*T)
                     81: and
                     82: .BR Mapiter(\*S,\*T) .
                     83: It must appear once in every source file that uses either.
                     84: The macro call
                     85: .B Mapimplement(\*S,\*T)
                     86: defines the functions that implement the map classes.
                     87: It must appear exactly once in the entire program.
                     88: .SS Map constructors
                     89: .nr xx \w'\fLMap(\*S,\*T)(m)\ \fP'
                     90: .TP \n(xxu
                     91: .B Map(\*S,\*T)()
                     92: An empty map.
                     93: The value part of future elements
                     94: is the value of an otherwise uninitialized
                     95: static object of type
                     96: .I T .
                     97: .TP
                     98: .BI Map(\*S,\*T)( x )
                     99: An empty map whose future elements have
                    100: default value
                    101: .I x .
                    102: .TP
                    103: .BI Map(\*S,\*T)( m )
                    104: A copy of map
                    105: .I m
                    106: obtained by copying the elements and default value of
                    107: .I m.
                    108: .SS Map operators
                    109: .TP  \n(xxu
                    110: .IB n " = " m
                    111: All the elements of map
                    112: .I n
                    113: are deleted and and
                    114: copies of the elements of
                    115: .I m 
                    116: are added.
                    117: The default value of
                    118: .I n
                    119: does not change.
                    120: Running time is
                    121: .IR O (log(| m |)
                    122: +
                    123: .RI log(| n |)),
                    124: where
                    125: .RI | m |
                    126: means
                    127: .IB m .size() .
                    128: .TP
                    129: .IB m [ k ]
                    130: A reference
                    131: to the value part of the element of map
                    132: .I m
                    133: with key
                    134: .BR k .
                    135: If the element does not exist, it is created.
                    136: Running time is
                    137: .IR O (log(| m |)) .
                    138: .SS Other Map functions
                    139: .TP  \n(xxu
                    140: .IB m .size()
                    141: The number of elements in
                    142: .LR m .
                    143: Running time is
                    144: .IR O (1).
                    145: .TP
                    146: .IB m .element( k )
                    147: A map iterator 
                    148: referring to the element of
                    149: .I m
                    150: with key
                    151: .I k
                    152: if such an element exists.
                    153: Otherwise the result is vacuous.
                    154: Running time is
                    155: .IR O (log(| m |)) .
                    156: .TP
                    157: .IB m .first()
                    158: .br
                    159: .ns
                    160: .TP
                    161: .IB m .last()
                    162: A map iterator
                    163: referring to the element of
                    164: .I m
                    165: with the smallest (or largest) key.
                    166: If
                    167: .L m
                    168: has no elements, the result is vacuous.
                    169: Running time is
                    170: .IR O (log(| m |)) .
                    171: .SS "Map iterators"
                    172: For every class
                    173: .B Map(\*S,\*T)
                    174: there is a class
                    175: .BR Mapiter(\*S,\*T) .
                    176: A map iterator identifies a map object and possibly
                    177: an element in that map.
                    178: An iterator that does not identify an element is
                    179: .IR vacuous .
                    180: .SS Mapiter constructors
                    181: .TP  \n(xxu
                    182: .BI Mapiter(\*S,\*T)( m )
                    183: A vacuous iterator referring to map
                    184: .I m.
                    185: Running time is
                    186: .IR O (1).
                    187: .SS Mapiter operators
                    188: .TP  \n(xxu
                    189: .IB i " = " j
                    190: Make iterator
                    191: .I i
                    192: refer (for now) to the same map as does
                    193: .I j.
                    194: .TP
                    195: .BI (int) i
                    196: Zero if iterator
                    197: .I i
                    198: is vacuous, otherwise nonzero.
                    199: .TP
                    200: .BI ++ i
                    201: .br
                    202: .ns
                    203: .TP
                    204: .BI -- i
                    205: If iterator
                    206: .I i
                    207: is vacuous, make it refer to the map element with
                    208: the smallest (or largest) key
                    209: Otherwise, make it refer to the map element with the
                    210: next key greater (or less) than the key of the
                    211: current element.
                    212: If no such element exists,
                    213: .I i
                    214: becomes vacuous.
                    215: The running time of a single increment
                    216: operation for map
                    217: .I m
                    218: is
                    219: .IR O (log(| m |)).
                    220: However an iterator 
                    221: takes only time
                    222: .IR O (| m |)
                    223: to sequence through the whole map.
                    224: .SS Other mapiter functions
                    225: .TP  \n(xxu
                    226: .IB i .key()
                    227: .br
                    228: .ns
                    229: .TP
                    230: .IB i .value()
                    231: The key (or value) part of the element referred to by
                    232: .I i .
                    233: If
                    234: .I i
                    235: is vacuous, return
                    236: the value of an otherwise uninitialized static
                    237: object of appropriate type.
                    238: Running time is
                    239: .IR O (1).
                    240: .SH EXAMPLES
                    241: .EX
                    242: struct city { char name[100]; };
                    243: typedef int population;
                    244: int operator< (const city&, const city&);
                    245: .EE
                    246: .PP
                    247: .B Mapdeclare(name,population)
                    248: .PP
                    249: .B Map(name,population) gazetteer;
                    250: .PP
                    251: .B "// Print big cities; set populations of others to zero.
                    252: .PP
                    253: .EX
                    254:        for(Mapiter(name,population) i = gazetteer.first(); i; i++)
                    255:                if(i.value() > 1000000)
                    256:                        printf("%s\en", i.key().name);
                    257:                else
                    258:                        gazetteer[i.key()] = 0;
                    259: .EE
                    260: .SH BUGS
                    261: A `type name'
                    262: .B Map(\*S,\*T)
                    263: or
                    264: .BR Mapiter(\*S,\*T) 
                    265: that contains spaces will be mangled by
                    266: .IR cpp (8).
                    267: .br
                    268: There is no way to delete a single element.
                    269: .br
                    270: Ambiguities can occur if the type name
                    271: .I S
                    272: contains an underscore.
                    273: .br
                    274: No precautions are taken against running out of memory.

unix.superglobalmegacorp.com

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