diff --git a/uppsrc/Core/src.tpp/AIndex$en-us.tpp b/uppsrc/Core/src.tpp/AIndex$en-us.tpp index 34a163690..6771d2e30 100644 --- a/uppsrc/Core/src.tpp/AIndex$en-us.tpp +++ b/uppsrc/Core/src.tpp/AIndex$en-us.tpp @@ -10,8 +10,8 @@ topic "AIndex"; [i448;b42;O9;2 $$8,8#61672508125594000341940100500538:tparam] [b42;2 $$9,9#13035079074754324216151401829390:normal] [{_}%EN-US -[s1;:noref:%- [@(0.0.255) template]_<[@(0.0.255) class]_[*@4 T], [@(0.0.255) class]_[*@4 V], -[@(0.0.255) class]_[*@4 HashFn]>&] +[s0;i448;a25;kKO9;:noref:%- [@(0.0.255) template]_<[@(0.0.255) class]_[*@4 T], +[@(0.0.255) class]_[*@4 V], [@(0.0.255) class]_[*@4 HashFn]>&] [s1;:`:`:AIndex`:`:class:%- [@(0.0.255) class]_[* AIndex]&] [s8; [*C@4 T]-|Type of elements to store. T must satisfy requirements for container flavor identified by parameter V and must have @@ -57,9 +57,11 @@ and optional deep copy] transfer semantics, although these features are more important in derived concrete index flavors.&] [s0; &] [ {{10000F(128)G(128)@1 [s0; [* Public Method List]]}}&] -[s4;H0;%- &] -[s5;:`:`:AIndex`:`:Add`(const T`&`,unsigned`):%- [@(0.0.255) void]_[* Add]([@(0.0.255) cons -t]_[*@4 T][@(0.0.255) `&]_[*@3 x], [@(0.0.255) unsigned]_[*@3 `_hash])&] +[s4;%- &] +[s3;%- &] +[s4;%- &] +[s5;:AIndex`:`:Add`(const T`&`,unsigned`):%- [@(0.0.255) void]_[* Add]([@(0.0.255) const]_[*@4 T +][@(0.0.255) `&]_[*@3 x], [@(0.0.255) unsigned]_[*@3 `_hash])&] [s2; Adds a new element [%-*@3 x] with a precomputed hash value [%-*@3 `_hash]. The performance benefit of this variant is that sometimes you can compute hash`-value as the part of an other process, like @@ -71,7 +73,7 @@ fetching strings from an input stream.&] by HashFn.&] [s3;%- &] [s4;%- &] -[s5;:`:`:AIndex`:`:Add`(const T`&`):%- [@(0.0.255) void]_[* Add]([@(0.0.255) const]_[*@4 T][@(0.0.255) `& +[s5;:AIndex`:`:Add`(const T`&`):%- [@(0.0.255) void]_[* Add]([@(0.0.255) const]_[*@4 T][@(0.0.255) `& ]_[*@3 x])&] [s2; Adds a new element [%-*@3 x ]to AIndex.&] [s6; Requires T to have deep copy constructor.&] @@ -79,8 +81,8 @@ by HashFn.&] [s6; Invalidates references to Index.&] [s3;%- &] [s4;%- &] -[s5;:`:`:AIndex`:`:Find`(const T`&`,unsigned`)const:%- [@(0.0.255) int]_[* Find]([@(0.0.255) c -onst]_[*@4 T][@(0.0.255) `&]_[*@3 x], [@(0.0.255) unsigned]_[*@3 `_hash])_[@(0.0.255) const]&] +[s5;:AIndex`:`:Find`(const T`&`,unsigned`)const:%- [@(0.0.255) int]_[* Find]([@(0.0.255) co +nst]_[*@4 T][@(0.0.255) `&]_[*@3 x], [@(0.0.255) unsigned]_[*@3 `_hash])_[@(0.0.255) const]&] [s2; Returns the position of the first element with value [%-*@3 x] in AIndex, using a precomputed [%-*@3 `_hash]. If multi`-key ordering is not broken and more than one element with the same value exists @@ -91,8 +93,8 @@ Unlinked elements are ignored.&] by HashFn.&] [s3;%- &] [s4;%- &] -[s5;:`:`:AIndex`:`:Find`(const T`&`)const:%- [@(0.0.255) int]_[* Find]([@(0.0.255) const]_[*@4 T -][@(0.0.255) `&]_[*@3 x])_[@(0.0.255) const]&] +[s5;:AIndex`:`:Find`(const T`&`)const:%- [@(0.0.255) int]_[* Find]([@(0.0.255) const]_[*@4 T][@(0.0.255) `& +]_[*@3 x])_[@(0.0.255) const]&] [s2; Returns the position of the first element with value [%-*@3 x] in AIndex. If multi`-key ordering is not broken and more than one element with the same value exists in AIndex, lowest position @@ -100,8 +102,8 @@ is retrieved. If the specified value does not exist in AIndex, a negative number is returned. Unlinked elements are ignored.&] [s3;%- &] [s4;%- &] -[s5;:`:`:AIndex`:`:FindNext`(int`)const:%- [@(0.0.255) int]_[* FindNext]([@(0.0.255) int]_[*@3 i -])_[@(0.0.255) const]&] +[s5;:AIndex`:`:FindNext`(int`)const:%- [@(0.0.255) int]_[* FindNext]([@(0.0.255) int]_[*@3 i]) +_[@(0.0.255) const]&] [s2; Returns the position of the next element with the same value as the element at [%-*@3 i]. If multi`-key ordering is not broken and more than one element with that value exists in AIndex, the @@ -111,9 +113,8 @@ When there are no more elements with the required value, a negative number is returned. Unlinked elements are ignored.&] [s3;%- &] [s4;%- &] -[s5;:`:`:AIndex`:`:FindLast`(const T`&`,unsigned`)const:%- [@(0.0.255) int]_[* FindLast]( -[@(0.0.255) const]_[*@4 T][@(0.0.255) `&]_[*@3 x], [@(0.0.255) unsigned]_[*@3 `_hash])_[@(0.0.255) c -onst]&] +[s5;:AIndex`:`:FindLast`(const T`&`,unsigned`)const:%- [@(0.0.255) int]_[* FindLast]([@(0.0.255) c +onst]_[*@4 T][@(0.0.255) `&]_[*@3 x], [@(0.0.255) unsigned]_[*@3 `_hash])_[@(0.0.255) const]&] [s2; Returns the position of the last element with value [%-*@3 x] in AIndex, using a precomputed [%-*@3 `_hash]. If multi`-key ordering is not broken and more than one element with the same value exists @@ -124,8 +125,8 @@ Unlinked elements are ignored.&] by HashFn.&] [s3;%- &] [s4;%- &] -[s5;:`:`:AIndex`:`:FindLast`(const T`&`)const:%- [@(0.0.255) int]_[* FindLast]([@(0.0.255) c -onst]_[*@4 T][@(0.0.255) `&]_[*@3 x])_[@(0.0.255) const]&] +[s5;:AIndex`:`:FindLast`(const T`&`)const:%- [@(0.0.255) int]_[* FindLast]([@(0.0.255) cons +t]_[*@4 T][@(0.0.255) `&]_[*@3 x])_[@(0.0.255) const]&] [s2; Returns the position of the last element with value [%-*@3 x] in AIndex. If multi`-key ordering is not broken and more than one element with the same value exists in AIndex, the greatest @@ -133,8 +134,8 @@ position is retrieved. If element does not exist in AIndex, a negative number is returned. Unlinked elements are ignored.&] [s3;%- &] [s4;%- &] -[s5;:`:`:AIndex`:`:FindPrev`(int`)const:%- [@(0.0.255) int]_[* FindPrev]([@(0.0.255) int]_[*@3 i -])_[@(0.0.255) const]&] +[s5;:AIndex`:`:FindPrev`(int`)const:%- [@(0.0.255) int]_[* FindPrev]([@(0.0.255) int]_[*@3 i]) +_[@(0.0.255) const]&] [s2; Returns the position of the previous element with the same value as the element at [%- _][%-*@3 i]. If multi`-key ordering is not broken and more than one element with that value exists in AIndex, @@ -144,7 +145,7 @@ order). When there are no more elements with required value, negative number is returned. Unlinked elements are ignored.&] [s3;%- &] [s4;%- &] -[s5;:`:`:AIndex`:`:FindAdd`(const T`&`,unsigned`):%- [@(0.0.255) int]_[* FindAdd]([@(0.0.255) c +[s5;:AIndex`:`:FindAdd`(const T`&`,unsigned`):%- [@(0.0.255) int]_[* FindAdd]([@(0.0.255) c onst]_[*@4 T][@(0.0.255) `&]_[*@3 key], [@(0.0.255) unsigned]_[*@3 `_hash])&] [s2; Retrieves position of first element with value [%-*@3 key] in AIndex, using a precomputed [%-*@3 `_hash]. If multi`-key ordering @@ -157,10 +158,10 @@ newly added element is returned. Unlinked elements are ignored.&] [s6;%- Invalidates references to Index.&] [s6; The precomputed [%-@3 `_hash] must be the same as the hash specified by HashFn.&] -[s3;@5 &] +[s3;%- &] [s4;%- &] -[s5;:`:`:AIndex`:`:FindAdd`(const T`&`):%- [@(0.0.255) int]_[* FindAdd]([@(0.0.255) const]_ -[*@4 T][@(0.0.255) `&]_[*@3 key])&] +[s5;:AIndex`:`:FindAdd`(const T`&`):%- [@(0.0.255) int]_[* FindAdd]([@(0.0.255) const]_[*@4 T +][@(0.0.255) `&]_[*@3 key])&] [s2; Retrieves position of first element with value [%-*@3 key] in AIndex. If multi`-key ordering is not broken and more than one element with the same value exists in AIndex, lowest position @@ -172,8 +173,8 @@ Unlinked elements are ignored.&] [s2;%- [*@5;1 Invalidates references to Index.]&] [s3;%- &] [s4;%- &] -[s5;:`:`:AIndex`:`:operator`<`<`(const T`&`):%- [_^`:`:AIndex^ AIndex][@(0.0.255) `&]_[* op -erator<<]([@(0.0.255) const]_[*@4 T][@(0.0.255) `&]_[*@3 x])&] +[s5;:AIndex`:`:operator`<`<`(const T`&`):%- AIndex[@(0.0.255) `&]_[* operator<<]([@(0.0.255) c +onst]_[*@4 T][@(0.0.255) `&]_[*@3 x])&] [s2; Operator alternative of [* void Add(const T`& x)]. By returning reference to AIndex it allows adding multiple elements in a single expression, thus e.g. allowing to construct a temporary Index @@ -183,13 +184,13 @@ as part of an expression like Foo((Index() << 1 << 2)).&] [s6; Invalidates references to Index.&] [s3;%- &] [s4;%- &] -[s5;:`:`:AIndex`:`:Unlink`(int`):%- [@(0.0.255) void]_[* Unlink]([@(0.0.255) int]_[*@3 i])&] +[s5;:AIndex`:`:Unlink`(int`):%- [@(0.0.255) void]_[* Unlink]([@(0.0.255) int]_[*@3 i])&] [s2; Unlinks the element at [%-*@3 i]. The unlinked item stays in AIndex but is ignored by any Find operation.&] [s3;%- &] [s4;%- &] -[s5;:`:`:AIndex`:`:Put`(const T`&`,unsigned`):%- [@(0.0.255) int]_[* Put]([@(0.0.255) const -]_[*@4 T][@(0.0.255) `&]_[*@3 x], [@(0.0.255) unsigned]_[*@3 `_hash])&] +[s5;:AIndex`:`:Put`(const T`&`,unsigned`):%- [@(0.0.255) int]_[* Put]([@(0.0.255) const]_[*@4 T +][@(0.0.255) `&]_[*@3 x], [@(0.0.255) unsigned]_[*@3 `_hash])&] [s2; If there are any unlinked elements in AIndex, one of them is replaced by [%-*@3 x]. If there are no unlinked elements, the element with the specified value is appended to the end of AIndex using @@ -202,7 +203,7 @@ with the specified value is appended to the end of AIndex using by HashFn.&] [s3;%- &] [s4;%- &] -[s5;:`:`:AIndex`:`:Put`(const T`&`):%- [@(0.0.255) int]_[* Put]([@(0.0.255) const]_[*@4 T][@(0.0.255) `& +[s5;:AIndex`:`:Put`(const T`&`):%- [@(0.0.255) int]_[* Put]([@(0.0.255) const]_[*@4 T][@(0.0.255) `& ]_[*@3 x])&] [s2; If there are any unlinked elements in AIndex, one of them is replaced by [%-*@3 x]. If there are no unlinked elements, the element @@ -212,9 +213,9 @@ with the specified value is appended to the end of AIndex using [s6; Requires T to have deep copy constructor.&] [s6; Invalidates iterators to AIndex.&] [s6; Invalidates references to Index.&] -[s3; &] +[s3;%- &] [s4;%- &] -[s5;:`:`:AIndex`:`:FindPut`(const T`&`,unsigned`):%- [@(0.0.255) int]_[* FindPut]([@(0.0.255) c +[s5;:AIndex`:`:FindPut`(const T`&`,unsigned`):%- [@(0.0.255) int]_[* FindPut]([@(0.0.255) c onst]_[*@4 T][@(0.0.255) `&]_[*@3 key], [@(0.0.255) unsigned]_[*@3 `_hash])&] [s2; Retrieves the position of the first element with the value [%-*@3 key] in AIndex, using a precomputed [%-*@3 `_hash]. The precomputed @@ -230,8 +231,8 @@ The position of the found or placed element is returned.&] by HashFn.&] [s3;%- &] [s4;%- &] -[s5;:`:`:AIndex`:`:FindPut`(const T`&`):%- [@(0.0.255) int]_[* FindPut]([@(0.0.255) const]_ -[*@4 T][@(0.0.255) `&]_[*@3 key])&] +[s5;:AIndex`:`:FindPut`(const T`&`):%- [@(0.0.255) int]_[* FindPut]([@(0.0.255) const]_[*@4 T +][@(0.0.255) `&]_[*@3 key])&] [s2; Retrieves the position of the first element with value [%-*@3 key] in AIndex. If the element does not exist in the AIndex, it is placed to it using [* Put(const T`& x).] The position of the found @@ -242,9 +243,9 @@ or placed element is returned.&] [s6; Invalidates references to Index.&] [s3;%- &] [s4;%- &] -[s5;:`:`:AIndex`:`:Set`(int`,const T`&`,unsigned`):%- [@(0.0.255) void]_[* Set]([@(0.0.255) i -nt]_[*@3 i], [@(0.0.255) const]_[*@4 T][@(0.0.255) `&]_[*@3 x], [@(0.0.255) unsigned]_[*@3 `_ha -sh])&] +[s5;:AIndex`:`:Set`(int`,const T`&`,unsigned`):%- [@(0.0.255) void]_[* Set]([@(0.0.255) int +]_[*@3 i], [@(0.0.255) const]_[*@4 T][@(0.0.255) `&]_[*@3 x], [@(0.0.255) unsigned]_[*@3 `_hash +])&] [s2; Replaces the element at the specified position with a new element with value [%-*@3 x], using a precomputed [%-*@3 `_hash]. Speed of this operation depends on the total number of elements with the @@ -256,8 +257,8 @@ same value as the specified one.&] by HashFn.&] [s3;%- &] [s4;%- &] -[s5;:`:`:AIndex`:`:Set`(int`,const T`&`):%- [@(0.0.255) void]_[* Set]([@(0.0.255) int]_[*@3 i -], [@(0.0.255) const]_[*@4 T][@(0.0.255) `&]_[*@3 x])&] +[s5;:AIndex`:`:Set`(int`,const T`&`):%- [@(0.0.255) void]_[* Set]([@(0.0.255) int]_[*@3 i], +[@(0.0.255) const]_[*@4 T][@(0.0.255) `&]_[*@3 x])&] [s2; Replaces the element at the specified position with a new element with value [%-*@3 x]. Speed of this operation depends on the total number of elements with the same value as the specified one.&] @@ -266,27 +267,25 @@ number of elements with the same value as the specified one.&] [s6; Invalidates references to Index.&] [s3;%- &] [s4;%- &] -[s5;:`:`:AIndex`:`:operator`[`]`(int`)const:%- [@(0.0.255) const]_[*@4 T][@(0.0.255) `&]_[* o -perator`[`]]([@(0.0.255) int]_[*@3 i])_[@(0.0.255) const]&] +[s5;:AIndex`:`:operator`[`]`(int`)const:%- [@(0.0.255) const]_[*@4 T][@(0.0.255) `&]_[* opera +tor`[`]]([@(0.0.255) int]_[*@3 i])_[@(0.0.255) const]&] [s2; Returns the element at the specified position.&] [s3;%- &] [s4;%- &] -[s5;:`:`:AIndex`:`:GetCount`(`)const:%- [@(0.0.255) int]_[* GetCount]()_[@(0.0.255) const]&] +[s5;:AIndex`:`:GetCount`(`)const:%- [@(0.0.255) int]_[* GetCount]()_[@(0.0.255) const]&] [s2; Returns number of elements in AIndex.&] [s3;%- &] [s4;%- &] -[s5;:`:`:AIndex`:`:IsEmpty`(`)const:%- [@(0.0.255) bool]_[* IsEmpty]()_[@(0.0.255) const]&] +[s5;:AIndex`:`:IsEmpty`(`)const:%- [@(0.0.255) bool]_[* IsEmpty]()_[@(0.0.255) const]&] [s2; Tests whether AIndex is empty. Same as GetCount() `=`= 0.&] [s3;%- &] [s4;%- &] -[s5;:`:`:AIndex`:`:Clear`(`):%- [@(0.0.255) void]_[* Clear]()&] +[s5;:AIndex`:`:Clear`(`):%- [@(0.0.255) void]_[* Clear]()&] [s2; Removes all elements from AIndex.&] [s3;%- &] [s4;%- &] -[s5;:`:`:AIndex`:`:ClearIndex`(`):%- [@(0.0.255) void]_[* ClearIndex]()&] +[s5;:AIndex`:`:ClearIndex`(`):%- [@(0.0.255) void]_[* ClearIndex]()&] [s2; Restores multi`-key ordering.&] -[s3;%- &] -[s4;%- &] [s5;:`:`:AIndex`:`:UnlinkKey`(const T`&`,unsigned`):%- [@(0.0.255) int]_[* UnlinkKey]([@(0.0.255) c onst]_[*@4 T][@(0.0.255) `&]_[*@3 k], [@(0.0.255) unsigned]_[*@3 `_hash])&] [s2; Unlinks all elements with value [%-*@3 k] using precomputed [%-*@3 `_hash]. @@ -297,24 +296,24 @@ that would be result of HashFn. &] by HashFn.&] [s3;%- &] [s4;%- &] -[s5;:`:`:AIndex`:`:UnlinkKey`(const T`&`):%- [@(0.0.255) int]_[* UnlinkKey]([@(0.0.255) con -st]_[*@4 T][@(0.0.255) `&]_[*@3 k])&] +[s5;:AIndex`:`:UnlinkKey`(const T`&`):%- [@(0.0.255) int]_[* UnlinkKey]([@(0.0.255) const]_ +[*@4 T][@(0.0.255) `&]_[*@3 k])&] [s2; Unlinks all elements with value [%-*@3 k]. Unlinked elements remain in the AIndex but are ignored by any Find operations.&] [s3;%- &] [s4;%- &] -[s5;:`:`:AIndex`:`:IsUnlinked`(int`)const:%- [@(0.0.255) bool]_[* IsUnlinked]([@(0.0.255) i -nt]_[*@3 i])_[@(0.0.255) const]&] +[s5;:AIndex`:`:IsUnlinked`(int`)const:%- [@(0.0.255) bool]_[* IsUnlinked]([@(0.0.255) int]_ +[*@3 i])_[@(0.0.255) const]&] [s2; Tests whether the element at [%-*@3 i] is unlinked.&] [s3;%- &] [s4;%- &] -[s5;:`:`:AIndex`:`:Sweep`(`):%- [@(0.0.255) void]_[* Sweep]()&] +[s5;:AIndex`:`:Sweep`(`):%- [@(0.0.255) void]_[* Sweep]()&] [s2; Removes all unlinked elements from AIndex. Complexity of the operation depends on the number of elements in AIndex, not on the number of unlinked elements. Also restores multi`-key ordering.&] [s3;%- &] [s4;%- &] -[s5;:`:`:AIndex`:`:Insert`(int`,const T`&`,unsigned`):%- [@(0.0.255) void]_[* Insert]([@(0.0.255) i +[s5;:AIndex`:`:Insert`(int`,const T`&`,unsigned`):%- [@(0.0.255) void]_[* Insert]([@(0.0.255) i nt]_[*@3 i], [@(0.0.255) const]_[*@4 T][@(0.0.255) `&]_[*@3 k], [@(0.0.255) unsigned]_[*@3 h])&] [s2; Inserts an element with value [%-*@3 k] at the specified position [%-*@3 i], using a precomputed hash [%-*@3 h]. This is a slow operation.&] @@ -325,8 +324,8 @@ nt]_[*@3 i], [@(0.0.255) const]_[*@4 T][@(0.0.255) `&]_[*@3 k], [@(0.0.255) unsi by HashFn.&] [s3;%- &] [s4;%- &] -[s5;:`:`:AIndex`:`:Insert`(int`,const T`&`):%- [@(0.0.255) void]_[* Insert]([@(0.0.255) int -]_[*@3 i], [@(0.0.255) const]_[*@4 T][@(0.0.255) `&]_[*@3 k])&] +[s5;:AIndex`:`:Insert`(int`,const T`&`):%- [@(0.0.255) void]_[* Insert]([@(0.0.255) int]_[*@3 i +], [@(0.0.255) const]_[*@4 T][@(0.0.255) `&]_[*@3 k])&] [s2; Inserts an element with value [%-*@3 k] at the specified position [%-*@3 i]. This is a slow operation.&] [s6; Requires T to have deep copy constructor.&] @@ -334,15 +333,15 @@ by HashFn.&] [s6; Invalidates references to Index.&] [s3;%- &] [s4;%- &] -[s5;:`:`:AIndex`:`:Remove`(int`):%- [@(0.0.255) void]_[* Remove]([@(0.0.255) int]_[*@3 i])&] +[s5;:AIndex`:`:Remove`(int`):%- [@(0.0.255) void]_[* Remove]([@(0.0.255) int]_[*@3 i])&] [s2; Removes an element with value [%-*@3 k] at the specified position [%-*@3 i]. This is a slow operation.&] [s6; Invalidates iterators to AIndex.&] [s6; Invalidates references to Index.&] [s3;%- &] [s4;%- &] -[s5;:`:`:AIndex`:`:Remove`(const int`*`,int`):%- [@(0.0.255) void]_[* Remove]([@(0.0.255) c -onst]_[@(0.0.255) int]_`*[*@3 sorted`_list], [@(0.0.255) int]_[*@3 count])&] +[s5;:AIndex`:`:Remove`(const int`*`,int`):%- [@(0.0.255) void]_[* Remove]([@(0.0.255) const +]_[@(0.0.255) int]_`*[*@3 sorted`_list], [@(0.0.255) int]_[*@3 count])&] [s2; Removes multiple elements from AIndex. Time of operation only slightly depends on the number of removed elements. This is a slow operation. [%-*@3 sorted`_list] must point to [%-*@3 count] @@ -351,15 +350,15 @@ positions, sorted in ascending order.&] [s6; Invalidates references to Index.&] [s3;%- &] [s4;%- &] -[s5;:`:`:AIndex`:`:Remove`(const`:`:Vector``&`):%- [@(0.0.255) void]_[* Remove]([@(0.0.255) c -onst]_[_^`:`:Vector^ Vector][@(0.0.255) `&]_[*@3 sorted`_list])&] +[s5;:AIndex`:`:Remove`(const Vector``&`):%- [@(0.0.255) void]_[* Remove]([@(0.0.255) c +onst]_Vector[@(0.0.255) `&]_[*@3 sorted`_list])&] [s2; Removes multiple elements from AIndex. Same as Remove(sorted`_list, sorted`_list.GetCount()).&] [s6; Invalidates iterators to AIndex.&] [s6; Invalidates references to Index.&] [s3;%- &] [s4;%- &] -[s5;:`:`:AIndex`:`:RemoveKey`(const T`&`,unsigned`):%- [@(0.0.255) int]_[* RemoveKey]([@(0.0.255) c +[s5;:AIndex`:`:RemoveKey`(const T`&`,unsigned`):%- [@(0.0.255) int]_[* RemoveKey]([@(0.0.255) c onst]_[*@4 T][@(0.0.255) `&]_[*@3 k], [@(0.0.255) unsigned]_[*@3 h])&] [s2; Removes all elements with value [%-*@3 k] using a precomputed hash [%-*@3 h]. Slow.&] @@ -369,112 +368,109 @@ hash [%-*@3 h]. Slow.&] by HashFn.&] [s3;%- &] [s4;%- &] -[s5;:`:`:AIndex`:`:RemoveKey`(const T`&`):%- [@(0.0.255) int]_[* RemoveKey]([@(0.0.255) con -st]_[*@4 T][@(0.0.255) `&]_[*@3 k])&] +[s5;:AIndex`:`:RemoveKey`(const T`&`):%- [@(0.0.255) int]_[* RemoveKey]([@(0.0.255) const]_ +[*@4 T][@(0.0.255) `&]_[*@3 k])&] [s2; Removes all elements with value [%-*@3 k]. Slow.&] [s6; Invalidates iterators to AIndex.&] [s6; Invalidates references to Index.&] [s3;%- &] [s4;%- &] -[s5;:`:`:AIndex`:`:Trim`(int`):%- [@(0.0.255) void]_[* Trim]([@(0.0.255) int]_[*@3 n])&] +[s5;:AIndex`:`:Trim`(int`):%- [@(0.0.255) void]_[* Trim]([@(0.0.255) int]_[*@3 n])&] [s2; Reduces the number of elements in AIndex to [%-*@3 n]. Requested number must be less than or equal to actual number of elements in AIndex.&] [s3;%- &] [s4;%- &] -[s5;:`:`:AIndex`:`:Drop`(int`):%- [@(0.0.255) void]_[* Drop]([@(0.0.255) int]_[*@3 n]_`=_[@3 1]) -&] +[s5;:AIndex`:`:Drop`(int`):%- [@(0.0.255) void]_[* Drop]([@(0.0.255) int]_[*@3 n]_`=_[@3 1])&] [s2; Drops [%-*@3 n] elements from the end of the AIndex (same as Trim(GetCount() `- n)).&] [s3;%- &] [s4;%- &] -[s5;:`:`:AIndex`:`:Top`(`)const:%- [@(0.0.255) const]_[*@4 T][@(0.0.255) `&]_[* Top]()_[@(0.0.255) c +[s5;:AIndex`:`:Top`(`)const:%- [@(0.0.255) const]_[*@4 T][@(0.0.255) `&]_[* Top]()_[@(0.0.255) c onst]&] [s2; Returns a reference to the last element in the AIndex.&] [s3;%- &] [s4;%- &] -[s5;:`:`:AIndex`:`:Reserve`(int`):%- [@(0.0.255) void]_[* Reserve]([@(0.0.255) int]_[*@3 n])&] +[s5;:AIndex`:`:Reserve`(int`):%- [@(0.0.255) void]_[* Reserve]([@(0.0.255) int]_[*@3 n])&] [s2; Reserves capacity. If [%-*@3 n] is greater than current capacity, capacity is increased to the requested value.&] [s3;%- &] [s4;%- &] -[s5;:`:`:AIndex`:`:Shrink`(`):%- [@(0.0.255) void]_[* Shrink]()&] +[s5;:AIndex`:`:Shrink`(`):%- [@(0.0.255) void]_[* Shrink]()&] [s2; Minimizes the memory consumption of AIndex by decreasing the capacity to the number of elements.&] [s3;%- &] [s4;%- &] -[s5;:`:`:AIndex`:`:GetAlloc`(`)const:%- [@(0.0.255) int]_[* GetAlloc]()_[@(0.0.255) const]&] +[s5;:AIndex`:`:GetAlloc`(`)const:%- [@(0.0.255) int]_[* GetAlloc]()_[@(0.0.255) const]&] [s2; Returns the current capacity of AIndex.&] [s3;%- &] [s4;%- &] -[s5;:`:`:AIndex`:`:Serialize`(`:`:Stream`&`):%- [@(0.0.255) void]_[* Serialize]([_^`:`:Stream^ S -tream][@(0.0.255) `&]_[*@3 s])&] +[s5;:AIndex`:`:Serialize`(Stream`&`):%- [@(0.0.255) void]_[* Serialize](Stream[@(0.0.255) `& +]_[*@3 s])&] [s2; Serializes content of AIndex to/from Stream.&] [s6; Requires T to have serialization operator defined.&] [s3;%- &] [s4;%- &] -[s5;:`:`:AIndex`:`:PickKeys`(`)pick`_:%- [*@4 V]_[* PickKeys]()_[@(0.128.128) pick`_]&] +[s5;:AIndex`:`:PickKeys`(`)pick`_:%- [*@4 V]_[* PickKeys]()_[@(0.128.128) pick`_]&] [s2; Returns a basic random access container of elements. Destroys AIndex by picking.&] [s3;%- &] [s4;%- &] -[s5;:`:`:AIndex`:`:GetKeys`(`)const:%- [@(0.0.255) const]_[*@4 V][@(0.0.255) `&]_[* GetKeys]( -)_[@(0.0.255) const]&] +[s5;:AIndex`:`:GetKeys`(`)const:%- [@(0.0.255) const]_[*@4 V][@(0.0.255) `&]_[* GetKeys]()_[@(0.0.255) c +onst]&] [s2; Returns a constant reference to basic random access container of elements.&] [s3;%- &] [s4;%- &] -[s5;:`:`:AIndex`:`:operator`=`(pick`_ V`&`):%- [_^`:`:AIndex^ AIndex][@(0.0.255) `&]_[* ope -rator`=]([@(0.128.128) pick`_]_[*@4 V][@(0.0.255) `&]_[*@3 s])&] +[s5;:AIndex`:`:operator`=`(pick`_ V`&`):%- AIndex[@(0.0.255) `&]_[* operator`=]([@(0.128.128) p +ick`_]_[*@4 V][@(0.0.255) `&]_[*@3 s])&] [s2; Assigns basic random access container to AIndex. Transfers the source container in short constant time, but destroys it by picking.&] [s3;%- &] [s4;%- &] -[s5;:`:`:AIndex`:`:operator`<`<`=`(const V`&`):%- [_^`:`:AIndex^ AIndex][@(0.0.255) `&]_[* o -perator<<`=]([@(0.0.255) const]_[*@4 V][@(0.0.255) `&]_[*@3 s])&] +[s5;:AIndex`:`:operator`<`<`=`(const V`&`):%- AIndex[@(0.0.255) `&]_[* operator<<`=]([@(0.0.255) c +onst]_[*@4 V][@(0.0.255) `&]_[*@3 s])&] [s2; Assigns the basic random access container to AIndex, while preserving the value of the source container.&] [s6; Requires T to have deep copy constructor or optional deep copy.&] [s3;%- &] [s4;%- &] -[s5;:`:`:AIndex`:`:AIndex`(pick`_ V`&`):%- [* AIndex]([@(0.128.128) pick`_]_[*@4 V][@(0.0.255) `& +[s5;:AIndex`:`:AIndex`(pick`_ V`&`):%- [* AIndex]([@(0.128.128) pick`_]_[*@4 V][@(0.0.255) `& ]_[*@3 s])&] [s2; Pick`-constructs AIndex from a basic random access container. Transfers the source container in short constant time, but destroys it by picking.&] [s3;%- &] [s4;%- &] -[s5;:`:`:AIndex`:`:AIndex`(const V`&`,int`):%- [* AIndex]([@(0.0.255) const]_[*@4 V][@(0.0.255) `& +[s5;:AIndex`:`:AIndex`(const V`&`,int`):%- [* AIndex]([@(0.0.255) const]_[*@4 V][@(0.0.255) `& ]_[*@3 s], [@(0.0.255) int])&] [s2; Deep`-copy constructs AIndex from basic random access container.&] [s6; Requires T to have deep copy constructor or optional deep copy constructor.&] [s3;%- &] [s4;%- &] -[s5;:`:`:AIndex`:`:Begin`(`)const:%- [_^`:`:AIndex`:`:ConstIterator^ ConstIterator]_[* Be -gin]()_[@(0.0.255) const]&] +[s5;:AIndex`:`:Begin`(`)const:%- ConstIterator_[* Begin]()_[@(0.0.255) const]&] [s2; Returns a constant iterator to the first element in AIndex.&] [s3;%- &] [s4;%- &] -[s5;:`:`:AIndex`:`:End`(`)const:%- [_^`:`:AIndex`:`:ConstIterator^ ConstIterator]_[* End]( -)_[@(0.0.255) const]&] +[s5;:AIndex`:`:End`(`)const:%- ConstIterator_[* End]()_[@(0.0.255) const]&] [s2; Returns a constant iterator to the position just beyond the last element in AIndex.&] [s3;%- &] [s4;%- &] -[s5;:`:`:AIndex`:`:GetIter`(int`)const:%- [_^`:`:AIndex`:`:ConstIterator^ ConstIterator -]_[* GetIter]([@(0.0.255) int]_[*@3 pos])_[@(0.0.255) const]&] +[s5;:AIndex`:`:GetIter`(int`)const:%- ConstIterator_[* GetIter]([@(0.0.255) int]_[*@3 pos]) +_[@(0.0.255) const]&] [s2; Returns a constant iterator to the element at specified position. Same as [* Begin() `+ i]. The benefit of this method is that [* pos] is range checked in debug mode.&] [s3;%- &] [s4;%- &] -[s5;:`:`:AIndex`:`:AIndex`(`):%- [* AIndex]()&] +[s5;:AIndex`:`:AIndex`(`):%- [* AIndex]()&] [s2; Default constructor.&] [s3;%- &] [s4;%- &] -[s5;:`:`:AIndex`:`:AIndex`(const`:`:AIndex`&`,int`):%- [* AIndex]([@(0.0.255) const]_[* AIn -dex][@(0.0.255) `&]_[*@3 s], [@(0.0.255) int])&] +[s5;:AIndex`:`:AIndex`(const AIndex`&`,int`):%- [* AIndex]([@(0.0.255) const]_[* AIndex][@(0.0.255) `& +]_[*@3 s], [@(0.0.255) int])&] [s2; Optional deep copy constructor.&] [s6; Requires T to have deep copy constructor or optional deep copy constructor.&] diff --git a/uppsrc/Core/src.tpp/Any$en-us.tpp b/uppsrc/Core/src.tpp/Any$en-us.tpp index 77516eba1..ab17ab812 100644 --- a/uppsrc/Core/src.tpp/Any$en-us.tpp +++ b/uppsrc/Core/src.tpp/Any$en-us.tpp @@ -10,76 +10,74 @@ topic "Any"; [i448;b42;O9;2 $$8,8#61672508125594000341940100500538:tparam] [b42;2 $$9,9#13035079074754324216151401829390:normal] [{_} -[s0; [@(0.0.255) class]_[* Any]_:_[@(0.0.255) private]_[*@3 Moveable][@(0.0.255) <][* Any][@(0.0.255) > -]_&] -[s0;%% &] +[s3; &] +[s1;:Any`:`:class: [@(0.0.255) class]_[* Any]_:_[@(0.0.255) private]_[*@3 Moveable][@(0.0.255) < +][* Any][@(0.0.255) >]_&] [s0;%% Any is a special type of container capable of containing none or single element of [/ any] type. It also provides methods for querying the type stored and retrieving the content of specific type.&] [s0;%% Any has pick semantics.&] -[s0;%% &] [ {{10000F(128)G(128)@1 [s0;%% [* Public Method List]]}}&] -[s4; &] -[s5;:`:`:Any`:`:Any`(pick`_`:`:Any`&`): [* Any]([@(0.128.128) pick`_]_[* Any][@(0.0.255) `&]_ -[*@3 s])&] +[s3; &] +[s5;:Any`:`:Any`(pick`_ Any`&`): [* Any]([@(0.128.128) pick`_]_[* Any][@(0.0.255) `&]_[*@3 s])&] [s2;%% Pick constructor. Transfers content of source Any while destroying its content by picking.&] [s7;%% [%-*C@3 s]-|Source Any.&] [s3; &] [s4; &] -[s5;:`:`:Any`:`:Any`(`): [* Any]()&] +[s5;:Any`:`:Any`(`): [* Any]()&] [s2;%% Constructs an empty Any.&] [s3; &] [s4; &] -[s5;:`:`:Any`:`:`~Any`(`): [@(0.0.255) `~][* Any]()&] +[s5;:Any`:`:`~Any`(`): [@(0.0.255) `~][* Any]()&] [s2;%% Destructor.&] [s3; &] [s4; &] -[s5;:`:`:Any`:`:Create`(`): [@(0.0.255) template]_<[@(0.0.255) class]_[*@4 T][@(0.0.255) >]_[*@4 T -][@(0.0.255) `&]_[* Create]()&] +[s5;:Any`:`:Create`(`): [@(0.0.255) template]_<[@(0.0.255) class]_[*@4 T][@(0.0.255) >]_[*@4 T][@(0.0.255) `& +]_[* Create]()&] [s2;%% Creates content of type T inside Any.&] [s7;%% [*C@4 T]-|Type of content.&] [s7;%% [*/ Return value]-|Reference to the newly created content.&] [s3; &] [s4; &] -[s5;:`:`:Any`:`:Is`(`)const: [@(0.0.255) template]_<[@(0.0.255) class]_[*@4 T][@(0.0.255) >]_ -[@(0.0.255) bool]_[* Is]()_[@(0.0.255) const]&] +[s5;:Any`:`:Is`(`)const: [@(0.0.255) template]_<[@(0.0.255) class]_[*@4 T][@(0.0.255) >]_[@(0.0.255) b +ool]_[* Is]()_[@(0.0.255) const]&] [s2;%% Tests whether Any contains content of type T.&] [s7;%% [*C@4 T]-|Required type.&] [s7;%% [*/ Return value]-|true if there is content with type T in Any.&] [s3; &] [s4; &] -[s5;:`:`:Any`:`:Get`(`): [@(0.0.255) template]_<[@(0.0.255) class]_[*@4 T][@(0.0.255) >]_[*@4 T -][@(0.0.255) `&]_[* Get]()&] +[s5;:Any`:`:Get`(`): [@(0.0.255) template]_<[@(0.0.255) class]_[*@4 T][@(0.0.255) >]_[*@4 T][@(0.0.255) `& +]_[* Get]()&] [s2;%% Returns reference to content. Is must be true, otherwise this operation is illegal.&] [s7;%% [*C@4 T]-|Required type.&] [s7;%% [*/ Return value]-|Reference to content.&] [s3; &] [s4; &] -[s5;:`:`:Any`:`:Get`(`)const: [@(0.0.255) template]_<[@(0.0.255) class]_[*@4 T][@(0.0.255) >]_ -[@(0.0.255) const]_[*@4 T][@(0.0.255) `&]_[* Get]()_[@(0.0.255) const]&] +[s5;:Any`:`:Get`(`)const: [@(0.0.255) template]_<[@(0.0.255) class]_[*@4 T][@(0.0.255) >]_[@(0.0.255) c +onst]_[*@4 T][@(0.0.255) `&]_[* Get]()_[@(0.0.255) const]&] [s2;%% Returns constant reference to content. Is must be true, otherwise this operation is illegal.&] [s7;%% [*C@4 T]-|Required type.&] [s7;%% [*/ Return value]-|Reference to content.&] [s3; &] [s4; &] -[s5;:`:`:Any`:`:Clear`(`): [@(0.0.255) void]_[* Clear]()&] +[s5;:Any`:`:Clear`(`): [@(0.0.255) void]_[* Clear]()&] [s2;%% Removes (and destroys) content.&] [s3; &] [s4; &] -[s5;:`:`:Any`:`:IsEmpty`(`)const: [@(0.0.255) bool]_[* IsEmpty]()_[@(0.0.255) const]&] +[s5;:Any`:`:IsEmpty`(`)const: [@(0.0.255) bool]_[* IsEmpty]()_[@(0.0.255) const]&] [s7;%% [*/ Return value]-|true if there is no content.&] [s3; &] [s4; &] -[s5;:`:`:Any`:`:IsPicked`(`)const: [@(0.0.255) bool]_[* IsPicked]()_[@(0.0.255) const]&] +[s5;:Any`:`:IsPicked`(`)const: [@(0.0.255) bool]_[* IsPicked]()_[@(0.0.255) const]&] [s7;%% [*/ Return value]-|true if Any is picked.&] [s3; &] [s4; &] -[s5;:`:`:Any`:`:operator`=`(pick`_`:`:Any`&`): [@(0.0.255) void]_[* operator`=]([@(0.128.128) p -ick`_]_[_^`:`:Any^ Any][@(0.0.255) `&]_[*@3 s])&] +[s5;:Any`:`:operator`=`(pick`_ Any`&`): [@(0.0.255) void]_[* operator`=]([@(0.128.128) pick +`_]_Any[@(0.0.255) `&]_[*@3 s])&] [s2;%% Pick operator. Transfers content while destroying source.&] [s7;%% [%-*C@3 s]-|Source Any.&] [s0; ] \ No newline at end of file diff --git a/uppsrc/Core/src.tpp/algo$en-us.tpp b/uppsrc/Core/src.tpp/algo$en-us.tpp index e827dfcc0..a4aa06c89 100644 --- a/uppsrc/Core/src.tpp/algo$en-us.tpp +++ b/uppsrc/Core/src.tpp/algo$en-us.tpp @@ -14,8 +14,8 @@ topic "Algorithms"; [s0; &] [ {{10000F(128)G(128)@1 [s0; [* Global Functions]]}}&] [s4;H0;%- &] -[s5;:`:`:`:`:Swap`(T`&`,T`&`):%- [@(0.0.255) template]_<[@(0.0.255) class]_[*@4 T][@(0.0.255) > -]_[@(0.0.255) void]_[* Swap]([*@4 T][@(0.0.255) `&]_[*@3 a], [*@4 T][@(0.0.255) `&]_[*@3 b])&] +[s5;:Swap`(T`&`,T`&`):%- [@(0.0.255) template]_<[@(0.0.255) class]_[*@4 T][@(0.0.255) >]_[@(0.0.255) v +oid]_[* Swap]([*@4 T][@(0.0.255) `&]_[*@3 a], [*@4 T][@(0.0.255) `&]_[*@3 b])&] [s2; Swaps values. Specific types might specialize [* Swap] with more effective variants.&] [s6; T must have either deep copy operator or pick operator.&] @@ -24,8 +24,8 @@ effective variants.&] [s7; [*C@3 b]-|Second value to swap.&] [s3;%- &] [s4;%- &] -[s5;:`:`:`:`:IterSwap`(I`,I`):%- [@(0.0.255) template]_<[@(0.0.255) class]_[*@4 I][@(0.0.255) > -]_[@(0.0.255) void]_[* IterSwap]([*@4 I]_[*@3 a], [*@4 I]_[*@3 b])&] +[s5;:IterSwap`(I`,I`):%- [@(0.0.255) template]_<[@(0.0.255) class]_[*@4 I][@(0.0.255) >]_[@(0.0.255) v +oid]_[* IterSwap]([*@4 I]_[*@3 a], [*@4 I]_[*@3 b])&] [s2; Swaps values pointed to by iterators. Specific types might specialize [* IterSwap] with more effective variants.&] [s6; Swap must be defined for type pointed to by I.&] @@ -34,8 +34,8 @@ effective variants.&] [s7; [*C@3 b]-|Iterator pointing to second value.&] [s3;%- &] [s4;%- &] -[s5;:`:`:`:`:FindLowerBound`(const C`&`,int`,int`,const T`&`,const L`&`):%- [@(0.0.255) t -emplate]_<[@(0.0.255) class]_[*@4 C], [@(0.0.255) class]_[*@4 T], [@(0.0.255) class]_[*@4 L][@(0.0.255) > +[s5;:FindLowerBound`(const C`&`,int`,int`,const T`&`,const L`&`):%- [@(0.0.255) templat +e]_<[@(0.0.255) class]_[*@4 C], [@(0.0.255) class]_[*@4 T], [@(0.0.255) class]_[*@4 L][@(0.0.255) > ]_[@(0.0.255) int]_[* FindLowerBound]([@(0.0.255) const]_[*@4 C][@(0.0.255) `&]_[*@3 v], [@(0.0.255) int]_[*@3 pos], [@(0.0.255) int]_[*@3 count], [@(0.0.255) const]_[*@4 T][@(0.0.255) `& ]_[*@3 val], [@(0.0.255) const]_[*@4 L][@(0.0.255) `&]_[*@3 less])&] @@ -51,9 +51,9 @@ predicate where [* val] can be inserted without breaking the ordering.&] [s7; [*/ Return value]-|Position in container.&] [s3;%- &] [s4;%- &] -[s5;:`:`:`:`:FindLowerBound`(const C`&`,const T`&`,const L`&`):%- [@(0.0.255) template]_ -<[@(0.0.255) class]_[*@4 C], [@(0.0.255) class]_[*@4 T], [@(0.0.255) class]_[*@4 L][@(0.0.255) > -]_[@(0.0.255) int]_[* FindLowerBound]([@(0.0.255) const]_[*@4 C][@(0.0.255) `&]_[*@3 v], +[s5;:FindLowerBound`(const C`&`,const T`&`,const L`&`):%- [@(0.0.255) template]_<[@(0.0.255) c +lass]_[*@4 C], [@(0.0.255) class]_[*@4 T], [@(0.0.255) class]_[*@4 L][@(0.0.255) >]_[@(0.0.255) i +nt]_[* FindLowerBound]([@(0.0.255) const]_[*@4 C][@(0.0.255) `&]_[*@3 v], [@(0.0.255) const]_[*@4 T][@(0.0.255) `&]_[*@3 val], [@(0.0.255) const]_[*@4 L][@(0.0.255) `&]_ [*@3 less])&] [s2; Finds first position in sorted by [* less] predicate where [* val] @@ -66,8 +66,8 @@ can be inserted without breaking the ordering.&] [s7; [*/ Return value]-|Position in container.&] [s3;%- &] [s4;%- &] -[s5;:`:`:`:`:FindLowerBound`(const C`&`,const T`&`):%- [@(0.0.255) template]_<[@(0.0.255) c -lass]_[*@4 C], [@(0.0.255) class]_[*@4 T][@(0.0.255) >]_[@(0.0.255) int]_[* FindLowerBound]([@(0.0.255) c +[s5;:FindLowerBound`(const C`&`,const T`&`):%- [@(0.0.255) template]_<[@(0.0.255) class]_ +[*@4 C], [@(0.0.255) class]_[*@4 T][@(0.0.255) >]_[@(0.0.255) int]_[* FindLowerBound]([@(0.0.255) c onst]_[*@4 C][@(0.0.255) `&]_[*@3 v], [@(0.0.255) const]_[*@4 T][@(0.0.255) `&]_[*@3 val])&] [s2; Finds first position in sorted by [*/ operator<] predicate where [* val] can be inserted without breaking the ordering.&] @@ -78,8 +78,8 @@ onst]_[*@4 C][@(0.0.255) `&]_[*@3 v], [@(0.0.255) const]_[*@4 T][@(0.0.255) `&]_ [s7; [*/ Return value]-|Position in container.&] [s3;%- &] [s4;%- &] -[s5;:`:`:`:`:FindUpperBound`(const C`&`,int`,int`,const T`&`,const L`&`):%- [@(0.0.255) t -emplate]_<[@(0.0.255) class]_[*@4 C], [@(0.0.255) class]_[*@4 T], [@(0.0.255) class]_[*@4 L][@(0.0.255) > +[s5;:FindUpperBound`(const C`&`,int`,int`,const T`&`,const L`&`):%- [@(0.0.255) templat +e]_<[@(0.0.255) class]_[*@4 C], [@(0.0.255) class]_[*@4 T], [@(0.0.255) class]_[*@4 L][@(0.0.255) > ]_[@(0.0.255) int]_[* FindUpperBound]([@(0.0.255) const]_[*@4 C][@(0.0.255) `&]_[*@3 v], [@(0.0.255) int]_[*@3 pos], [@(0.0.255) int]_[*@3 count], [@(0.0.255) const]_[*@4 T][@(0.0.255) `& ]_[*@3 val], [@(0.0.255) const]_[*@4 L][@(0.0.255) `&]_[*@3 less])&] @@ -95,9 +95,9 @@ where [* val] can be inserted without breaking the ordering.&] [s7; [*/ Return value]-|Position in container.&] [s3;%- &] [s4;%- &] -[s5;:`:`:`:`:FindUpperBound`(const C`&`,const T`&`,const L`&`):%- [@(0.0.255) template]_ -<[@(0.0.255) class]_[*@4 C], [@(0.0.255) class]_[*@4 T], [@(0.0.255) class]_[*@4 L][@(0.0.255) > -]_[@(0.0.255) int]_[* FindUpperBound]([@(0.0.255) const]_[*@4 C][@(0.0.255) `&]_[*@3 v], +[s5;:FindUpperBound`(const C`&`,const T`&`,const L`&`):%- [@(0.0.255) template]_<[@(0.0.255) c +lass]_[*@4 C], [@(0.0.255) class]_[*@4 T], [@(0.0.255) class]_[*@4 L][@(0.0.255) >]_[@(0.0.255) i +nt]_[* FindUpperBound]([@(0.0.255) const]_[*@4 C][@(0.0.255) `&]_[*@3 v], [@(0.0.255) const]_[*@4 T][@(0.0.255) `&]_[*@3 val], [@(0.0.255) const]_[*@4 L][@(0.0.255) `&]_ [*@3 less])&] [s2; Finds last position in sorted by [* less] predicate where [* val] @@ -110,8 +110,8 @@ can be inserted without breaking the ordering.&] [s7; [*/ Return value]-|Position in container.&] [s3;%- &] [s4;%- &] -[s5;:`:`:`:`:FindUpperBound`(const C`&`,const T`&`):%- [@(0.0.255) template]_<[@(0.0.255) c -lass]_[*@4 C], [@(0.0.255) class]_[*@4 T][@(0.0.255) >]_[@(0.0.255) int]_[* FindUpperBound]([@(0.0.255) c +[s5;:FindUpperBound`(const C`&`,const T`&`):%- [@(0.0.255) template]_<[@(0.0.255) class]_ +[*@4 C], [@(0.0.255) class]_[*@4 T][@(0.0.255) >]_[@(0.0.255) int]_[* FindUpperBound]([@(0.0.255) c onst]_[*@4 C][@(0.0.255) `&]_[*@3 v], [@(0.0.255) const]_[*@4 T][@(0.0.255) `&]_[*@3 val])&] [s2; Finds last position in sorted by [*/ operator<] predicate where [* val] can be inserted without breaking the ordering.&] @@ -122,8 +122,8 @@ onst]_[*@4 C][@(0.0.255) `&]_[*@3 v], [@(0.0.255) const]_[*@4 T][@(0.0.255) `&]_ [s7; [*/ Return value]-|Position in container.&] [s3;%- &] [s4;%- &] -[s5;:`:`:`:`:FindBinary`(const C`&`,const T`&`,int`,int`,const L`&`):%- [@(0.0.255) tem -plate]_<[@(0.0.255) class]_[*@4 C], [@(0.0.255) class]_[*@4 T], [@(0.0.255) class]_[*@4 L][@(0.0.255) > +[s5;:FindBinary`(const C`&`,const T`&`,int`,int`,const L`&`):%- [@(0.0.255) template]_< +[@(0.0.255) class]_[*@4 C], [@(0.0.255) class]_[*@4 T], [@(0.0.255) class]_[*@4 L][@(0.0.255) > ]_[@(0.0.255) int]_[* FindBinary]([@(0.0.255) const]_[*@4 C][@(0.0.255) `&]_[*@3 v], [@(0.0.255) const]_[*@4 T][@(0.0.255) `&]_[*@3 val], [@(0.0.255) int]_[*@3 pos], [@(0.0.255) int]_[*@3 count], [@(0.0.255) const]_[*@4 L][@(0.0.255) `&]_[*@3 less])&] @@ -140,7 +140,7 @@ a negative value is returned.&] [s7; [*/ Return value]-|Position in container.&] [s3;%- &] [s4;%- &] -[s5;:`:`:`:`:FindBinary`(const C`&`,const T`&`,const L`&`):%- [@(0.0.255) template]_<[@(0.0.255) c +[s5;:FindBinary`(const C`&`,const T`&`,const L`&`):%- [@(0.0.255) template]_<[@(0.0.255) c lass]_[*@4 C], [@(0.0.255) class]_[*@4 T], [@(0.0.255) class]_[*@4 L][@(0.0.255) >]_[@(0.0.255) i nt]_[* FindBinary]([@(0.0.255) const]_[*@4 C][@(0.0.255) `&]_[*@3 v], [@(0.0.255) const]_[*@4 T ][@(0.0.255) `&]_[*@3 val], [@(0.0.255) const]_[*@4 L][@(0.0.255) `&]_[*@3 less])&] @@ -155,9 +155,9 @@ value is returned.&] [s7; [*/ Return value]-|Position in container.&] [s3;%- &] [s4;%- &] -[s5;:`:`:`:`:FindBinary`(const C`&`,const T`&`):%- [@(0.0.255) template]_<[@(0.0.255) cla -ss]_[*@4 C], [@(0.0.255) class]_[*@4 T][@(0.0.255) >]_[@(0.0.255) int]_[* FindBinary]([@(0.0.255) c -onst]_[*@4 C][@(0.0.255) `&]_[*@3 v], [@(0.0.255) const]_[*@4 T][@(0.0.255) `&]_[*@3 val])&] +[s5;:FindBinary`(const C`&`,const T`&`):%- [@(0.0.255) template]_<[@(0.0.255) class]_[*@4 C +], [@(0.0.255) class]_[*@4 T][@(0.0.255) >]_[@(0.0.255) int]_[* FindBinary]([@(0.0.255) const +]_[*@4 C][@(0.0.255) `&]_[*@3 v], [@(0.0.255) const]_[*@4 T][@(0.0.255) `&]_[*@3 val])&] [s2; Finds position of element with specified value in the container sorted by [*/ operator<] predicate. If no such element exists, a negative value is returned.&] @@ -168,9 +168,9 @@ a negative value is returned.&] [s7; [*/ Return value]-|Position in container.&] [s3;%- &] [s4;%- &] -[s5;:`:`:`:`:AppendSorted`(C`&`,const C`&`,const L`&`):%- [@(0.0.255) template]_<[@(0.0.255) c -lass]_[*@4 C], [@(0.0.255) class]_[*@4 L][@(0.0.255) >]_[*@4 C][@(0.0.255) `&]_[* AppendSorted]( -[*@4 C][@(0.0.255) `&]_[*@3 dest], [@(0.0.255) const]_[*@4 C][@(0.0.255) `&]_[*@3 src], +[s5;:AppendSorted`(C`&`,const C`&`,const L`&`):%- [@(0.0.255) template]_<[@(0.0.255) clas +s]_[*@4 C], [@(0.0.255) class]_[*@4 L][@(0.0.255) >]_[*@4 C][@(0.0.255) `&]_[* AppendSorted]([*@4 C +][@(0.0.255) `&]_[*@3 dest], [@(0.0.255) const]_[*@4 C][@(0.0.255) `&]_[*@3 src], [@(0.0.255) const]_[*@4 L][@(0.0.255) `&]_[*@3 less])&] [s2; Merges source NTL container to destination NTL container. Both containers must be sorted in ascending order. After the operation, @@ -184,8 +184,8 @@ Ordering predicate is determined by [* less].&] [s7; [*/ Return value]-|Destination container.[C template]&] [s3;%- &] [s4;%- &] -[s5;:`:`:`:`:AppendSorted`(C`&`,const C`&`):%- [@(0.0.255) template]_<[@(0.0.255) class]_ -[*@4 C][@(0.0.255) >]_[*@4 C][@(0.0.255) `&]_[* AppendSorted]([*@4 C][@(0.0.255) `&]_[*@3 dest], +[s5;:AppendSorted`(C`&`,const C`&`):%- [@(0.0.255) template]_<[@(0.0.255) class]_[*@4 C][@(0.0.255) > +]_[*@4 C][@(0.0.255) `&]_[* AppendSorted]([*@4 C][@(0.0.255) `&]_[*@3 dest], [@(0.0.255) const]_[*@4 C][@(0.0.255) `&]_[*@3 src])&] [s2;~~~.992; Merges source NTL container to destination NTL container. Both containers must be sorted in ascending order. After the @@ -198,9 +198,9 @@ preserved. Ordering is determined by [*/ operator<].&] [s7; [*/ Return value]-|Destination container.[C template]&] [s3;%- &] [s4;%- &] -[s5;:`:`:`:`:UnionSorted`(C`&`,const C`&`,const L`&`):%- [@(0.0.255) template]_<[@(0.0.255) c -lass]_[*@4 C], [@(0.0.255) class]_[*@4 L][@(0.0.255) >]_[*@4 C][@(0.0.255) `&]_[* UnionSorted]( -[*@4 C][@(0.0.255) `&]_[*@3 dest], [@(0.0.255) const]_[*@4 C][@(0.0.255) `&]_[*@3 src], +[s5;:UnionSorted`(C`&`,const C`&`,const L`&`):%- [@(0.0.255) template]_<[@(0.0.255) class +]_[*@4 C], [@(0.0.255) class]_[*@4 L][@(0.0.255) >]_[*@4 C][@(0.0.255) `&]_[* UnionSorted]([*@4 C +][@(0.0.255) `&]_[*@3 dest], [@(0.0.255) const]_[*@4 C][@(0.0.255) `&]_[*@3 src], [@(0.0.255) const]_[*@4 L][@(0.0.255) `&]_[*@3 less])&] [s2; Merges source NTL container to destination NTL container. Both containers must be sorted in ascending order and values must @@ -214,8 +214,8 @@ Ordering is determined by [* less].&] [s7; [*/ Return value]-|Destination container.&] [s3;%- &] [s4;%- &] -[s5;:`:`:`:`:UnionSorted`(C`&`,const C`&`):%- [@(0.0.255) template]_<[@(0.0.255) class]_[*@4 C -][@(0.0.255) >]_[*@4 C][@(0.0.255) `&]_[* UnionSorted]([*@4 C][@(0.0.255) `&]_[*@3 dest], +[s5;:UnionSorted`(C`&`,const C`&`):%- [@(0.0.255) template]_<[@(0.0.255) class]_[*@4 C][@(0.0.255) > +]_[*@4 C][@(0.0.255) `&]_[* UnionSorted]([*@4 C][@(0.0.255) `&]_[*@3 dest], [@(0.0.255) const]_[*@4 C][@(0.0.255) `&]_[*@3 src])&] [s2; Merges the source NTL container to the destination NTL container. Both containers must be sorted in ascending order and values @@ -228,9 +228,9 @@ containers. Ordering is determined by [*/ operator<].&] [s7; [*/ Return value]-|Destination container.&] [s3;%- &] [s4;%- &] -[s5;:`:`:`:`:RemoveSorted`(C`&`,const C`&`,const L`&`):%- [@(0.0.255) template]_<[@(0.0.255) c -lass]_[*@4 C], [@(0.0.255) class]_[*@4 L][@(0.0.255) >]_[*@4 C][@(0.0.255) `&]_[* RemoveSorted]( -[*@4 C][@(0.0.255) `&]_[*@3 from], [@(0.0.255) const]_[*@4 C][@(0.0.255) `&]_[*@3 what], +[s5;:RemoveSorted`(C`&`,const C`&`,const L`&`):%- [@(0.0.255) template]_<[@(0.0.255) clas +s]_[*@4 C], [@(0.0.255) class]_[*@4 L][@(0.0.255) >]_[*@4 C][@(0.0.255) `&]_[* RemoveSorted]([*@4 C +][@(0.0.255) `&]_[*@3 from], [@(0.0.255) const]_[*@4 C][@(0.0.255) `&]_[*@3 what], [@(0.0.255) const]_[*@4 L][@(0.0.255) `&]_[*@3 less])&] [s2; Removes elements of source container from destination container. Both containers must be sorted in ascending order and values @@ -242,8 +242,8 @@ must be unique. Ordering is determined by [* less].&] [s7; [*/ Return value]-|Destination container.&] [s3;%- &] [s4;%- &] -[s5;:`:`:`:`:RemoveSorted`(C`&`,const C`&`):%- [@(0.0.255) template]_<[@(0.0.255) class]_ -[*@4 C][@(0.0.255) >]_[*@4 C][@(0.0.255) `&]_[* RemoveSorted]([*@4 C][@(0.0.255) `&]_[*@3 from], +[s5;:RemoveSorted`(C`&`,const C`&`):%- [@(0.0.255) template]_<[@(0.0.255) class]_[*@4 C][@(0.0.255) > +]_[*@4 C][@(0.0.255) `&]_[* RemoveSorted]([*@4 C][@(0.0.255) `&]_[*@3 from], [@(0.0.255) const]_[*@4 C][@(0.0.255) `&]_[*@3 what])&] [s2; Removes elements of source container from destination container. Both containers must be sorted in ascending order and values @@ -254,7 +254,7 @@ must be unique. Ordering is determined by [*/ operator<].&] [s7; [*/ Return value]-|Destination container.&] [s3;%- &] [s4;%- &] -[s5;:`:`:`:`:IntersectSorted`(D`&`,const S`&`,const L`&`):%- [@(0.0.255) template]_<[@(0.0.255) c +[s5;:IntersectSorted`(D`&`,const S`&`,const L`&`):%- [@(0.0.255) template]_<[@(0.0.255) c lass]_[*@4 D], [@(0.0.255) class]_[*@4 S], [@(0.0.255) class]_[*@4 L][@(0.0.255) >]_[*@4 D][@(0.0.255) `& ]_[* IntersectSorted]([*@4 D][@(0.0.255) `&]_[*@3 dest], [@(0.0.255) const]_[*@4 S][@(0.0.255) `& ]_[*@3 src], [@(0.0.255) const]_[*@4 L][@(0.0.255) `&]_[*@3 less])&] @@ -268,9 +268,9 @@ order and values must be unique. Ordering is determined by [* less].&] [s7; [*C@3 less]-|Destination container.&] [s3;%- &] [s4;%- &] -[s5;:`:`:`:`:IntersectSorted`(D`&`,const S`&`):%- [@(0.0.255) template]_<[@(0.0.255) clas -s]_[*@4 D], [@(0.0.255) class]_[*@4 S][@(0.0.255) >]_[*@4 D][@(0.0.255) `&]_[* IntersectSorted]( -[*@4 D][@(0.0.255) `&]_[*@3 dest], [@(0.0.255) const]_[*@4 S][@(0.0.255) `&]_[*@3 src])&] +[s5;:IntersectSorted`(D`&`,const S`&`):%- [@(0.0.255) template]_<[@(0.0.255) class]_[*@4 D], + [@(0.0.255) class]_[*@4 S][@(0.0.255) >]_[*@4 D][@(0.0.255) `&]_[* IntersectSorted]([*@4 D][@(0.0.255) `& +]_[*@3 dest], [@(0.0.255) const]_[*@4 S][@(0.0.255) `&]_[*@3 src])&] [s2; Removes elements from destination container that are not contained in source container. Both containers must be sorted in ascending order and values must be unique. Ordering is determined by [*/ operator<].&] @@ -281,9 +281,9 @@ order and values must be unique. Ordering is determined by [*/ operator<].&] [s7; [*/ Return value]-|Destination container.&] [s3;%- &] [s4;%- &] -[s5;:`:`:`:`:Sort`(T`&`,const Less`&`):%- [@(0.0.255) template]_<[@(0.0.255) class]_[*@4 T], - [@(0.0.255) class]_[*@4 Less][@(0.0.255) >]_[@(0.0.255) void]_[* Sort]([*@4 T][@(0.0.255) `&]_ -[*@3 c], [@(0.0.255) const]_[*@4 Less][@(0.0.255) `&]_[*@3 less])&] +[s5;:Sort`(T`&`,const Less`&`):%- [@(0.0.255) template]_<[@(0.0.255) class]_[*@4 T], +[@(0.0.255) class]_[*@4 Less][@(0.0.255) >]_[@(0.0.255) void]_[* Sort]([*@4 T][@(0.0.255) `&]_[*@3 c +], [@(0.0.255) const]_[*@4 Less][@(0.0.255) `&]_[*@3 less])&] [s2; Sorts container. Ordering is determined by [* less].&] [s6; IterSwap must be defined for T`::Iterator.&] [s7; [*C@4 T]-|Type of container.&] @@ -291,7 +291,7 @@ order and values must be unique. Ordering is determined by [*/ operator<].&] [s7; [*C@3 less]-|Ordering predicate.&] [s3;%- &] [s4;%- &] -[s5;:`:`:`:`:Sort`(T`&`):%- [@(0.0.255) template]_<[@(0.0.255) class]_[*@4 T][@(0.0.255) >]_[@(0.0.255) v +[s5;:Sort`(T`&`):%- [@(0.0.255) template]_<[@(0.0.255) class]_[*@4 T][@(0.0.255) >]_[@(0.0.255) v oid]_[* Sort]([*@4 T][@(0.0.255) `&]_[*@3 c])&] [s2; Sorts container. Ordering is determined by [*/ operator<].&] [s2; [*1 IterSwap must be defined for T`::Iterator.]&] @@ -299,9 +299,9 @@ oid]_[* Sort]([*@4 T][@(0.0.255) `&]_[*@3 c])&] [s7; [*C@3 c]-|Container.&] [s3;%- &] [s4;%- &] -[s5;:`:`:`:`:IndexSort`(KC`&`,VC`&`,const Less`&`):%- [@(0.0.255) template]_<[@(0.0.255) c -lass]_[*@4 KC], [@(0.0.255) class]_[*@4 VC], [@(0.0.255) class]_[*@4 Less][@(0.0.255) >]_[@(0.0.255) v -oid]_[* IndexSort]([*@4 KC][@(0.0.255) `&]_[*@3 keys], [*@4 VC][@(0.0.255) `&]_[*@3 values], +[s5;:IndexSort`(KC`&`,VC`&`,const Less`&`):%- [@(0.0.255) template]_<[@(0.0.255) class]_[*@4 K +C], [@(0.0.255) class]_[*@4 VC], [@(0.0.255) class]_[*@4 Less][@(0.0.255) >]_[@(0.0.255) void +]_[* IndexSort]([*@4 KC][@(0.0.255) `&]_[*@3 keys], [*@4 VC][@(0.0.255) `&]_[*@3 values], [@(0.0.255) const]_[*@4 Less][@(0.0.255) `&]_[*@3 less])&] [s2; Sorts pair of containers. Both containers must have same number of items. Resulting order is determined by the [* keys] container. @@ -313,8 +313,8 @@ Ordering is determined by [* less].&] [s7; [*C@3 less]-|Ordering predicate.&] [s3;%- &] [s4;%- &] -[s5;:`:`:`:`:IndexSort`(KC`&`,VC`&`):%- [@(0.0.255) template]_<[@(0.0.255) class]_[*@4 KC], - [@(0.0.255) class]_[*@4 VC][@(0.0.255) >]_[@(0.0.255) void]_[* IndexSort]([*@4 KC][@(0.0.255) `& +[s5;:IndexSort`(KC`&`,VC`&`):%- [@(0.0.255) template]_<[@(0.0.255) class]_[*@4 KC], +[@(0.0.255) class]_[*@4 VC][@(0.0.255) >]_[@(0.0.255) void]_[* IndexSort]([*@4 KC][@(0.0.255) `& ]_[*@3 keys], [*@4 VC][@(0.0.255) `&]_[*@3 values])&] [s2; Sorts pair of containers. Both containers must have same number of items. Resulting order is determined by the [* keys] container. @@ -325,10 +325,10 @@ Ordering is determined by [*/ operator<].&] [s7; [*C@3 values]-|Container of values.&] [s3;%- &] [s4;%- &] -[s5;:`:`:`:`:GetSortOrder`(const C`&`,const Less`&`):%- [@(0.0.255) template]_<[@(0.0.255) c -lass]_[*@4 C], [@(0.0.255) class]_[*@4 Less][@(0.0.255) >]_[_^`:`:Vector^ Vector][@(0.0.255) < -int>]_[* GetSortOrder]([@(0.0.255) const]_[*@4 C][@(0.0.255) `&]_[*@3 container], -[@(0.0.255) const]_[*@4 Less][@(0.0.255) `&]_[*@3 less])&] +[s5;:GetSortOrder`(const C`&`,const Less`&`):%- [@(0.0.255) template]_<[@(0.0.255) class]_ +[*@4 C], [@(0.0.255) class]_[*@4 Less][@(0.0.255) >]_Vector[@(0.0.255) ]_[* GetSortOrder +]([@(0.0.255) const]_[*@4 C][@(0.0.255) `&]_[*@3 container], [@(0.0.255) const]_[*@4 Less][@(0.0.255) `& +]_[*@3 less])&] [s2; Creates ascending order of values in container. Ordering is determined by [* less].&] [s7; [*C@4 C]-|Type of container.&] @@ -338,9 +338,9 @@ determined by [* less].&] order.&] [s3;%- &] [s4;%- &] -[s5;:`:`:`:`:GetSortOrder`(const C`&`):%- [@(0.0.255) template]_<[@(0.0.255) class]_[*@4 C][@(0.0.255) > -]_[_^`:`:Vector^ Vector][@(0.0.255) ]_[* GetSortOrder]([@(0.0.255) const]_[*@4 C][@(0.0.255) `& -]_[*@3 container])&] +[s5;:GetSortOrder`(const C`&`):%- [@(0.0.255) template]_<[@(0.0.255) class]_[*@4 C][@(0.0.255) > +]_Vector[@(0.0.255) ]_[* GetSortOrder]([@(0.0.255) const]_[*@4 C][@(0.0.255) `&]_[*@3 co +ntainer])&] [s2; Creates ascending order of values in container. Ordering is determined by [*/ operator<].&] [s7; [*C@4 C]-|Type of container.&] @@ -349,10 +349,10 @@ determined by [*/ operator<].&] order.&] [s3;%- &] [s4;%- &] -[s5;:`:`:`:`:FieldRelation`(O`(T`:`:`*`)`,const R`&`):%- [@(0.0.255) template]_<[@(0.0.255) c -lass]_[*@4 O], [@(0.0.255) class]_[*@4 T], [@(0.0.255) class]_[*@4 R][@(0.0.255) >]_[_^`:`:FieldRelationCls^ F -ieldRelationCls][@(0.0.255) <][*@4 O], [*@4 T], [*@4 R][@(0.0.255) >]_[* FieldRelation]([*@4 O]_ -(T`::[@(0.0.255) `*][*@3 member]), [@(0.0.255) const]_[*@4 R][@(0.0.255) `&]_[*@3 relation])&] +[s5;:FieldRelation`(O`(`*`)`,const R`&`):%- [@(0.0.255) template]_<[@(0.0.255) class]_[*@4 O +], [@(0.0.255) class]_[*@4 T], [@(0.0.255) class]_[*@4 R][@(0.0.255) >]_FieldRelationCls[@(0.0.255) < +][*@4 O], [*@4 T], [*@4 R][@(0.0.255) >]_[* FieldRelation]([*@4 O]_(T`::[@(0.0.255) `*][*@3 member +]), [@(0.0.255) const]_[*@4 R][@(0.0.255) `&]_[*@3 relation])&] [s2; Creates ordering predicate for [* T] based on the value of member variable of[* T].&] [s7; [*C@4 T]-|Type of element.&] @@ -361,11 +361,11 @@ variable of[* T].&] [s7; [*/ Return value]-|Ordering predicate.&] [s3;%- &] [s4;%- &] -[s5;:`:`:`:`:MethodRelation`(O`(T`:`:`*`)`(`)`,const R`&`):%- [@(0.0.255) template]_<[@(0.0.255) c -lass]_[*@4 O], [@(0.0.255) class]_[*@4 T], [@(0.0.255) class]_[*@4 R][@(0.0.255) >]_[_^`:`:MethodRelationCls^ M -ethodRelationCls][@(0.0.255) <][*@4 O]_(T`::[@(0.0.255) `*])(), [*@4 T], -[*@4 R][@(0.0.255) >]_[* MethodRelation]([*@4 O]_(T`::[@(0.0.255) `*][*@3 method])(), -[@(0.0.255) const]_[*@4 R][@(0.0.255) `&]_[*@3 relation])&] +[s5;:MethodRelation`(O`(`*`)`(`)`,const R`&`):%- [@(0.0.255) template]_<[@(0.0.255) class +]_[*@4 O], [@(0.0.255) class]_[*@4 T], [@(0.0.255) class]_[*@4 R][@(0.0.255) >]_MethodRelatio +nCls[@(0.0.255) <][*@4 O]_(T`::[@(0.0.255) `*])(), [*@4 T], [*@4 R][@(0.0.255) >]_[* MethodRelat +ion]([*@4 O]_(T`::[@(0.0.255) `*][*@3 method])(), [@(0.0.255) const]_[*@4 R][@(0.0.255) `&]_[*@3 r +elation])&] [s2; Creates ordering predicate for [* T] based on the value returned by non`-const method of [* T].&] [s7; [*C@4 T]-|Type of element.&] @@ -374,12 +374,11 @@ by non`-const method of [* T].&] [s7; [*/ Return value]-|Ordering predicate.&] [s3;%- &] [s4;%- &] -[s5;:`:`:`:`:MethodRelation`(O`(T`:`:`*`)`(`)const`,const R`&`):%- [@(0.0.255) template -]_<[@(0.0.255) class]_[*@4 O], [@(0.0.255) class]_[*@4 T], [@(0.0.255) class]_[*@4 R][@(0.0.255) > -]_[_^`:`:MethodRelationCls^ MethodRelationCls][@(0.0.255) <][*@4 O]_(T`::[@(0.0.255) `*])( -)_[@(0.0.255) const], [*@4 T], [*@4 R][@(0.0.255) >]_[* MethodRelation]([*@4 O]_(T`::[@(0.0.255) `* -][*@3 method])()_[@(0.0.255) const], [@(0.0.255) const]_[*@4 R][@(0.0.255) `&]_[*@3 relation]) -&] +[s5;:MethodRelation`(O`(`*`)`(`)const`,const R`&`):%- [@(0.0.255) template]_<[@(0.0.255) c +lass]_[*@4 O], [@(0.0.255) class]_[*@4 T], [@(0.0.255) class]_[*@4 R][@(0.0.255) >]_MethodRel +ationCls[@(0.0.255) <][*@4 O]_(T`::[@(0.0.255) `*])()_[@(0.0.255) const], +[*@4 T], [*@4 R][@(0.0.255) >]_[* MethodRelation]([*@4 O]_(T`::[@(0.0.255) `*][*@3 method])()_[@(0.0.255) c +onst], [@(0.0.255) const]_[*@4 R][@(0.0.255) `&]_[*@3 relation])&] [s2; Creates ordering predicate for [* T] based on the value returned by const method of [* T].&] [s7; [*C@4 T]-|Type of element.&] diff --git a/uppsrc/CppBase/Base.cpp b/uppsrc/CppBase/Base.cpp index 388d12bc1..1833aa943 100644 --- a/uppsrc/CppBase/Base.cpp +++ b/uppsrc/CppBase/Base.cpp @@ -18,7 +18,8 @@ CppItem& CppNest::GetAdd(const String& _key, const String& _name) bool CppBase::IsType(int i) const { - return GetKey(i) != "::"; +// return GetKey(i) != "::"; + return GetKey(i).GetCount(); } void Remove(CppBase& base, const Vector& pf) diff --git a/uppsrc/CppBase/CppBase.upp b/uppsrc/CppBase/CppBase.upp index 4bf78e4a3..2be88600c 100644 --- a/uppsrc/CppBase/CppBase.upp +++ b/uppsrc/CppBase/CppBase.upp @@ -12,6 +12,7 @@ file cpplex.cpp, Parser.cpp, Base.cpp, + Nestfo.cpp, Qualify.cpp, Info readonly separator, Copying; diff --git a/uppsrc/CppBase/Nestfo.cpp b/uppsrc/CppBase/Nestfo.cpp new file mode 100644 index 000000000..13685f1d0 --- /dev/null +++ b/uppsrc/CppBase/Nestfo.cpp @@ -0,0 +1,123 @@ +#include "CppBase.h" + +NAMESPACE_UPP + +#define LLOG(x) +#define LTIMING(x) // RTIMING(x) + +Nestfo::Nestfo(const CppBase& base, int nesti) + : nesti(nesti), base(base) +{ + LTIMING("Nestfo(const CppBase& base, int nesti)"); + Init(); +} + +Nestfo::Nestfo(int nesti, const CppBase& base) + : nesti(nesti), base(base) +{ + LTIMING("Nestfo(int nesti, const CppBase& base)"); + Init(); +} + +Nestfo::Nestfo(const CppBase& base, const String& nest) + : nesti(base.Find(nest)), base(base) +{ + LTIMING("Nestfo(const CppBase& base, const String& nest)"); + Init(); +} + +Nestfo::Nestfo(const Nestfo& f) + : base(f.base) +{ + LTIMING("Nestfo copy contructor"); + nests <<= f.nests; + bvalid = nvalid = false; + nesti = f.nesti; +} + +void Nestfo::Init() +{ + bvalid = nvalid = false; +} + +void Nestfo::Bases(int i, Vector& g) +{ + if(base.IsType(i)) { + const CppNest& n = base.nest[i]; + for(int i = 0; i < n.GetCount(); i++) { + const CppItem& im = n[i]; + if(im.IsType()) { + const char *q = im.qptype; + const char *b = q; + for(;;) { + if(*q == ';' || *q == '\0') { + if(b < q) { + int nq = base.Find(String(b, q)); + if(nq >= 0) + g.Add(nq); + } + if(*q == '\0') + return; + q++; + b = q; + } + else + q++; + } + } + } + } +} + +const Vector& Nestfo::GetBases() +{ + LTIMING("GetBases"); + if(!bvalid) { + bvalid = true; + baselist.Clear(); + if(nesti < 0) + return baselist; + Vector b; + Index bi; + Bases(nesti, b); + while(b.GetCount()) { + Vector bb; + for(int i = 0; i < b.GetCount(); i++) { + int q = b[i]; + if(bi.Find(q) < 0) { + bi.Add(q); + Bases(b[i], bb); + } + } + b = bb; + } + for(int i = 0; i < bi.GetCount(); i++) + baselist.Add(base.GetKey(bi[i]) + "::"); + } + return baselist; +} + +const Vector& Nestfo::GetNests() +{ + LTIMING("GetNests"); + if(!nvalid) { + nvalid = true; + nests.Clear(); + if(nesti < 0) + return nests; + String nn = base.GetKey(nesti); + while(nn.GetCount()) { + if(nn[0] == ':' && nn.GetCount() == 2) { + nests.Add(nn); + return nests; + } + nests.Add(nn + "::"); + int q = nn.ReverseFind(':'); + nn.Trim(max(0, q - 1)); + } + nests.Add(""); + } + return nests; +} + +END_UPP_NAMESPACE diff --git a/uppsrc/CppBase/Parser.cpp b/uppsrc/CppBase/Parser.cpp index dc14167e4..4abb2e36e 100644 --- a/uppsrc/CppBase/Parser.cpp +++ b/uppsrc/CppBase/Parser.cpp @@ -186,6 +186,15 @@ Parser::FunctionStat::FunctionStat(const String & nesting, { } +static String s_dblcln("::"); + +inline void NestCat(String& nest, const String& s) +{ + if(nest.GetCount()) + nest << s_dblcln; + nest << s; +} + void Parser::Context::operator<<=(const Context& t) { nesting = t.nesting; @@ -945,12 +954,14 @@ String CleanTp(const String& tp) void Parser::SetNestCurrent() { - current_nest = Nvl(context.nesting, "::"); +// current_nest = Nvl(context.nesting, "::"); + current_nest = context.nesting; } CppItem& Parser::Item(const String& nesting, const String& item, const String& name, bool impl) { - current_nest = Nvl(nesting, "::"); +// current_nest = Nvl(nesting, "::"); + current_nest = nesting; if(dobody) current = CppItem(); current_key = item; @@ -1044,8 +1055,8 @@ bool Parser::Nest(const String& tp, const String& tn) { if(Key('{')) { Context cc; cc <<= context; - context.nesting << "::" << name; - context.namespacel = context.nesting.GetLength(); +// context.nesting << "::" << name; +// context.namespacel = context.nesting.GetLength(); NestBody(); context <<= cc; } @@ -1079,7 +1090,7 @@ bool Parser::Nest(const String& tp, const String& tn) { Check(lex.IsId(), "Missing identifier"); context.typenames.FindAdd(lex); name = lex.GetId(); - context.nesting << "::" << name; + NestCat(context.nesting, name); } while(Key(t_dblcolon)); context.access = t == tk_class ? PRIVATE : PUBLIC; @@ -1194,11 +1205,10 @@ CppItem& Parser::Fn(const Decl& d, const String& templ, bool body, int kind, nn.Cat(*s); s++; } - if(*nn == ':') - nesting = nn; - else - if(!IsNull(nn)) - nesting << "::" << nn; + s = nn; + while(*s == ':') s++; + if(*s) + NestCat(nesting, s); CppItem& im = Item(nesting, item, nm, body); if(!body || IsNull(im.natural)) { im.natural.Clear(); @@ -1392,7 +1402,7 @@ void Parser::Do() h = TrimRight(h.Mid(0, q)); String nest = context.nesting; if(d.type_def) - nest << "::" << d.name; + NestCat(nest, d.name); CppItem& im = Item(nest, d.type_def ? "typedef" : d.name, d.name); im.natural = Purify(h); im.type = im.ptype = d.type; @@ -1436,11 +1446,13 @@ void Parser::Do(Stream& in, const Vector& ignore, CppBase& _base, const while(lex != t_eof) try { try { - current_nest = "::"; +// current_nest = "::"; + current_nest.Clear(); context.access = PUBLIC; context.noclass = true; context.typenames.Clear(); context.tparam.Clear(); + context.nesting.Clear(); inbody = false; for(int i = 0; i < typenames.GetCount(); i++) context.typenames.Add(lex.Id(typenames[i])); diff --git a/uppsrc/CppBase/Qualify.cpp b/uppsrc/CppBase/Qualify.cpp index 742416c64..b7ff57994 100644 --- a/uppsrc/CppBase/Qualify.cpp +++ b/uppsrc/CppBase/Qualify.cpp @@ -5,190 +5,81 @@ NAMESPACE_UPP #define LLOG(x) #define LTIMING(x) // RTIMING(x) -Nestfo::Nestfo(const CppBase& base, int nesti) - : nesti(nesti), base(base) -{ - LTIMING("Nestfo(const CppBase& base, int nesti)"); - Init(); -} +bool DoQualify(Nestfo& nf, const String& type, String& qt); -Nestfo::Nestfo(int nesti, const CppBase& base) - : nesti(nesti), base(base) -{ - LTIMING("Nestfo(int nesti, const CppBase& base)"); - Init(); -} - -Nestfo::Nestfo(const CppBase& base, const String& nest) - : nesti(base.Find(nest)), base(base) -{ - LTIMING("Nestfo(const CppBase& base, const String& nest)"); - Init(); -} - -Nestfo::Nestfo(const Nestfo& f) - : base(f.base) -{ - LTIMING("Nestfo copy contructor"); - nests <<= f.nests; - bvalid = nvalid = false; - nesti = f.nesti; -} - -void Nestfo::Init() -{ - bvalid = nvalid = false; -} - -void Nestfo::Bases(int i, Vector& g) -{ - if(base.IsType(i)) { - const CppNest& n = base.nest[i]; - for(int i = 0; i < n.GetCount(); i++) { - const CppItem& im = n[i]; - if(im.IsType()) { - const char *q = im.qptype; - const char *b = q; - for(;;) { - if(*q == ';' || *q == '\0') { - if(b < q) { - int nq = base.Find(String(b, q)); - if(nq >= 0) - g.Add(nq); - } - if(*q == '\0') - return; - q++; - b = q; - } - else - q++; - } - } - } - } -} - -const Vector& Nestfo::GetBases() -{ - LTIMING("GetBases"); - if(!bvalid) { - bvalid = true; - baselist.Clear(); - if(nesti < 0) - return baselist; - Vector b; - Index bi; - Bases(nesti, b); - while(b.GetCount()) { - Vector bb; - for(int i = 0; i < b.GetCount(); i++) { - int q = b[i]; - if(bi.Find(q) < 0) { - bi.Add(q); - Bases(b[i], bb); - } - } - b = bb; - } - for(int i = 0; i < bi.GetCount(); i++) - baselist.Add(base.GetKey(bi[i]) + "::"); - } - return baselist; -} - -const Vector& Nestfo::GetNests() -{ - LTIMING("GetNests"); - if(!nvalid) { - nvalid = true; - nests.Clear(); - if(nesti < 0) - return nests; - String nn = base.GetKey(nesti); - while(nn.GetCount()) { - if(nn[0] == ':' && nn.GetCount() == 2) { - nests.Add(nn); - return nests; - } - nests.Add(nn + "::"); - int q = nn.ReverseFind(':'); - nn.Trim(max(0, q - 1)); - } - nests.Add("::"); - } - return nests; -} - -String DoQualify(Nestfo& nf, const String& type); - -String Qualify0(Nestfo& nf, const String& type) +bool Qualify0(Nestfo& nf, const String& type, String& qt) { const Vector& nd = nf.GetNests(); - if(type[0] == ':') { - LTIMING(":: test"); - if(nf.base.Find(type) >= 0) - return type; - } - else if(nd.GetCount()) { LTIMING("First test"); - String qt = nd[0] + type; + qt = nd[0] + type; if(nf.base.Find(qt) >= 0) - return qt; + return true; } if(nf.GetNest() >= 0) { int q = type.ReverseFind(':'); - if(q >= 0) { + if(q > 0) { LTIMING("Qualifying qualification"); Nestfo hnf(nf); hnf.NoBases(); - String qn = DoQualify(hnf, type.Mid(0, max(q - 1, 0))); - if(qn[0] != ':') - return type; - int nesti = nf.base.Find(qn); - if(nesti < 0) - return type; - String tp = type.Mid(q + 1); - Nestfo nnf(nf.base, nesti); - const Vector& bs = nnf.GetBases(); - for(int i = 0; i < bs.GetCount(); i++) { - String qt = bs[i] + tp; - if(nf.base.Find(qt) >= 0) - return qt; + String qn; + if(DoQualify(hnf, type.Mid(0, q - 1), qn)) { + int nesti = nf.base.Find(qn); + if(nesti >= 0) { + String tp = type.Mid(q + 1); + Nestfo nnf(nf.base, nesti); + const Vector& bs = nnf.GetBases(); + for(int i = 0; i < bs.GetCount(); i++) { + qt = bs[i] + tp; + if(nf.base.Find(qt) >= 0) + return true; + } + } } } else { LTIMING("Bases"); const Vector& bs = nf.GetBases(); for(int i = 0; i < bs.GetCount(); i++) { - String qt = bs[i] + type; + qt = bs[i] + type; if(nf.base.Find(qt) >= 0) - return qt; + return true; } } } if(type[0] != ':') { LTIMING("Testing nests"); for(int i = 1; i < nd.GetCount(); i++) { - String qt = nd[i] + type; + qt = nd[i] + type; if(nf.base.Find(qt) >= 0) - return qt; + return true; } } - return type; + int q = type.Find(':'); + if(q < 0) + return false; + return Qualify0(nf, type.Mid(q + 1), qt); +} + +bool DoQualify(Nestfo& nf, const String& type, String& qt) +{ + LTIMING("Qualify"); + int q = nf.cache.Find(type); + if(q >= 0) { + qt = nf.cache[q]; + return true; + } + LTIMING("Qualify0"); + if(!Qualify0(nf, type, qt)) + return false; + nf.cache.Add(type, qt); + return true; } String DoQualify(Nestfo& nf, const String& type) { - LTIMING("Qualify"); - int q = nf.cache.Find(type); - if(q >= 0) - return nf.cache[q]; - LTIMING("Qualify0"); - String x = Qualify0(nf, type); - nf.cache.Add(type, x); - return x; + String qt; + return DoQualify(nf, type, qt) ? qt : type; } static String s_int("int"); diff --git a/uppsrc/RichText/Text.h b/uppsrc/RichText/Text.h index 69db1c524..b91d93286 100644 --- a/uppsrc/RichText/Text.h +++ b/uppsrc/RichText/Text.h @@ -67,7 +67,7 @@ public: RichText Copy(int pos, int count) const; FormatInfo GetFormatInfo(int pos, int count) const; - void ApplyFormatInfo(int pos, const RichText::FormatInfo& fi, int count); + void ApplyFormatInfo(int pos, const FormatInfo& fi, int count); void ReStyle(int pos, const Uuid& id); diff --git a/uppsrc/RichText/TextData.cpp b/uppsrc/RichText/TextData.cpp index eb25bf140..3ff4f5238 100644 --- a/uppsrc/RichText/TextData.cpp +++ b/uppsrc/RichText/TextData.cpp @@ -222,7 +222,7 @@ RichText::FormatInfo RichText::GetFormatInfo(int pos, int count) const return fi; } -void RichText::ApplyFormatInfo(int pos, const RichText::FormatInfo& fi, int count) +void RichText::ApplyFormatInfo(int pos, const FormatInfo& fi, int count) { RichTxt& txt = GetUpdateText(pos); diff --git a/uppsrc/ide/Annotations.cpp b/uppsrc/ide/Annotations.cpp index 8cc800a7e..3779e3e7f 100644 --- a/uppsrc/ide/Annotations.cpp +++ b/uppsrc/ide/Annotations.cpp @@ -10,10 +10,13 @@ void AssistEditor::Annotate(const String& filename) CppItem& m = nest.item[k]; for(int p = 0; p < m.pos.GetCount(); p++) { if(m.pos[p].file == fi) { - String coderef = base.GetKey(j) + "::" + nest.key[k]; + String coderef = base.GetKey(j); + if(coderef.GetCount()) + coderef << "::"; + coderef << nest.key[k]; SetAnnotation(m.pos[p].line - 1, GetRefLinks(coderef).GetCount() ? IdeImg::tpp_doc() - : IdeImg::tpp_pen, + : IdeImg::tpp_pen(), coderef); } } @@ -76,7 +79,7 @@ void AssistEditor::SyncAnnotationPopup() annotation_popup.Pick(result, GetRichTextStdScreenZoom()); } else - annotation_popup.SetQTF("Not documented yet.&Click to document"); + annotation_popup.SetQTF("[A1 [@b* " + DeQtf(coderef) + "]&Not documented yet - click to document"); Rect r = GetLineScreenRect(q); int h = annotation_popup.GetHeight(580); h = min(h, 550); diff --git a/uppsrc/ide/Browser/Base.cpp b/uppsrc/ide/Browser/Base.cpp index 9e64e44af..a4c2a3d30 100644 --- a/uppsrc/ide/Browser/Base.cpp +++ b/uppsrc/ide/Browser/Base.cpp @@ -3,7 +3,7 @@ #define LTIMING(x) // RTIMING(x) #define LLOG(x) -static const char s_dbver[] = "Assist++ 2.0"; +static const char s_dbver[] = "Assist++ 2.2"; CppBase& BrowserBase() { diff --git a/uppsrc/ide/Browser/IdeTopic.cpp b/uppsrc/ide/Browser/IdeTopic.cpp index 9902a2588..8a3118952 100644 --- a/uppsrc/ide/Browser/IdeTopic.cpp +++ b/uppsrc/ide/Browser/IdeTopic.cpp @@ -331,13 +331,18 @@ void TopicEditor::InsertItem() editor.Move(c); } +String MakeCodeRef(const String& nest, const String& item) +{ + if(nest.GetCount()) + return nest + "::" + item; + return item; +} + void TopicEditor::FixTopic() { String nest; if(!EditText(nest, "Fix topic", "Nest")) return; - if(nest[0] != ':') - nest = "::" + nest; CppBase& base = BrowserBase(); int q = base.Find(nest); if(q < 0) { @@ -356,7 +361,7 @@ void TopicEditor::FixTopic() nat << "static "; nat << m.natural; natural.Add(nat); - link.Add(nest + "::" + n.key[i]); + link.Add(MakeCodeRef(nest, n.key[i])); } RichText result; const RichText& txt = editor.Get();