aboutsummaryrefslogtreecommitdiffstats
path: root/libparc/parc/algol/parc_List.h
diff options
context:
space:
mode:
Diffstat (limited to 'libparc/parc/algol/parc_List.h')
-rw-r--r--libparc/parc/algol/parc_List.h768
1 files changed, 0 insertions, 768 deletions
diff --git a/libparc/parc/algol/parc_List.h b/libparc/parc/algol/parc_List.h
deleted file mode 100644
index d6d94adf..00000000
--- a/libparc/parc/algol/parc_List.h
+++ /dev/null
@@ -1,768 +0,0 @@
-/*
- * Copyright (c) 2017 Cisco and/or its affiliates.
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-/**
- * @file parc_List.h
- * @ingroup datastructures
- * @brief PARC (Generic) List
- *
- * An ordered collection (also known as a sequence).
- * The user of this interface has precise control over where in the list each element is inserted.
- * The user can access elements by their integer index (position in the list), and search for elements in the list.
- * Unlike sets, lists typically allow duplicate elements.
- * More formally, lists typically allow pairs of elements e1 and e2 such that e1.equals(e2), and they typically allow
- * multiple null elements if they allow null elements at all.
- * It is not inconceivable that someone might wish to implement a list that prohibits duplicates,
- * by throwing runtime exceptions when the user attempts to insert them, but we expect this usage to be rare.
- *
- */
-#ifndef libparc_parc_List_h
-#define libparc_parc_List_h
-
-#include <stdbool.h>
-
-struct parc_list;
-/**
- * @typedef PARCList
- * @brief An ordered collection (also known as a sequence).
- */
-typedef struct parc_list PARCList;
-
-#include <parc/algol/parc_HashCode.h>
-
-#include <parc/algol/parc_Collection.h>
-#include <parc/algol/parc_Object.h>
-
-/**
- * @typedef PARCListInterface
- * @brief The interface of a `PARCList` including functions such as copy, destroy, add, etc.
- */
-typedef struct parc_list_interface {
- /**
- * Copy an instance of `PARCList`
- *
- * @param [in] original An instance of `PARCList` to copy
- *
- * @return A pointer to the new list.
- */
- void *(*Copy)(const PARCList * original);
-
- /**
- * Destroy the List
- *
- * @param [in,out] instancePtr
- * @return a pointer to the destroyed List.
- */
- void (*Destroy)(void **instancePtr);
-
- /**
- * Tests if this list is empty.
- *
- * @param [in] instance
- * @return true if the list is empty
- */
- bool (*IsEmpty)(const void *instance);
-
- /**
- * Appends the specified element to the end of this list (optional operation).
- *
- * @param [in,out] The instance of `PARCList` to append the element to
- * @param [in] element The pointer to the element to be added to the `PARCList`
- * @return true if the element was added successfully.
- */
- bool (*Add)(void *instance, PARCObject *element);
-
- /**
- * Inserts the specified element at the specified position in this list (optional operation).
- *
- * @param [in,out] instance The instance of `PARCList` to modify
- * @param [in] index The index in `PARCList` at which to insert the @p element
- * @param [in] element The element to insert in `PARCList` at @p index.
- */
- void (*AddAtIndex)(void *instance, int index, PARCObject *element);
-
- /**
- * Append elements of @p collection to @p instance
- *
- * Appends all of the elements in the specified collection to the end of this list,
- * in the order that they are returned by the specified collection's iterator (optional operation).
- *
- * @param [in,out] instance The `PARCList` to be modified
- * @param [in] collection The collection to be added
- * @return true if add is successful.
- */
- bool (*AddCollection)(void *instance, PARCCollection *collection);
-
- /**
- * Inserts all of the elements in the specified collection into this list at the specified position (optional operation)
- *
- * @param [in,out] instance The `PARCList` to be modified
- * @param [in] index The position at which to insert the @p collection
- * @param [in] collection The collection to be added
- * @return true if add is successful.
- * @endcode
- */
- bool (*AddCollectionAtIndex)(void *instance, int index, PARCCollection *collection);
-
- /**
- * Removes all of the elements from this list (optional operation).
- *
- * @param [in,out] instance The instance of `PARCList` to empty.
- */
- void (*Clear)(void *instance);
-
- /**
- * Returns true if this list contains the specified element.
- *
- * @param [in] instance The instance of `PARCList` to inspect
- * @param [in] element The element to search for in @p instance
- * @return true if the @p element is found in @p instance.
- */
- bool (*Contains)(const void *instance, const PARCObject *element);
-
- /**
- * Returns true if this list contains all of the elements of the specified collection.
- *
- * @param [in] instance The instance of `PARCList` to inspect
- * @param [in] collection The instance of {@link PARCCollection} whose elements are sought in @p instance
- * @return true if all of the elements in @p collection is found in @p instance
- */
- bool (*ContainsCollection)(const void *instance, const PARCCollection *collection);
-
- /**
- * Compares the specified object with this list for equality.
- *
- * @param [in] xInstance The first `PARCList` instance to compare
- * @param [in] yInstance The second `PARCList` instance to compare
- * @return true if the two instances are equal
- */
- bool (*Equals)(const void *xInstance, const void *yInstance);
-
- /**
- * Returns the element at the specified position in this list.
- *
- * @param [in] instance A pointer to the instance of `PARCList`
- * @param index The index of the element to be returned
- * @return A pointer to the element at @p index
- */
- PARCObject *(*GetAtIndex)(const void *instance, size_t index);
-
- /**
- * Returns the hash code value for this list.
- *
- * @param [in] instance A pointer to the instance of `PARCList`
- * @return int The hash code value
- */
- PARCHashCode (*HashCode)(const void *instance);
-
- /**
- * Returns the index of the first occurrence of the specified element in this list, or -1 if this list does not contain the element.
- *
- * @param [in] instance A pointer to the instance of `PARCList`
- * @param [in] element A pointer to the element to locate in @p instance
- * @return size_t the index of the first located @p element or -1 if not found
- */
- size_t (*IndexOf)(const void *instance, const PARCObject *element);
-
- /**
- * Returns the index of the last occurrence of the specified element in this list, or -1 if this list does not contain the element.
- *
- * @param [in] instance A pointer to the instance of `PARCList`
- * @param [in] element A pointer to the element to locate in @p instance
- * @return size_t the index of the last located @p element or -1 if not found
- *
- * Example:
- * @code
- * <#example#>
- * @endcode
- */
- size_t (*LastIndexOf)(void *instance, const PARCObject *element);
-
- /**
- * Removes the element at the specified position in this list (optional operation).
- *
- * @param [in,out] instance A pointer to the instance of `PARCList` to modify
- * @param [in] index The index of the element to remove
- * @return A pointer to the removed element
- *
- * Example:
- * @code
- * <#example#>
- * @endcode
- */
- PARCObject *(*RemoveAtIndex)(PARCList * list, size_t index);
-
- /**
- * Removes the first occurrence of the specified element from this list, if it is present (optional operation).
- *
- * @param [in,out] instance A pointer to the instance of `PARCList` to modify
- * @param element The element to find and remove
- * @return true if element found and removed
- *
- * Example:
- * @code
- * <#example#>
- * @endcode
- */
- bool (*Remove)(void *instance, const PARCObject *element);
-
- /**
- * Removes from this list all of its elements that are contained in the specified collection (optional operation).
- *
- * @param [in,out] instance A pointer to the instance of `PARCList` to modify
- * @param collection The instance of {@link PARCCollection} whose elements should be found in the @p instance and removed.
- * @return true if the elements are found and removed
- *
- * Example:
- * @code
- * <#example#>
- * @endcode
- */
- bool (*RemoveCollection)(void *instance, const PARCCollection *collection);
-
- /**
- * Retains only the elements in this list that are contained in the specified collection (optional operation).
- *
- * @param [in,out] instance A pointer to the instance of `PARCList` to modify
- * @param collection The instance of {@link PARCCollection} whose elements should be retained in
- * the @p instance while all other elements are removed.
- * @return true if the operation is successful
- *
- * Example:
- * @code
- * <#example#>
- * @endcode
- */
- bool (*RetainCollection)(void *instance, const PARCCollection *collection);
-
- /**
- * Replaces the element at the specified position in this list with the specified element (optional operation).
- *
- * @param [in,out] instance A pointer to the instance of `PARCList` to modify
- * @param index The position in @p instance to replace with @p element
- * @param element The element to put into @p instance at @p index, replacing the current value.
- * @return
- *
- * Example:
- * @code
- * <#example#>
- * @endcode
- */
- void *(*SetAtIndex)(void *instance, size_t index, PARCObject * element);
-
- /**
- * Returns the number of elements in this list.
- *
- * @param [in] instance A pointer to the instance of `PARCList` to inspect
- * @return size_t Number of elements in the list
- *
- * Example:
- * @code
- * <#example#>
- * @endcode
- */
- size_t (*Size)(const void *instance);
-
- /**
- * Returns a view of the portion of this list between the specified fromIndex, inclusive, and toIndex, exclusive.
- *
- * @param [in] instance A pointer to the instance of `PARCList` to inspect
- * @param [in] fromIndex The starting index into the list
- * @param [in] toIndex The end index into the list
- * @return A pointer to the sub list
- *
- * Example:
- * @code
- * <#example#>
- * @endcode
- */
- PARCList *(*SubList)(const void *instance, size_t fromIndex, size_t toIndex);
-
- /**
- * Returns an array containing all of the elements in this list in proper sequence (from first to last element).
- *
- * @param [in] instance A pointer to the instance of `PARCList` to inspect
- * @return A pointer to a pointer to the array containing the elements of the list in proper sequence.
- *
- * Example:
- * @code
- * <#example#>
- * @endcode
- */
- void** (*ToArray)(const void *instance);
-} PARCListInterface;
-
-/**
- * Increase the number of references to a `PARCList`.
- *
- * Note that new `PARCList` is not created,
- * only that the given `PARCList` reference count is incremented.
- * Discard the reference by invoking `parcList_Release`.
- *
- * @param list A pointer to the original `PARCList`.
- * @return The value of the input parameter @p list.
- *
- * Example:
- * @code
- * {
- * PARCList *list = parcList(parcArrayList_Create(parcArrayList_StdlibFreeFunction), PARCArrayListAsPARCList);
- *
- * PARCList *list2 = parcList_Acquire(list);
- *
- * parcList_Release(&list);
- * parcList_Release(&list2);
- * }
- * @endcode
- *
- * @see parcList_Release
- */
-PARCList *parcList_Acquire(const PARCList *list);
-
-/**
- * Release a previously acquired reference to the specified instance,
- * decrementing the reference count for the instance.
- *
- * The pointer to the instance is set to NULL as a side-effect of this function.
- *
- * If the invocation causes the last reference to the instance to be released,
- * the instance is deallocated and the instance's interface will perform
- * additional cleanup and release other privately held references.
- *
- * @param [in,out] listPtr A pointer to a pointer to the instance to release.
- *
- * Example:
- * @code
- * {
- * PARCList *list = parcList(parcArrayList_Create(parcArrayList_StdlibFreeFunction), PARCArrayListAsPARCList);
- *
- * parcList_Release(&list);
- * }
- * @endcode
- */
-void parcList_Release(PARCList **listPtr);
-
-/**
- * Create an independent copy the given `PARCList`
- *
- * A new list is created as a complete copy of the original.
- *
- * @param [in] list A valid pointer to a `PARCList` instance (cannot be NULL)
- *
- * @return NULL Memory could not be allocated.
- * @return non-NULL A pointer to a new `PARCList` instance.
- *
- * @throws parcTrapIllegalValue if @p instance is NULL.
- *
- * Example:
- * @code
- * {
- * PARCList *list = parcList(parcArrayList_Create(parcArrayList_StdlibFreeFunction), PARCArrayListAsPARCList);
- *
- * PARCList *copy = parcList_Copy(list);
- *
- * parcList_Release(&copy);
- * parcList_Release(&list);
- * }
- * @endcode
- *
- */
-PARCList *parcList_Copy(const PARCList *list);
-
-/**
- * Tests if this list is empty.
- *
- * Return true if the list is empty, false otherwise
- *
- * @param list A pointer to the instance of `PARCList` to test
- * @return True if the list is empty, else False
- *
- * Example:
- * @code
- * <#example#>
- * @endcode
- */
-bool parcList_IsEmpty(const PARCList *list);
-
-/**
- * Appends the specified element to the end of this list (optional operation).
- *
- * @param [in,out] list A pointer to the instance of `PARCList` to modify
- * @param [in] element The element to add to the end of the `PARCList`
- * @return True if the add is successful
- *
- * Example:
- * @code
- * <#example#>
- * @endcode
- */
-bool parcList_Add(PARCList *list, void *element);
-
-/**
- * Add all of the pointers in the given array of pointers to the `PARCList`.
- *
- * @param [in,out] list A pointer to the `PARCList` instance to be modified.
- * @param [in] argc The number of values in @p argv.
- * @param [in] argv An array void * values.
- *
- * @return True if the add is successful
- *
- * Example:
- * @code
- * {
- * PARCList *list = parcList(parcArrayList_Create(NULL), PARCArrayListAsPARCList);
- *
- * int elements[] = { 1, 2, 3 };
- *
- * parcList_AddAll(array, 3, elements);
- * size_t actual = parcList_Length(array);
- *
- * parcAssertTrue(3 == actual, "Expected=%d, actual=%d", 3, actual);
- *
- * parcListRelease(&array);
- * }
- * @endcode
- */
-bool parcList_AddAll(PARCList *list, size_t argc, void **argv);
-
-/**
- * Inserts the specified element at the specified position in this list (optional operation).
- *
- * @param [in,out] list A pointer to the `PARCList` instance to be modified
- * @param [in] index The specified position in the list
- * @param [in] element The element to be added to the specified position.
- *
- * Example:
- * @code
- * <#example#>
- * @endcode
- */
-void parcList_AddAtIndex(PARCList *list, int index, void *element);
-
-/**
- * Appends all of the elements in the specified collection to the end of this list,
- * in the order that they are returned by the specified collection's iterator (optional operation).
- *
- * @param [in,out] list A pointer to the `PARCList` instance to be modified
- * @param [in] collection A pointer to an istance of {@link PARCCollection} to be added to the list
- * @return True if add is successful
- *
- * Example:
- * @code
- * <#example#>
- * @endcode
- */
-bool parcList_AddCollection(PARCList *list, PARCCollection *collection);
-
-/**
- * Inserts all of the elements in the specified collection into this list at the specified position (optional operation).
- *
- * @param [in,out] list A pointer to the `PARCList` instance to be modified
- * @param [in] index The position at which to insert the collection
- * @param [in] collection A pointer to an istance of {@link PARCCollection} to be inserted into the list
- * @return True if insertion is successful
- *
- * Example:
- * @code
- * <#example#>
- * @endcode
- */
-bool parcList_AddCollectionAtIndex(PARCList *list, int index, PARCCollection *collection);
-
-/**
- * Removes all of the elements from this list (optional operation).
- *
- * @param [in,out] list A pointer to the `PARCList` instance to be cleared
- *
- * Example:
- * @code
- * <#example#>
- * @endcode
- */
-void parcList_Clear(PARCList *list);
-
-/**
- * Returns true if this list contains the specified element.
- *
- * @param [in] list A pointer to the `PARCList` instance to be checked
- * @param [in] element The element to be added to the specified position.
- * @return True if the element is contained in the list
- *
- * Example:
- * @code
- * <#example#>
- * @endcode
- */
-bool parcList_Contains(const PARCList *list, void *element);
-
-/**
- * Returns true if this list contains all of the elements of the specified collection.
- *
- * @param [in] list A pointer to the `PARCList` instance to be checked
- * @param [in] collection A pointer to the instance of {@link PARCCollection} to be checked.
- * @return True if all of the elements in the collection are found in the list.
- *
- * Example:
- * @code
- * <#example#>
- * @endcode
- */
-bool parcList_ContainsCollection(PARCList *list, PARCCollection *collection);
-
-
-/**
- * Determine if two `PARCList` instances are equal.
- *
- * Two `PARCList` instances are equal if, and only if,
- * the size of the lists are equal and each element in the list is equal and
- * in the same order.
- *
- * The following equivalence relations on non-null `PARCList` instances are maintained:
- *
- * * It is reflexive: for any non-null reference value x, `PARCList_Equals(x, x)`
- * must return true.
- *
- * * It is symmetric: for any non-null reference values x and y,
- * `parcList_Equals(x, y)` must return true if and only if
- * `parcList_Equals(y, x)` returns true.
- *
- * * It is transitive: for any non-null reference values x, y, and z, if
- * `parcList_Equals(x, y)` returns true and
- * `parcList_Equals(y, z)` returns true,
- * then `parcList_Equals(x, z)` must return true.
- *
- * * It is consistent: for any non-null reference values x and y, multiple
- * invocations of `parcList_Equals(x, y)` consistently return true or
- * consistently return false.
- *
- * * For any non-null reference value x, `parcList_Equals(x, NULL)` must
- * return false.
- *
- * @param [in] x A pointer to a `PARCList` instance.
- * @param [in] y A pointer to a `PARCList` instance.
- * @return true if the two `PARCList` instances are equal.
- *
- * Example:
- * @code
- * {
- * PARCList *a = parcList_Create();
- * PARCList *b = parcList_Create();
- *
- * if (parcList_Equals(a, b)) {
- * // true
- * } else {
- * // false
- * }
- * }
- * @endcode
- */
-bool parcList_Equals(const PARCList *x, const PARCList *y);
-
-/**
- * Returns the element at the specified position in this list.
- * If the index is out of bounds, it will trap with an out-of-bounds.
- *
- * @param [in] list A pointer to the `PARCList` instance to be checked
- * @param [in] index The index of the element to be returned
- * @return A pointer to the element.
- *
- * Example:
- * @code
- * <#example#>
- * @endcode
- */
-void *parcList_GetAtIndex(const PARCList *list, size_t index);
-
-/**
- * Returns the hash code value for this list.
- *
- * @param [in] list A pointer to the `PARCList` instance to be hashed
- * @return The hash code value
- *
- * Example:
- * @code
- * <#example#>
- * @endcode
- */
-int parcList_HashCode(const PARCList *list);
-
-/**
- * Returns the index of the first occurrence of the specified element in this list, or -1 if this list does not contain the element.
- *
- * @param [in] list A pointer to the `PARCList` instance to be hashed.
- * @param [in] element A pointer to an element to check for list inclusion.
- * @return The index of the first occurance of @p element, or -1 if it is not present
- * Example:
- * @code
- * <#example#>
- * @endcode
- */
-ssize_t parcList_IndexOf(const PARCList *list, PARCObject *element);
-
-/**
- * Returns the index of the last occurrence of the specified element in this list, or -1 if this list does not contain the element.
- *
- * @param [in] list A pointer to the `PARCList` instance to be hashed.
- * @param [in] element A pointer to an element to check for list inclusion.
- * @return The index of the last occurance of @p element, or -1 if it is not present
- *
- * Example:
- * @code
- * <#example#>
- * @endcode
- */
-ssize_t parcList_LastIndexOf(const PARCList *list, PARCObject *element);
-
-/**
- * Removes the element at the specified position in this list (optional operation).
- *
- * @param [in,out] list A pointer to the `PARCList` instance to be modified.
- * @param [in] index The index of the element to be removed
- * @return non NULL A pointer to the element removed
- *
- * Example:
- * @code
- * <#example#>
- * @endcode
- */
-void *parcList_RemoveAtIndex(PARCList *list, size_t index);
-
-/**
- * Removes the first occurrence of the specified element from this list, if it is present (optional operation).
- *
- * @param [in,out] list A pointer to the `PARCList` instance to be modified.
- * @param [in] element A pointer to the element to be removed from the `PARCList`
- * @return true The element was found and removed, false if it was not found.
- *
- * Example:
- * @code
- * <#example#>
- * @endcode
- */
-bool parcList_Remove(PARCList *list, PARCObject *element);
-
-/**
- * Removes from this list all of its elements that are contained in the specified collection (optional operation).
- *
- * @param [in,out] list A pointer to the `PARCList` instance to be modified.
- * @param [in] collection A pointer to the instance of {@link PARCCollection} to be removed from the `PARCList`
- * @return true The collection was found and removed, false if it was not found.
- *
- * Example:
- * @code
- * <#example#>
- * @endcode
- */
-bool parcList_RemoveCollection(PARCList *list, PARCCollection *collection);
-
-/**
- * Retains only the elements in this list that are contained in the specified collection (optional operation).
- *
- * @param [in,out] list A pointer to the `PARCList` instance to be modified.
- * @param [in] collection A pointer to the instance of {@link PARCCollection} to be found and retained in the `PARCList`
- * @return true if the function was successful
- *
- * Example:
- * @code
- * <#example#>
- * @endcode
- */
-bool parcList_RetainCollection(PARCList *list, PARCCollection *collection);
-
-/**
- * Replaces the element at the specified position in this list with the specified element (optional operation).
- *
- * @param [in,out] list A pointer to the `PARCList` instance to be modified.
- * @param [in] index The position at which the element should be replaced with @p element
- * @param [in] element A pointer to the element to be inserted at the specified position
- * @return A pointer to the element previously at that position.
- *
- * Example:
- * @code
- * <#example#>
- * @endcode
- */
-PARCObject *parcList_SetAtIndex(PARCList *list, size_t index, PARCObject *element);
-
-/**
- * Returns the number of elements in this list.
- *
- * @param [in] list A pointer to the `PARCList` instance to be measured.
- * @return The size of the @p list
- *
- * Example:
- * @code
- * <#example#>
- * @endcode
- */
-size_t parcList_Size(const PARCList *list);
-
-/**
- * Returns a view of the portion of this list between the specified fromIndex, inclusive, and toIndex, exclusive.
- *
- * @param [in] list A pointer to the `PARCList` instance to be measured.
- * @param [in] fromIndex The position to start the view (inclusive)
- * @param [in] toIndex The position to end the view (exclusive)
- * @return a pointer to an instance of `PARCList` containing the subList requested
- *
- * Example:
- * @code
- * <#example#>
- * @endcode
- */
-PARCList *parcList_SubList(PARCList *list, size_t fromIndex, size_t toIndex);
-
-/**
- * Returns an array containing all of the elements in this list in proper sequence (from first to last element).
- *
- * @param [in] list A pointer to the `PARCList` instance to be sorted.
- * @return A pointer to a pointer to an Array containing the sorted elements
- *
- * Example:
- * @code
- * <#example#>
- * @endcode
- */
-void**parcList_ToArray(PARCList *list);
-
-/**
- * Create an instance of `PARCList` that uses the @p interface to provide functions and the @p instance to provide
- * initial elements of the list.
- * @param [in] instance An initial set of elements for the new instance of `PARCList`
- * @param [in] interface A pointer to an instance of {@link PARCListInterface} containing a set of list functions
- * @return A pointer to a new instance of `PARCList`
- *
- * Example:
- * @code
- * <#example#>
- * @endcode
- */
-PARCList *parcList(void *instance, PARCListInterface *interface);
-
-/**
- * Create an instance of `PARCList` that uses the @p interface to provide functions and the @p instance to provide
- * initial elements of the list.
- * @param [in] instance An initial set of elements for the new instance of `PARCList`
- * @param [in] interface A pointer to an instance of {@link PARCListInterface} containing a set of list functions
- * @return A pointer to a new instance of `PARCList`
- *
- * Example:
- * @code
- * <#example#>
- * @endcode
- */
-PARCList *parcList_Create(void *instance, PARCListInterface *interface);
-
-#endif // libparc_parc_List_h