Enhanced C#
Language of your choice: library documentation

Contains static methods to help manage raw arrays with even less overhead than InternalList{T}. More...
Contains static methods to help manage raw arrays with even less overhead than InternalList{T}.
The methods of this class are used by some data structures that contain arrays but, for whatever reason, don't use InternalList{T}. These methods are also used by InternalList(T) itself.
Static Public Member Functions  
static InternalList< T >  AsInternalList< T > (this T[] array) 
Converts an array to InternalList (exists to help infer type params) More...  
static InternalList< T >  AsInternalList< T > (this T[] array, int count) 
static T[]  CopyToNewArray< T > (T[] _array, int _count, int newCapacity) 
static T[]  CopyToNewArray< T > (T[] array) 
static void  Fill< T > (T[] array, T value) 
static void  Fill< T > (T[] array, int start, int count, T value) 
static int  BinarySearch< T > (T[] array, int count, T k, Comparer< T > comp, bool lowerBound) 
static int  BinarySearch< T, K > (T[] _array, int _count, K k, Func< T, K, int > compare, bool lowerBound) 
Performs a binary search with a custom comparison function. More...  
static int  BinarySearchByIndex< Anything > (Anything data, int count, Func< int, Anything, int > compare, bool lowerBound) 
A binary search function that knows nothing about the list being searched. More...  
static int  NextLargerSize (int than) 
As an alternative to the typical enlarging pattern of doubling the array size when it overflows, this function proposes a 75% size increase instead (100% when the array is small), while ensuring that the array length stays even. More...  
static int  NextLargerSize (int than, int capacityLimit) 
Same as NextLargerSize(int), but allows you to specify a capacity limit, to avoid wasting memory when a collection has a known maximum size. More...  
static T[]  Insert< T > (int index, T item, T[] array, int count) 
static T[]  InsertRangeHelper< T > (int index, int spaceNeeded, T[] array, int count) 
static T[]  AutoRaiseCapacity< T > (T[] array, int count, int more, int capacityLimit) 
static int  RemoveAt< T > (int index, T[] array, int count) 
static int  RemoveAt< T > (int index, int removeCount, T[] array, int count) 
static void  Move< T > (T[] array, int from, int to) 
static void  Sort< T > (T[] array, int index, int count, Comparison< T > comp) 
Performs a quicksort using a Comparison function. More...  
static void  InsertionSort< T > (T[] array, int index, int count, Comparison< T > comp) 
Performs an insertion sort. More...  
static bool  AllEqual< T > (this InternalList< T > a, InternalList< T > b) 
static bool  AllEqual< T > (T[] a, T[] b, int count) 

inlinestatic 
Converts an array to InternalList (exists to help infer type params)

inlinestatic 
Performs a binary search with a custom comparison function.
_array  Array to search 
_count  Number of elements used in the array 
k  A key to compare with elements of the array 
compare  Lambda function that knows how to compare Ts with Ks (T and K can be the same). It is passed a series of elements from the array. It must return 0 if the element has the desired value, 1 if the supplied element is higher than desired, and 1 if it is lower than desired. 
lowerBound  Whether to find the "lower bound" in case there are duplicates in the list. If duplicates exist of the search key k, the lowest index of a matching duplicate is returned. This search mode may be slightly slower when a match exists. 
// The first 6 elements are sorted. The seventh is invalid, // and must be excluded from the binary search. int[] array = new int[] { 0, 10, 20, 30, 40, 50, 1 }; // The result will be 2, because array[2] == 20. int a = InternalList.BinarySearch(array, 6, i => i.CompareTo(20)); // The result will be ~2, which equals 3, because index 2 would // be the correct place to insert 17 to preserve the sort order. int b = InternalList.BinarySearch(array, 6, i => i.CompareTo(17));

inlinestatic 
A binary search function that knows nothing about the list being searched.
Anything  Any data type relevant to the caller. 
data  State information to be passed to compare() 
count  Number of items in the list being searched 
compare  Comparison method that is given the current index to examine and the state parameter "data". 
lowerBound  Whether to find the "lower bound" in case there are duplicates in the list. If duplicates exist of the search key k exist, the lowest index of a matching duplicate is returned. This search mode may be slightly slower when a match exists. 

inlinestatic 
Performs an insertion sort.
The insertion sort is a stable sort algorithm that is slow in general (O(N^2)). It should be used only when (a) the list to be sorted is short (less than about 20 elements) or (b) the list is very nearly sorted already.

inlinestatic 
As an alternative to the typical enlarging pattern of doubling the array size when it overflows, this function proposes a 75% size increase instead (100% when the array is small), while ensuring that the array length stays even.
With a seed of 0, 2, or 4: 0, 2, 4, 8, 16, 30, 54, 96, 170, 298, 522...
With a seed of 1: 1, 2, 4, 8, 16, 30, 54, 96, 170, 298, 522...
With a seed of 3: 3, 6, 12, 22, 40, 72, 128, 226, 396...
With a seed of 5: 5, 10, 18, 32, 58, 102, 180, 316, 554...
With a seed of 7: 7, 14, 26, 46, 82, 144, 254, 446, 782...
75% size increases require 23.9% more allocations than size doubling (1.75 to the 1.239th power is about 2.0), but memory utilization is increased. With size doubling, the average list uses 2/3 of its entries, but with this resizing pattern, the average list uses 72.72% of its entries. The average size of a list is 8.3% lower. Originally I used 50% size increases, but they required 71% more allocations, which seemed like too much.

inlinestatic 
Same as NextLargerSize(int), but allows you to specify a capacity limit, to avoid wasting memory when a collection has a known maximum size.
than  Return value will be larger than this number. 
capacityLimit  Maximum value to return. This parameter is ignored if it than >= capacityLimit. 
capacityLimit is returned instead. If the return value would be slightly less than capacityLimit (within 20%) then capacityLimit is returned, to ensure that another reallocation will not be required later.than). If the return value would be more than capacityLimit,

inlinestatic 
Performs a quicksort using a Comparison function.
Normally one uses Array.Sort for sorting arrays. This method exists because there is no Array.Sort overload that accepts both a Comparison and a range (index, count), nor does the .NET framework provide access to its internal adapter that converts Comparison to IComparer.
This quicksort algorithm uses a bestofthree pivot so that it remains performant (fast) if the input is already sorted. It is designed to perform reasonably well in case the data contains many duplicates (not verified). It is also designed to avoid using excessive stack space if a worstcase input occurs that requires O(N^2) time.