Class that act as stacks, queues, and priority queues like dDynamicArray_Class but with an added integer index so that 'lists' of both a key and value can be maintained. These classes use dynamically allocated contiguous blocks of memory to store a list of numbers. The queues can be sorted to become priority queues and use binary searches to quickly insert new numbers. If the allocated memory is filled, the available space is doubled. Memory is only reallocated to a smaller size, if the utilization is a quarter of that allocated. The array can be specified as fixed, so that no reallocation occurs. This is useful for heaps of given like k nearest neighbours, or k smallest.
Example usage
program dynamicArray_test use variableKind, only: i32 use dArgDynamicArray_Class, only: dArgDynamicArray implicit none type(dArgDynamicArray) :: da, da2 integer(i32) :: ia da = dArgDynamicArray(10) call da%insertAt(1, 10, 10.d0) call da%insertAt(1, 20, 20.d0) call da%prepend(30, 30.d0) call da%append(40, 40.d0) call da%remove(2) call da%tighten() da2 = da da2%v%values(2) = 50.d0 call da%deallocate() call da2%deallocate() da = dArgDynamicArray(3, sorted=.true.) call da%insertSorted(1, 20.d0) call da%insertSorted(2, 30.d0) call da%insertSorted(3, 10.d0) ia = da%locationOf(20.d0) ia = da%argOf(20.d0) call da%insertSortedUnique(4, 10.d0) call da%insertSortedUnique(4, 15.d0) call da%deallocate() da = dArgDynamicArray(3, sorted=.true., fixed=.true.) call da%insertSorted(1, 20.d0) call da%insertSorted(2, 30.d0) call da%insertSorted(3, 10.d0) ia = da%locationOf(20.d0) ia = da%argOf(20.d0) call da%insertSortedUnique(4, 10.d0) call da%insertSortedUnique(4, 15.d0) call da%deallocate() end program
Overloaded by interface [[dArgDynamicArray(type)]]
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer(kind=i32), | intent(in), | optional | :: | M | Amount of memory to allocate. |
|
logical, | intent(in), | optional | :: | sorted | Maintain a sorted array. |
|
logical, | intent(in), | optional | :: | fixed | Maintain a fixed size array. |
Overloaded by interface [[dArgDynamicArray(type)]]
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer(kind=i32), | intent(in) | :: | i(:) | Set of value indices to initialize with. |
||
real(kind=r64), | intent(in) | :: | values(:) | Set of values to initialize with. |
||
integer(kind=i32), | intent(in), | optional | :: | M | Amount of memory to allocate. |
|
logical, | intent(in), | optional | :: | sorted | Maintain a sorted array. |
|
logical, | intent(in), | optional | :: | fixed | Maintain a fixed size array. |
Class that act as stacks, queues, and priority queues. See dArgDynamicArray_Class for more information on how to use this class.
Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
type(iDynamicArray), | public | :: | i | Argument of the values. |
|||
type(dDynamicArray), | public | :: | v | Values. |
private function init_dArgDynamicArray_i1(M, sorted, fixed) | Overloaded by interface [[dArgDynamicArray(type)]] |
private function init_dArgDynamicArray_d1D(i, values, M, sorted, fixed) | Overloaded by interface [[dArgDynamicArray(type)]] |
procedure, public :: append => append_dArgDynamicArray | dArgDynamicArray%append() - Append a value to the end of the dynamic array. Will change a sorted dynamic array to unsorted. |
procedure, public :: argOf => argOf_dArgDynamicArray | dArgDynamicArray%argOf() - Get the argument of a value in a sorted dynamic array |
procedure, public :: deallocate => deallocate_dArgDynamicArray | dArgDynamicArray%%deallocate() - Deallocate a dynamic array. |
procedure, public :: insertAt => insertAt_dArgDynamicArray | dArgDynamicArray%insertAt() - Insert a value at a given index. |
procedure, public :: insertSorted => insertSorted_dArgDynamicArray | dArgDynamicArray%insertSorted() - Insert a value into a sorted dynamic array. |
procedure, public :: insertSortedUnique => insertSortedUnique_dArgDynamicArray | dArgDynamicArray%insertSortedUnique() - Inserts only unique numbers into a dynamic array. |
procedure, public :: isEmpty => isEmpty_dArgDynamicArray | dArgDynamicArray%isEmpty() - True if the array is empty. |
procedure, public :: isFilled => isFilled_dArgDynamicArray | dArgDynamicArray%isFilled() - True if the allocated memory has been filled. |
procedure, public :: locationOf => locationOf_dArgDynamicArray | dArgDynamicArray%locationOf() - Get the location of a value in a sorted dynamic array. |
procedure, public :: prepend => prepend_dArgDynamicArray | dArgDynamicArray%prepend() - Prepend a value to the start of the dynamic array. Only for unsorted dynamic arrays |
procedure, public :: print => print_dArgDynamicArray | dArgDynamicArray%print() - Print to the screen |
procedure, public :: remove => remove_dArgDynamicArray | dArgDynamicArray%remove() - Remove an element from the array. |
procedure, public :: tighten => tighten_dArgDynamicArray | dArgDynamicArray%tighten() - Removes excess buffer memory and trims it to the current length. |