Example #1
0
        /// <summary>
        /// </summary>
        /// <returns></returns>
        public SparseStateArray Clone()
        {
            SparseStateArray Result = new SparseStateArray();

            Result.Size   = Size;
            Result.Ranges = null;

            if (Ranges != null)
            {
                Result.Ranges = new List <Range>();
                foreach (Range range in Ranges)
                {
                    Result.Ranges.Add(new Range {
                        Start = range.Start, End = range.End, State = range.State
                    });
                }
            }

            return(Result);
        }
Example #2
0
        /// <summary>
        /// </summary>
        /// <param name="Other"></param>
        public void Union(SparseStateArray Other)
        {
            // Expand to new size.
            if (Size < Other.Size)
            {
                Resize(Other.Size);
            }

            // This is shit, do it in-place.
            lock (TempUnionArray)
            {
                int Array1Length = 0;
                int Array2Length = 0;
                ToArray(ref TempUnionArray, ref Array1Length);
                Other.ToArray(ref TempUnionOtherArray, ref Array2Length);

                int ArrayLength = Math.Max(Array1Length, Array2Length);

                if (TempUnionResultArray.Length < ArrayLength)
                {
                    Array.Resize(ref TempUnionResultArray, ArrayLength);
                }

                for (int i = 0; i < ArrayLength; i++)
                {
                    bool Val1 = i < Array1Length ? TempUnionArray[i] : false;
                    bool Val2 = i < Array2Length ? TempUnionOtherArray[i] : false;

                    TempUnionResultArray[i] = Val1 | Val2;
                }

                FromArray(TempUnionResultArray, ArrayLength);
            }

#if DO_VALIDATION
            Validate();
#endif
        }