// ensure only one accessor for each rank public static DynamicIndexerAccessor GetIndexerAccessor(int rank) { if (_accessors.Length < rank || _accessors[rank - 1] == null) { lock (_lock) { if (_accessors.Length < rank) { DynamicIndexerAccessor[] newAccessors = new DynamicIndexerAccessor[rank]; Array.Copy(_accessors, 0, newAccessors, 0, _accessors.Length); _accessors = newAccessors; } if (_accessors[rank - 1] == null) { _accessors[rank - 1] = new DynamicIndexerAccessorImpl(rank); } } } return(_accessors[rank - 1]); }
// return a DynamicIndexerAccessor with the given number of arguments internal override object GetIndexerAccessor(int rank) { return(DynamicIndexerAccessorImpl.GetIndexerAccessor(rank)); }