/// <summary> /// Creates a new <see cref="AtomicReferenceArray{T}"/> of <paramref name="length"/>. /// </summary> /// <param name="length"> /// the length of the array /// </param> public AtomicArray(int length) { ValueHolder <T> holder = new ValueHolder <T>(); ValueHolder <T>[] holders = new ValueHolder <T> [length]; for (int i = 0; i < length; i++) { holders[i] = holder; } _atomicReferenceArray = new AtomicReferenceArray <ValueHolder <T> >(holders); }
/// <summary> /// Creates a new <see cref="AtomicReferenceArray{T}"/> with the same length as, and /// all elements copied from <paramref name="array"/> /// </summary> /// <param name="array"> /// The array to copy elements from /// </param> /// <throws><see cref="ArgumentNullException"/>if array is null</throws> public AtomicArray(T[] array) { if (array == null) { throw new ArgumentNullException("array"); } int length = array.Length; ValueHolder <T>[] holders = new ValueHolder <T> [length]; for (int i = 0; i < length; i++) { holders[i] = new ValueHolder <T>(array[i]); } _atomicReferenceArray = new AtomicReferenceArray <ValueHolder <T> >(holders); }
/// <summary> /// Eventually sets to the given value at the given <paramref name="index"/> /// </summary> /// <param name="newValue"> /// the new value /// </param> /// <param name="index"> /// the index to set /// </param> public virtual void LazySet(int index, T newValue) { _atomicReferenceArray[index] = new ValueHolder <T>(newValue); }
/// <summary> /// Indexer for getting and setting the current value at position <paramref name="index"/>. /// <p/> /// </summary> /// <param name="index"> /// The index to use. /// </param> public override T this[int index] { get { return(_atomicReferenceArray[index].Value); } set { _atomicReferenceArray[index] = new ValueHolder <T>(value); } }