Exemple #1
0
                public int Compare(NativeJaggedArraySlice <WordBlock> left,
                                   NativeJaggedArraySlice <WordBlock> right)
                {
                    int length = math.min(left.Length, right.Length);

                    for (int i = 0; i < length; i++)
                    {
                        var word_left  = left[i];
                        var word_right = right[i];
                        if (word_left.type == WordType.Digit)
                        {
                            if (word_left.num < word_right.num)
                            {
                                return(-1);
                            }
                            if (word_left.num > word_right.num)
                            {
                                return(1);
                            }
                        }
                    }
                    if (left.Length > right.Length)
                    {
                        return(-1);
                    }
                    if (left.Length < right.Length)
                    {
                        return(1);
                    }
                    return(0);
                }
Exemple #2
0
            private static bool CheckFormat(NativeList <WordBlock> reference, NativeJaggedArraySlice <WordBlock> target)
            {
                if (reference.Length != target.Length)
                {
                    return(false);
                }

                for (int i = 0; i < reference.Length; i++)
                {
                    var word_src = reference[i];
                    var word_tgt = target[i];

                    if (word_src.type != word_tgt.type)
                    {
                        return(false);
                    }
                    if (word_src.type == WordType.None)
                    {
                        return(false);
                    }

                    if (word_src.type == WordType.String)
                    {
                        if (word_src.word != word_tgt.word)
                        {
                            return(false);
                        }
                    }
                }

                return(true);
            }
        public NativeJaggedArraySlice(NativeJaggedArraySlice <T> slice)
        {
            _ptr = slice._ptr;
            _len = slice._len;

#if ENABLE_UNITY_COLLECTIONS_CHECKS
            _gen_ptr    = slice._gen_ptr;
            _gen_entity = slice._gen_entity;
#endif
        }
        public static unsafe int IndexOf <T>(this NativeJaggedArraySlice <T> slice, T key, int start = 0)
            where T : unmanaged, IEquatable <T>
        {
            slice.CheckReallocate();
            slice.CheckElemIndex(start);

            int _len = slice._len;
            T * _ptr = slice._ptr;

            for (int i = start; i < _len; i++)
            {
                if (_ptr[i].Equals(key))
                {
                    return(i);
                }
            }
            return(-1);
        }
Exemple #5
0
                public int Compare(NativeJaggedArraySlice <WordBlock> left,
                                   NativeJaggedArraySlice <WordBlock> right)
                {
                    if (left.Length < 1 && right.Length < 1)
                    {
                        return(0);
                    }
                    if (left.Length < 1)
                    {
                        return(-1);
                    }
                    if (right.Length < 1)
                    {
                        return(1);
                    }

                    if (left[0].type != right[0].type)
                    {
                        if (left[0].type == WordType.Digit)
                        {
                            return(-1);
                        }
                        if (right[0].type == WordType.Digit)
                        {
                            return(1);
                        }
                        return(0);
                    }

                    int length = math.min(left.Length, right.Length);

                    for (int i = 0; i < length; i++)
                    {
                        var word_left  = left[i];
                        var word_right = right[i];
                        if (word_left.type == WordType.Digit)
                        {
                            if (word_left.num < word_right.num)
                            {
                                return(-1);
                            }
                            if (word_left.num > word_right.num)
                            {
                                return(1);
                            }
                        }
                        else if (word_left.type == WordType.String)
                        {
                            int word_len = math.min(word_left.word.Length, word_right.word.Length);
                            for (int j = 0; j < word_len; j++)
                            {
                                Char16 c_left  = word_left.word[j];
                                Char16 c_right = word_right.word[j];
                                if (c_left < c_right)
                                {
                                    return(-1);
                                }
                                if (c_left > c_right)
                                {
                                    return(1);
                                }
                            }
                            if (word_left.word.Length < word_right.word.Length)
                            {
                                return(-1);
                            }
                            if (word_left.word.Length > word_right.word.Length)
                            {
                                return(1);
                            }
                        }
                    }
                    if (left.Length < right.Length)
                    {
                        return(-1);
                    }
                    if (left.Length > right.Length)
                    {
                        return(1);
                    }
                    return(0);
                }
Exemple #6
0
 public DecodedPath(NativeJaggedArraySlice <WordBlock> path, int index)
 {
     this.path  = path;
     this.index = index;
 }
 public ReadOnlyNativeJaggedArraySlice(T *ptr, int Length)
 {
     _slice = new NativeJaggedArraySlice <T>(ptr, Length);
 }
 public ReadOnlyNativeJaggedArraySlice(NativeJaggedArraySlice <T> slice)
 {
     _slice = slice;
 }
 public ReadOnlyNativeJaggedArraySlice(T *ptr, int Length, long *gen_ptr, long gen_entity)
 {
     _slice = new NativeJaggedArraySlice <T>(ptr, Length, gen_ptr, gen_entity);
 }
 public unsafe bool Equals(NativeJaggedArraySlice <Char16> slice)
 {
     return(_entity.Equals(slice));
 }
 public ReadOnlyStringEntity(NativeJaggedArraySlice <Char16> slice)
 {
     _entity = new StringEntity(slice);
 }
 public bool Equals(NativeJaggedArraySlice <Char16> slice)
 {
     this.CheckReallocate();
     return(slice.Equals(_ptr, _len));
 }
 /// <summary>
 /// specialize for NativeJaggedArraySlice<T>
 /// </summary>
 /// <param name="slice"></param>
 public unsafe void Add(NativeJaggedArraySlice <T> slice)
 {
     this.Add((T *)slice.GetUnsafePtr(), slice.Length);
 }