A* Pathfinding Project  4.0.6
The A* Pathfinding Project for Unity 3D
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Properties Events Macros Groups Pages
ArrayPool< T > Class Template Reference

Lightweight Array Pool. More...

Detailed Description

Lightweight Array Pool.

Handy class for pooling arrays of type T.

Usage:

  • Claim a new array using
    SomeClass[] foo = ArrayPool<SomeClass>.Claim (capacity);
  • Use it and do stuff with it
  • Release it with
    ArrayPool<SomeClass>.Release (foo);
Warning
Arrays returned from the Claim method may contain arbitrary data. You cannot rely on it being zeroed out.

After you have released a array, you should never use it again, if you do use it your code may modify it at the same time as some other code is using it which will likely lead to bad results.

Since
Version 3.8.6
See Also
Pathfinding.Util.ListPool

Static Public Member Functions

static T[] Claim (int minimumLength)
 Returns an array with at least the specified length.
 
static T[] ClaimWithExactLength (int length)
 Returns an array with the specified length.
 
static void Release (ref T[] array, bool allowNonPowerOfTwo=false)
 Pool an array.
 

Static Private Attributes

static readonly Dictionary
< int, Stack< T[]> > 
exactPool = new Dictionary<int, Stack<T[]> >()
 
static readonly HashSet< T[]> inPool = new HashSet<T[]>()
 
static readonly Stack< T[]>[] pool = new Stack<T[]>[31]
 Internal pool.
 

Member Function Documentation

static T [] Claim ( int  minimumLength)
static

Returns an array with at least the specified length.

static T [] ClaimWithExactLength ( int  length)
static

Returns an array with the specified length.

Use with caution as pooling too many arrays with different lengths that are rarely being reused will lead to an effective memory leak.

Use Claim if you just need an array that is at least as large as some value.

static void Release ( ref T[]  array,
bool  allowNonPowerOfTwo = false 
)
static

Pool an array.

If the array was got using the ClaimWithExactLength method then the allowNonPowerOfTwo parameter must be set to true. The parameter exists to make sure that non power of two arrays are not pooled unintentionally which could lead to memory leaks.

Member Data Documentation

readonly Dictionary<int, Stack<T[]> > exactPool = new Dictionary<int, Stack<T[]> >()
staticprivate
readonly HashSet<T[]> inPool = new HashSet<T[]>()
staticprivate
readonly Stack<T[]> [] pool = new Stack<T[]>[31]
staticprivate

Internal pool.

The arrays in each bucket have lengths of 2^i


The documentation for this class was generated from the following file: