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());
Example #8
0
 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);
Example #10
0
 public RawVector(IRawContainer <TItem> collection) : base(collection)
 {
 }
 public ReadOnlyRawContainerWrapper(IRawContainer <T> container) => this.container = container;
Example #12
0
 public RawArray(IRawContainer <TItem> collection) : this(collection?.size() ?? 0, false) =>