[#BloombergLP-bdlc-IndexClerk] = xref:BloombergLP.adoc[BloombergLP]::xref:BloombergLP/bdlc.adoc[bdlc]::IndexClerk :relfileprefix: ../../ :mrdocs: This class defines an efficient, value‐semantic manager type for reusable, non‐negative integer indices. The class invariants are that the all decommissioned indices must be non‐negative, less than the next new index, and unique. == Synopsis Declared in `<bdlc_indexclerk.h>` [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- class IndexClerk; ---- == Member Functions [cols="1,4"] |=== | Name| Description | xref:BloombergLP/bdlc/IndexClerk/2constructor-0a.adoc[`IndexClerk`] [.small]#[constructor]# | Constructors | xref:BloombergLP/bdlc/IndexClerk/2destructor.adoc[`~IndexClerk`] [.small]#[destructor]# | Destroy this index clerk. | xref:BloombergLP/bdlc/IndexClerk/operator_assign.adoc[`operator=`] | Assign to this index clerk the value of the specified `rhs` index clerk, and return a reference to this modifiable index clerk. | xref:BloombergLP/bdlc/IndexClerk/bdexStreamIn.adoc[`bdexStreamIn`] | Assign to this object the value read from the specified input `stream` using the specified `version` format, and return a reference to `stream`. If `stream` is initially invalid, this operation has no effect. If `version` is not supported, this object is unaltered and `stream` is invalidated, but otherwise unmodified. If `version` is supported but `stream` becomes invalid during this operation, this object has an undefined, but valid, state. Note that no version is read from `stream`. See the `bslx` package‐level documentation for more information on BDEX streaming of value‐semantic types and containers. | xref:BloombergLP/bdlc/IndexClerk/bdexStreamOut.adoc[`bdexStreamOut`] | Write the value of this object, using the specified `version` format, to the specified output `stream`, and return a reference to `stream`. If `stream` is initially invalid, this operation has no effect. If `version` is not supported, `stream` is invalidated, but otherwise unmodified. Note that `version` is not written to `stream`. See the `bslx` package‐level documentation for more information on BDEX streaming of value‐semantic types and containers. | xref:BloombergLP/bdlc/IndexClerk/begin.adoc[`begin`] | Return a `IndexClerkIter` referring to the first index returned to this `IndexClerk` that is currently unused, or `end()` if there are currently no decommissioned indices. | xref:BloombergLP/bdlc/IndexClerk/end.adoc[`end`] | Return a `IndexClerkIter` referring to an invalid index, indicating the end of the sequence of decommissioned index. | xref:BloombergLP/bdlc/IndexClerk/getIndex.adoc[`getIndex`] | Return the next available unused integer index. Existing decommissioned indices are reissued before new ones are created. | xref:BloombergLP/bdlc/IndexClerk/isInUse.adoc[`isInUse`] | Return `true` if the specified `index` is currently in use, and `false` otherwise. The behavior is undefined unless `0 <= index` and `index < nextNewIndex()`. Note that this method runs in time proportional to the number of decommissioned indices. | xref:BloombergLP/bdlc/IndexClerk/nextNewIndex.adoc[`nextNewIndex`] | Return the smallest (non‐negative) index that has not been issued by this index clerk. Note that this function offers the client a "peek" at the next "new" index, but has no effect on the value of this index clerk. | xref:BloombergLP/bdlc/IndexClerk/numCommissionedIndices.adoc[`numCommissionedIndices`] | Return the number of indices currently in use. | xref:BloombergLP/bdlc/IndexClerk/numDecommissionedIndices.adoc[`numDecommissionedIndices`] | Return the number of indices that are currently decommissioned. | xref:BloombergLP/bdlc/IndexClerk/print.adoc[`print`] | Format this index clerk to the specified output `stream` at the (absolute value of) the optionally specified indentation `level` and return a reference to `stream`. If `level` is specified, optionally specify `spacesPerLevel`, the number of spaces per indentation level for this and all of its nested objects. If `level` is negative, suppress indentation of the first line. If `spacesPerLevel` is negative, format the entire output on one line, suppressing all but the initial indentation (as governed by `level`). If `stream` is not valid on entry, this operation has no effect. | xref:BloombergLP/bdlc/IndexClerk/putIndex.adoc[`putIndex`] | Return the specified `index` to this index clerk, which indicates that `index` is no longer in use and may be reissued. The behavior is undefined if `index` has never been generated by this clerk or is currently decommissioned. | xref:BloombergLP/bdlc/IndexClerk/removeAll.adoc[`removeAll`] | Remove all of the indices from this index clerk. Note that the following post conditions apply: ` assert(0 == numCommissionedIndices()); assert(0 == numDecommissionedIndices()); assert(0 == nextNewIndex()); ` | xref:BloombergLP/bdlc/IndexClerk/2conversion.adoc[`operator BloombergLP::bslmf::NestedTraitDeclaration<IndexClerk, UsesBslmaAllocator>`] | Declare that this type uses a `bslma` allocator. |=== == Static Member Functions [cols="1,4"] |=== | Name| Description | xref:BloombergLP/bdlc/IndexClerk/maxSupportedBdexVersion-09.adoc[`maxSupportedBdexVersion`] | `maxSupportedBdexVersion` overloads |=== == Friends [cols="1,4"] |=== | Name| Description | `xref:BloombergLP/bdlc/operator_not_eq-014.adoc[BloombergLP::bdlc::operator!=]` | Return `true` if the specified `lhs` and `rhs` index clerks do not have the same value, and `false` otherwise. Two `IndexClerk` objects do not have the same value if they do not have the same `nextNewIndex()`, or might generate different sequences of integer indices. | `xref:BloombergLP/bdlc/operator_eq-0e2.adoc[BloombergLP::bdlc::operator==]` | Return `true` if the specified `lhs` and `rhs` index clerks have the same value, and `false` otherwise. Two `IndexClerk` objects have the same value if they have the same `nextNewIndex()` and would always generate the same sequence of integer indices. |=== [.small]#Created with https://www.mrdocs.com[MrDocs]#