コード例 #1
0
		internal static int Compare(bytearr left, bytearr right)
		{
			int lL = left.val.Length;
			int rL = right.val.Length;
			if (lL < rL)
				return -1;
			if (lL > rL)
				return 1;
			// key len equal
			int len = lL;

			for (int i = 0; i < len; i++)
			{
				int l = left.val[i];
				int r = right.val[i];
				int k = l - r;
				if (k == 0)
					continue;
				if (k < 0)
					return -1;
				else
					return 1;
			}
			return 0;
		}
コード例 #2
0
        private int FindPointerOrLower(Bucket b, bytearr key, out bool found)
        {
            found = false;
            if (b.Pointers.Count == 0)
            {
                return(0);
            }
            // binary search
            int lastlower = -1;
            int first     = 0;
            int last      = b.Pointers.Count - 1;
            int mid       = 0;

            while (first <= last)
            {
                mid = (first + last) >> 1;
                KeyPointer k       = b.Pointers[mid];
                int        compare = Helper.Compare(k.Key, key);
                if (compare < 0)
                {
                    lastlower = mid;
                    first     = mid + 1;
                }
                if (compare == 0)
                {
                    found = true;
                    return(mid);
                }
                if (compare > 0)
                {
                    last = mid - 1;
                }
            }

            return(lastlower);
        }
コード例 #3
0
        internal static int Compare(bytearr left, bytearr right)
        {
            int lL = left.val.Length;
            int rL = right.val.Length;

            if (lL < rL)
            {
                return(-1);
            }
            if (lL > rL)
            {
                return(1);
            }
            // key len equal
            int len = lL;

            for (int i = 0; i < len; i++)
            {
                int l = left.val[i];
                int r = right.val[i];
                int k = l - r;
                if (k == 0)
                {
                    continue;
                }
                if (k < 0)
                {
                    return(-1);
                }
                else
                {
                    return(1);
                }
            }
            return(0);
        }
コード例 #4
0
		public KeyPointer(bytearr key, int recno)
		{
			RecordNum = recno;
			Key = key;
			DuplicatesPage = -1;
		}
コード例 #5
0
		public KeyPointer(bytearr key, int recno, int duppage)
		{
			RecordNum = recno;
			Key = key;
			DuplicatesPage = duppage;
		}
コード例 #6
0
 public KeyPointer(bytearr key, int recno)
 {
     RecordNum      = recno;
     Key            = key;
     DuplicatesPage = -1;
 }
コード例 #7
0
 public KeyPointer(bytearr key, int recno, int duppage)
 {
     RecordNum      = recno;
     Key            = key;
     DuplicatesPage = duppage;
 }
コード例 #8
0
		private int FindPointerOrLower(Bucket b, bytearr key, out bool found)
		{
			found = false;
			if (b.Pointers.Count == 0)
				return 0;
			// binary search
			int lastlower = -1;
			int first = 0;
			int last = b.Pointers.Count - 1;
			int mid = 0;
			while (first <= last)
			{
				mid = (first + last) >> 1;
				KeyPointer k = b.Pointers[mid];
				int compare = Helper.Compare(k.Key, key);
				if (compare < 0)
				{
					lastlower = mid;
					first = mid + 1;
				}
				if (compare == 0)
				{
					found = true;
					return mid;
				}
				if (compare > 0)
				{
					last = mid - 1;
				}
			}

			return lastlower;
		}