X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=inc%2FFBaseColLinkedListT.h;h=417b67fb6a2bb1e87389b545cf59979f1334226f;hb=60d143778a54ae4c638a08d8c7304b099f70434e;hp=7d0ea4305e88f358fc773387a6a1a9ab8a014ca7;hpb=6b44196c40a66b895028f7ba2e9b5e41bc715ab2;p=platform%2Fframework%2Fnative%2Fappfw.git diff --git a/inc/FBaseColLinkedListT.h b/inc/FBaseColLinkedListT.h index 7d0ea43..417b67f 100644 --- a/inc/FBaseColLinkedListT.h +++ b/inc/FBaseColLinkedListT.h @@ -1,5 +1,4 @@ // -// Open Service Platform // Copyright (c) 2012 Samsung Electronics Co., Ltd. // // Licensed under the Apache License, Version 2.0 (the License); @@ -28,7 +27,6 @@ #include #include - namespace Tizen { namespace Base { namespace Collection { @@ -37,11 +35,11 @@ template< class Type > class __LinkedListNodeT; /** * @class LinkedListT - * @brief This class represents a template-based collection of objects that can be individually accessed by index. + * @brief This class represents a template-based collection of objects that can be individually accessed by an index. * * @since 2.0 * - * The %LinkedListT class represents a template-based collection of objects that can be individually accessed by index. + * The %LinkedListT class represents a template-based collection of objects that can be individually accessed by an index. * * For more information on the class features, see ArrayList and LinkedList. * @@ -57,7 +55,7 @@ template< class Type > class __LinkedListNodeT; * void * MyClass::LinkedListTSample(void) * { - * LinkedListT list; + * LinkedListT< int > list; * * int int1 = 1; * int int2 = 2; @@ -76,7 +74,7 @@ template< class Type > class __LinkedListNodeT; * * list.InsertAt(int4, 1); // 1,4,2,3 * - * ComparerT* pIntComparer = new ComparerT(); + * ComparerT< int >* pIntComparer = new ComparerT(); * list.Sort(*pIntComparer); // 1,2,3,4 * * delete pIntComparer; @@ -85,7 +83,7 @@ template< class Type > class __LinkedListNodeT; * list.RemoveAt(0); // 2,4 * * // Uses an enumerator to access elements in the list - * IEnumeratorT* pEnum = list.GetEnumeratorN();; + * IEnumeratorT< int >* pEnum = list.GetEnumeratorN();; * while (pEnum->MoveNext() == E_SUCCESS) * { * pEnum->GetCurrent(temp); @@ -132,7 +130,7 @@ public: * @since 2.0 * * @return An error code - * @param[in] obj An object to add + * @param[in] obj The object to add * @exception E_SUCCESS The method is successful. * @exception E_OUT_OF_MEMORY The memory is insufficient. * @see Remove() @@ -163,10 +161,11 @@ public: * @since 2.0 * * @return An error code - * @param[in] collection A collection to add + * @param[in] collection The collection to add * @exception E_SUCCESS The method is successful. - * @exception E_INVALID_OPERATION The current state of the instance prohibits the execution of the specified operation, or - * the specified @c collection is modified during the operation of this method. + * @exception E_INVALID_OPERATION Either of the following conditions has occurred: + * - The current state of the instance prohibits the execution of the specified operation. + * - The specified @c collection is modified during the operation of this method. * @see RemoveItems() */ virtual result AddItems(const ICollectionT< Type >& collection) @@ -181,16 +180,15 @@ public: } /** - * Gets an enumerator to this list. + * Gets the enumerator of this list. * * @since 2.0 * - * @return An enumerator (an instance of the IEnumeratorT derived class) of this list, @n + * @return The enumerator (an instance of the IEnumeratorT derived class) of this list, @n * else @c null if an exception occurs * @exception E_SUCCESS The method is successful. * @exception E_OUT_OF_MEMORY The memory is insufficient. * @remarks The specific error code can be accessed using the GetLastResult() method. - * @see Tizen::Base::Collection::IEnumeratorT */ virtual IEnumeratorT< Type >* GetEnumeratorN(void) const { @@ -209,18 +207,18 @@ CATCH: } /** - * Gets a bidirectional enumerator (an instance of the IBidirectionalEnumeratorT derived class) of this list. + * Gets the bidirectional enumerator (an instance of the IBidirectionalEnumeratorT derived class) of this list. * * @since 2.0 * - * @return An instance of the IBidirectionalEnumeratorT derived class if successful, @n - * else @c null if an exception occurs - * @exception E_SUCCESS The method is successful. - * @exception E_OUT_OF_MEMORY The memory is insufficient. - * @remarks Use this method to obtain a bidirectional enumerator (an instance of the IBidirectionalEnumeratorT derived class) - * to iterate over a collection (an instance of the IListT derived class). - * The specific error code can be accessed using the GetLastResult() method. - * @see Tizen::Base::Collection::IBidirectionalEnumeratorT + * @return An instance of the IBidirectionalEnumeratorT derived class, @n + * else @c null if an exception occurs + * @exception E_SUCCESS The method is successful. + * @exception E_OUT_OF_MEMORY The memory is insufficient. + * @remarks + * - Use this method to obtain a bidirectional enumerator (an instance of the IBidirectionalEnumeratorT derived class) + * to iterate over a collection (an instance of the IListT derived class). + * - The specific error code can be accessed using the GetLastResult() method. */ virtual IBidirectionalEnumeratorT< Type >* GetBidirectionalEnumeratorN(void) const { @@ -244,11 +242,13 @@ CATCH: * @since 2.0 * * @return An error code - * @param[in] index The index of the object to read - * @param[out] obj An object to get from this list + * @param[in] index The index of the object to read + * @param[out] obj The object to get from this list * @exception E_SUCCESS The method is successful. - * @exception E_OUT_OF_RANGE The specified index is outside the bounds of the data structure, or - * the specified @c index is equal to or greater than the number of elements or less than @c 0. + * @exception E_OUT_OF_RANGE Either of the following conditions has occurred: + * - The specified @c index is outside the bounds of the data structure. + * - The specified @c index is either greater than or equal to the number of elements. + * - The specified @c index is less than @c 0. * @see SetAt() */ virtual result GetAt(int index, Type& obj) const @@ -271,11 +271,13 @@ CATCH: * @since 2.0 * * @return An error code - * @param[in] index The index of the object to read - * @param[out] obj An object to get from this list + * @param[in] index The index of the object to read + * @param[out] obj The object to get from this list * @exception E_SUCCESS The method is successful. - * @exception E_OUT_OF_RANGE The specified index is outside the bounds of the data structure, or - * the specified @c index is equal to or greater than the number of elements or less than @c 0. + * @exception E_OUT_OF_RANGE Either of the following conditions has occurred: + * - The specified @c index is outside the bounds of the data structure. + * - The specified @c index is either greater than or equal to the number of elements. + * - The specified @c index is less than @c 0. * @see SetAt() */ virtual result GetAt(int index, Type& obj) @@ -298,14 +300,16 @@ CATCH: * @since 2.0 * * @return A pointer to the IListT derived instance, @n - * else @c null if an exception occurs. - * @param[in] startIndex The starting index of the range - * @param[in] count The number of elements to read + * else @c null if an exception occurs + * @param[in] startIndex The starting index of the range + * @param[in] count The number of elements to read * @exception E_SUCCESS The method is successful. - * @exception E_OUT_OF_RANGE Either of the following conditions has occurred: @n - * - The specified index is outside the bounds of the data structure. @n - * - The specified @c startIndex is either equal to or greater than the number of elements or less than @c 0. @n - * - The specified @c count is either greater than the number of elements starting from @c startIndex or less than @c 0. + * @exception E_OUT_OF_RANGE Either of the following conditions has occurred: + * - The specified @c index is outside the bounds of the data structure. + * - The specified @c startIndex is either greater than or equal to the number of elements. + * - The specified @c startIndex is less than @c 0. @n + * - The specified @c count is greater than the number of elements starting from @c startIndex. + * - The specified @c count is less than @c 0. * * @remarks The specific error code can be accessed using the GetLastResult() method. */ @@ -365,10 +369,10 @@ CATCH: * @since 2.0 * * @return An error code - * @param[in] obj The object to locate - * @param[out] index The index of the object + * @param[in] obj The object to locate + * @param[out] index The index of the object * @exception E_SUCCESS The method is successful. - * @exception E_OBJ_NOT_FOUND The specified @c obj is not found. + * @exception E_OBJ_NOT_FOUND The specified @c obj has not been found. */ virtual result IndexOf(const Type& obj, int& index) const { @@ -392,14 +396,16 @@ CATCH: * @since 2.0 * * @return An error code - * @param[in] obj The object to locate - * @param[in] startIndex The starting index for the search @n - * It must be less than the number of elements. - * @param[out] index The index of the object + * @param[in] obj The object to locate + * @param[in] startIndex The starting index for the search @n + * It must be less than the number of elements. + * @param[out] index The index of the object * @exception E_SUCCESS The method is successful. - * @exception E_OUT_OF_RANGE The specified index is outside the bounds of the data structure, or - * the specified @c startIndex is either equal to or greater than the number of elements in the list or less than @c 0. - * @exception E_OBJ_NOT_FOUND The specified @c obj is not found. + * @exception E_OUT_OF_RANGE Either of the following conditions has occurred: + * - The specified @c index is outside the bounds of the data structure. + * - The specified @c startIndex is either greater than or equal to the number of elements in the list. + * - The specified @c startIndex is less than @c 0. + * @exception E_OBJ_NOT_FOUND The specified @c obj has not been found. * @see LastIndexOf() */ virtual result IndexOf(const Type& obj, int startIndex, int& index) const @@ -418,16 +424,18 @@ CATCH: * @since 2.0 * * @return An error code - * @param[in] obj The object to locate - * @param[in] startIndex The starting index of the range - * @param[in] count The number of elements to read - * @param[out] index The index of the object + * @param[in] obj The object to locate + * @param[in] startIndex The starting index of the range + * @param[in] count The number of elements to read + * @param[out] index The index of the object * @exception E_SUCCESS The method is successful. - * @exception E_OUT_OF_RANGE Either of the following conditions has occurred: @n - * - The specified index is outside the bounds of the data structure. @n - * - The specified @c startIndex is either equal to or greater than the number of elements in the list or less than @c 0. @n - * - The specified @c count is either greater than the number of elements starting from @c startIndex or less than @c 0. - * @exception E_OBJ_NOT_FOUND The specified @c obj is not found. + * @exception E_OUT_OF_RANGE Either of the following conditions has occurred: + * - The specified @c index is outside the bounds of the data structure. + * - The specified @c startIndex is either greater than or equal to the number of elements in the list. + * - The specified @c startIndex is less than @c 0. + * - The specified @c count is greater than the number of elements starting from @c startIndex. + * - The specified @c count is less than @c 0. + * @exception E_OBJ_NOT_FOUND The specified @c obj has not been found. * @see LastIndexOf() */ virtual result IndexOf(const Type& obj, int startIndex, int count, int& index) const @@ -466,12 +474,14 @@ CATCH: * @since 2.0 * * @return An error code - * @param[in] obj An object to insert - * @param[in] index The index at which the object must be inserted + * @param[in] obj The object to insert + * @param[in] index The index at which the object is inserted * @exception E_SUCCESS The method is successful. - * @exception E_OUT_OF_RANGE The specified index is outside the bounds of the data structure, or - * the specified @c index is greater than the number of elements or less than @c 0. - * @remarks If the @c index equals to the number of elements then the new element + * @exception E_OUT_OF_RANGE Either of the following conditions has occurred: + * - The specified @c index is outside the bounds of the data structure. + * - The specified @c index is greater than the number of elements. + * - The specified @c index is less than @c 0. + * @remarks If the @c index is equal to the number of elements then the new elements * is added at the end of this list. * @see Add() * @see RemoveAt() @@ -512,19 +522,22 @@ CATCH: /** - * Inserts the elements of the @c collection at the location specified. + * Inserts the elements of the collection at the specified location. * * @since 2.0 * * @return An error code - * @param[in] collection The collection to insert - * @param[in] startIndex The starting index at which the collection must be inserted + * @param[in] collection The collection to insert + * @param[in] startIndex The starting index at which the collection is inserted * @exception E_SUCCESS The method is successful. - * @exception E_OUT_OF_RANGE The specified index is outside the bounds of the data structure, or - * the specified @c startIndex is either greater than the number of elements or less than @c 0. - * @exception E_INVALID_OPERATION The current state of the instance prohibits the execution of the specified operation, or - * the specified @c collection is modified during the operation of this method. - * @remarks If the @c startIndex equals to the number of elements then the new elements + * @exception E_OUT_OF_RANGE Either of the following conditions has occurred: + * - The specified @c index is outside the bounds of the data structure. + * - The specified @c startIndex is greater than the number of elements. + * - The specified @c startIndex is less than @c 0. + * @exception E_INVALID_OPERATION Either of the following conditions has occurred: + * - The current state of the instance prohibits the execution of the specified operation. + * - The specified @c collection is modified during the operation of this method. + * @remarks If the @c startIndex is equal to the number of elements then the new elements * are added at the end of this list. * @see RemoveItems() * @see AddItems() @@ -607,10 +620,10 @@ CATCH: * @since 2.0 * * @return An error code - * @param[in] obj The object to locate - * @param[out] index The index of the last occurrence of the specified object + * @param[in] obj The object to locate + * @param[out] index The index of the last occurrence of the specified object * @exception E_SUCCESS The method is successful. - * @exception E_OBJ_NOT_FOUND The specified @c obj is not found. + * @exception E_OBJ_NOT_FOUND The specified @c obj has not been found. * @see IndexOf() */ virtual result LastIndexOf(const Type& obj, int& index) const @@ -637,9 +650,9 @@ CATCH: * @since 2.0 * * @return An error code - * @param[in] obj An object to remove + * @param[in] obj The object to remove * @exception E_SUCCESS The method is successful. - * @exception E_OBJ_NOT_FOUND The specified @c obj is not found. + * @exception E_OBJ_NOT_FOUND The specified @c obj has not been found. * @see Add() * @see RemoveAt() * @see RemoveAll() @@ -663,15 +676,16 @@ CATCH: } /** - * Removes all the elements in the specified @c collection. + * Removes all the elements from the specified collection. * * @since 2.0 * * @return An error code - * @param[in] collection The collection to remove from this list + * @param[in] collection The collection to remove from this list * @exception E_SUCCESS The method is successful. - * @exception E_INVALID_OPERATION The current state of the instance prohibits the execution of the specified operation, or - * the specified @c collection is modified during the operation of this method. + * @exception E_INVALID_OPERATION Either of the following conditions has occurred: + * - The current state of the instance prohibits the execution of the specified operation. + * - The specified @c collection is modified during the operation of this method. * @see Remove() * @see RemoveAt() */ @@ -722,10 +736,12 @@ CATCH: * @since 2.0 * * @return An error code - * @param[in] index The index at which the object must be removed + * @param[in] index The index at which the object is removed * @exception E_SUCCESS The method is successful. - * @exception E_OUT_OF_RANGE The specified index is outside the bounds of the data structure, or - * the specified @c index is equal to or greater than the number of elements or less than @c 0. + * @exception E_OUT_OF_RANGE Either of the following conditions has occurred: + * - The specified @c index is outside the bounds of the data structure. + * - The specified @c index is greater than the number of elements. + * - The specified @c index is less than @c 0. * @see InsertAt() */ virtual result RemoveAt(int index) @@ -739,31 +755,33 @@ CATCH: } /** - * Removes all elements within the specified range. + * Removes all the elements within the specified range. * * @since 2.0 * * @return An error code - * @param[in] startIndex The starting index of the range - * @param[in] count The number of elements to read + * @param[in] startIndex The starting index of the range + * @param[in] count The number of elements to read * @exception E_SUCCESS The method is successful. - * @exception E_OUT_OF_RANGE Either of the following conditions has occurred: @n - * - The specified index is outside the bounds of the data structure. @n - * - The specified @c startIndex is either equal to or greater than the number of elements or less than @c 0. @n - * - The specified @c count is either greater than the number of elements starting from @c startIndex or less than @c 0. + * @exception E_OUT_OF_RANGE Either of the following conditions has occurred: + * - The specified @c index is outside the bounds of the data structure. + * - The specified @c startIndex is either greater than or equal to the number of elements. + * - The specified @c startIndex is less than @c 0. + * - The specified @c count is greater than the number of elements starting from @c startIndex. + * - The specified @c count is less than @c 0. * @see AddItems() * @see InsertItemsFrom() */ virtual result RemoveItems(int startIndex, int count) { TryReturn(startIndex >= 0 && count >= 0, E_OUT_OF_RANGE, - "[%s] Both of the startIndex(%d) and count(%d) MUST be greater than or equal to 0.", - GetErrorMessage(E_OUT_OF_RANGE), startIndex, count); + "[%s] Both of the startIndex(%d) and count(%d) MUST be greater than or equal to 0.", + GetErrorMessage(E_OUT_OF_RANGE), startIndex, count); TryReturn(startIndex < __count, E_OUT_OF_RANGE, - "[%s] The startIndex(%d) MUST be less than the number of elements(%d).", GetErrorMessage(E_OUT_OF_RANGE), startIndex, __count); + "[%s] The startIndex(%d) MUST be less than the number of elements(%d).", GetErrorMessage(E_OUT_OF_RANGE), startIndex, __count); TryReturn(count <= __count && (startIndex + count <= __count), E_OUT_OF_RANGE, - "[%s] The startIndex(%d) + count(%d) MUST be less than or equal to the number of elements(%d).", - GetErrorMessage(E_OUT_OF_RANGE), startIndex, count, __count); + "[%s] The startIndex(%d) + count(%d) MUST be less than or equal to the number of elements(%d).", + GetErrorMessage(E_OUT_OF_RANGE), startIndex, count, __count); if (count > 0) { @@ -811,11 +829,13 @@ CATCH: * @since 2.0 * * @return An error code - * @param[in] obj An object to set - * @param[in] index The index at which the object must be set + * @param[in] obj The object to set + * @param[in] index The index at which the object is set * @exception E_SUCCESS The method is successful. - * @exception E_OUT_OF_RANGE The specified index is outside the bounds of the data structure, or - * the specified @c index is equal to or greater than the number of elements or less than @c 0. + * @exception E_OUT_OF_RANGE Either of the following conditions has occurred: + * - The specified @c index is outside the bounds of the data structure. + * - The specified @c index is either greater than or equal to the number of elements. + * - The specified @c index is less than @c 0. * @see GetAt() */ virtual result SetAt(const Type& obj, int index) @@ -840,10 +860,11 @@ CATCH: * @since 2.0 * * @return An error code - * @param[in] comparer The IComparerT implementation to use when comparing the elements + * @param[in] comparer The IComparerT implementation to use when comparing the elements * @exception E_SUCCESS The method is successful. - * @exception E_INVALID_ARG A specified input parameter is invalid, or - * the @c comparer is not valid. + * @exception E_INVALID_ARG Either of the following conditions has occurred: + * - The specified input parameter is invalid. + * - The specified @c comparer is invalid. */ virtual result Sort(const IComparerT< Type >& comparer) { @@ -912,13 +933,14 @@ CATCH: * @since 2.0 * * @return An error code - * @param[in] collection The collection to check for containment in this list - * @param[out] out Set to @c true if this list contains all of the elements in the specified collection, @n - * else @c false + * @param[in] collection The collection to check for containment in this list + * @param[out] out Set to @c true if this list contains all of the elements in the specified collection, @n + * else @c false * @exception E_SUCCESS The method is successful. - * @exception E_INVALID_OPERATION The current state of the instance prohibits the execution of the specified operation, or - * the specified @c collection is modified during the operation of this method. - * @remarks If the given @c collection is empty, the @c out parameter is set to @c true. + * @exception E_INVALID_OPERATION Either of the following conditions has occurred: + * - The current state of the instance prohibits the execution of the specified operation. + * - The specified @c collection is modified during the operation of this method. + * @remarks If the given @c collection is empty, then @c out is set to @c true. * @see Contains() */ virtual result ContainsAll(const ICollectionT< Type >& collection, bool& out) const @@ -979,12 +1001,12 @@ CATCH: * * @since 2.0 * - * @return @c true if the specified instance equals to the current instance, @n + * @return @c true if the specified instance equals the current instance, @n * else @c false * @param[in] obj The object to compare with the calling object - * @remarks This method returns @c true only if the specified object is also an instance of LinkedList class, - * both lists have the same size, and all corresponding pairs of elements in the two lists are equal. - * In other words, two lists are equal if they contain the same elements in the same order. + * @remarks This method returns @c true only if the specified object is also an instance of the LinkedList class, + * both lists have the same size, and all the corresponding pairs of elements in the two lists are equal. @n + * In other words, the two lists are equal if they contain the same elements in the same order. */ virtual bool Equals(const Object& obj) const { @@ -1028,8 +1050,8 @@ CATCH: * @since 2.0 * * @return The hash value of the current instance - * @remarks The two Tizen::Base::Object::Equals() instances must return the same hash value. For better performance, @n - * the used hash function must generate a random distribution for all inputs. + * @remarks The two Tizen::Base::Object::Equals() instances must return the same hash value. @n + * For better performance, the used hash function must generate a random distribution for all the inputs. */ virtual int GetHashCode(void) const { @@ -1088,7 +1110,7 @@ private: * Inserts an object to the beginning of the %LinkedList. * * @return An error code - * @param[in] obj The object to insert + * @param[in] obj The object to insert * @exception E_OUT_OF_MEMORY The memory is insufficient. * @exception E_SUCCESS The method is successful. */ @@ -1122,7 +1144,7 @@ CATCH: * Inserts an object to the end of the LinkedList. * * @return An error code - * @param[in] obj The object to insert + * @param[in] obj The object to insert * @exception E_OUT_OF_MEMORY The memory is insufficient. * @exception E_SUCCESS The method is successful. */ @@ -1141,8 +1163,8 @@ CATCH: * Inserts an object after the specified node. * * @return An error code - * @param[in] obj The object to insert - * @param[in] pPrevNode The node after which the object must be inserted + * @param[in] obj The object to insert + * @param[in] pPrevNode The node after which the object must be inserted * @exception E_OUT_OF_MEMORY The memory is insufficient. * @exception E_SUCCESS The method is successful. * @remarks The specific error code can be accessed using the GetLastResult() method. @@ -1328,7 +1350,7 @@ public: * * @since 2.0 * - * @param[in] obj An object to include in this node + * @param[in] obj The object to include in this node */ __LinkedListNodeT(const Type& obj) : pPrev(null) @@ -1376,7 +1398,7 @@ public: * * @since 2.0 * - * @param[in] list A list to enumerate + * @param[in] list The list to enumerate * @param[in] modCount The modification count to detect the change in the list */ __LinkedListEnumeratorT(const LinkedListT< Type >& list, int modCount) @@ -1403,13 +1425,13 @@ public: * @since 2.0 * * @return An error code - * @param[out] obj The current object - * @exception E_INVALID_OPERATION Either of the following conditions has occurred: @n - * - The current state of the instance prohibits the execution of the specified operation. @n + * @param[out] obj The current object + * @exception E_INVALID_OPERATION Either of the following conditions has occurred: + * - The current state of the instance prohibits the execution of the specified operation. * - This enumerator is currently positioned before the first element or - * past the last element. @n - - The list is modified after this enumerator is created. - * @exception E_SUCCESS The method is successful. + * past the last element. + * - The list is modified after this enumerator is created. + * @exception E_SUCCESS The method is successful. */ result GetCurrent(Type& obj) const { @@ -1425,15 +1447,16 @@ public: /** * Moves this enumerator to the next element of the list. @n - * When this enumerator is first created or after call to Reset(), + * When this enumerator is first created or after a call to Reset(), * the first call to MoveNext() positions this enumerator to the first element in the list. * * @since 2.0 * * @return An error code * @exception E_SUCCESS The method is successful. - * @exception E_INVALID_OPERATION The current state of the instance prohibits the execution of the specified operation, or - * the list is modified after this enumerator is created. + * @exception E_INVALID_OPERATION Either of the following conditions has occurred: + * - The current state of the instance prohibits the execution of the specified operation. + * - The list is modified after this enumerator is created. * @exception E_OUT_OF_RANGE The enumerator has passed the end of the list. * @see Reset() */ @@ -1466,14 +1489,15 @@ public: } /** - * Positions this enumerator before the first elements in the list. + * Positions this enumerator before the first element in the list. * * @since 2.0 * * @return An error code * @exception E_SUCCESS The method is successful. - * @exception E_INVALID_OPERATION The current state of the instance prohibits the execution of the specified operation, or - * the list is modified after this enumerator is created. + * @exception E_INVALID_OPERATION Either of the following conditions has occurred: + * - The current state of the instance prohibits the execution of the specified operation. + * - The list is modified after this enumerator is created. */ result Reset(void) {