public static void CopyTo <T>(this IRawContainer <T> source, int src_start_index, IRawContainer <T> dest, int dst_start_index, int count) where T : unmanaged { if (source.size() - src_start_index < count || dest.size() - dst_start_index < count) { throw new InvalidOperationException("can't copy to dest. reason: 'overflow'"); } else if (count <= 0) { return; } else if (source == dest) { Internal_CopySelf(source, src_start_index, dst_start_index, count); return; } RawIterator <T> src_iter = source.begin() + src_start_index; RawIterator <T> dst_iter = dest.begin() + dst_start_index; for (; --count >= 0; dst_iter++, src_iter++) { *dst_iter.Value = *src_iter.Value; } }
internal static void Internal_CopySelf <T>(this IRawContainer <T> self, int sidx, int didx, int count) where T : unmanaged { if (sidx == didx) { return; } RawIterator <T> ss_iter = self.begin(); RawIterator <T> ds_iter = ss_iter; if (sidx < didx) { int tmp_i = count - 1; ss_iter += sidx + tmp_i; ds_iter += didx + tmp_i; for (; --count >= 0; ds_iter--, ss_iter--) { *ds_iter.Value = *ss_iter.Value; } } else { ss_iter += sidx; ds_iter += didx; for (; --count >= 0; ds_iter++, ss_iter++) { *ds_iter.Value = *ss_iter.Value; } } }
public static T[] ToArray <T>(this IRawContainer <T> source) where T : unmanaged { int sz = source.size(); T[] result = new T[sz]; for (RawReverseIterator <T> r_iter = source.rbegin(); --sz >= 0; r_iter++) { result[sz] = *r_iter.Value; } return(result); }
public static RawIterator <T> Find <T>(this IRawContainer <T> source, T item, IEqualityComparer <T> comparer) where T : unmanaged { RawIterator <T> cur = source.begin(); RawIterator <T> end = source.end(); for (; cur != end; cur++) { if (comparer.Equals(*cur.Value, item)) { return(cur); } } return(default);
public static RawIterator <T> Find <T>(this IRawContainer <T> source, T item) where T : unmanaged => Find(source, item, EqualityComparer <T> .Default);
public static IEnumerator <T> GetEnumerator <T>(this IRawContainer <T> source) where T : unmanaged => new RawIteratorEnumerator <T>(source);
public static void CopyTo <T>(this IRawContainer <T> source, IRawContainer <T> dest) where T : unmanaged => CopyTo(source, 0, dest, 0, source.size());
public RawIteratorEnumerator(IRawContainer <T> container) { current = start = container.begin(); end = container.end(); }
public static IReadOnlyRawContainer <T> AsReadOnly <T>(this IRawContainer <T> container) where T : unmanaged => new ReadOnlyRawContainerWrapper <T>(container);
public RawVector(IRawContainer <TItem> collection) : base(collection) { }
public ReadOnlyRawContainerWrapper(IRawContainer <T> container) => this.container = container;
public RawArray(IRawContainer <TItem> collection) : this(collection?.size() ?? 0, false) =>