public override V[] ToArray() { V[] arr = (V[])Array.CreateInstance(cls, nElems); if (root != 0) { OldBtreePage.traverseForward((DatabaseImpl)Database, root, type, height, arr, 0); } return(arr); }
internal void getByteArray(Page pg, int i) { int len = OldBtreePage.getKeyStrSize(pg, i); int offs = OldBtreePage.firstKeyOffs + OldBtreePage.getKeyStrOffs(pg, i); byte[] bval = new byte[len]; Array.Copy(pg.data, offs, bval, 0, len); key = new Key(bval); }
public override V[] Get(Key from, Key till) { ArrayList list = new ArrayList(); if (root != 0) { OldBtreePage.find((DatabaseImpl)Database, root, checkKey(from), checkKey(till), this, height, list); } return((V[])list.ToArray(cls)); }
internal void getStr(Page pg, int i) { int len = OldBtreePage.getKeyStrSize(pg, i); int offs = OldBtreePage.firstKeyOffs + OldBtreePage.getKeyStrOffs(pg, i); char[] sval = new char[len]; for (int j = 0; j < len; j++) { sval[j] = (char)Bytes.unpack2(pg.data, offs); offs += 2; } key = new Key(sval); }
protected override object unpackByteArrayKey(Page pg, int pos) { int offs = OldBtreePage.firstKeyOffs + OldBtreePage.getKeyStrOffs(pg, pos); byte[] data = pg.data; Object[] values = new Object[types.Length]; for (int i = 0; i < types.Length; i++) { Object v = null; switch (types[i]) { case ClassDescriptor.FieldType.tpBoolean: v = data[offs++] != 0; break; case ClassDescriptor.FieldType.tpSByte: v = (sbyte)data[offs++]; break; case ClassDescriptor.FieldType.tpByte: v = data[offs++]; break; case ClassDescriptor.FieldType.tpShort: v = Bytes.unpack2(data, offs); offs += 2; break; case ClassDescriptor.FieldType.tpUShort: v = (ushort)Bytes.unpack2(data, offs); offs += 2; break; case ClassDescriptor.FieldType.tpChar: v = (char)Bytes.unpack2(data, offs); offs += 2; break; case ClassDescriptor.FieldType.tpInt: v = Bytes.unpack4(data, offs); offs += 4; break; case ClassDescriptor.FieldType.tpEnum: v = Enum.ToObject(mbr[i] is FieldInfo ? ((FieldInfo)mbr[i]).FieldType : ((PropertyInfo)mbr[i]).PropertyType, Bytes.unpack4(data, offs)); offs += 4; break; case ClassDescriptor.FieldType.tpUInt: v = (uint)Bytes.unpack4(data, offs); offs += 4; break; case ClassDescriptor.FieldType.tpOid: case ClassDescriptor.FieldType.tpObject: { int oid = Bytes.unpack4(data, offs); v = oid == 0 ? null : ((DatabaseImpl)Database).lookupObject(oid, null); offs += 4; break; } case ClassDescriptor.FieldType.tpLong: v = Bytes.unpack8(data, offs); offs += 8; break; case ClassDescriptor.FieldType.tpDate: { v = new DateTime(Bytes.unpack8(data, offs)); offs += 8; break; } case ClassDescriptor.FieldType.tpULong: v = (ulong)Bytes.unpack8(data, offs); offs += 8; break; case ClassDescriptor.FieldType.tpFloat: v = Bytes.unpackF4(data, offs); offs += 4; break; case ClassDescriptor.FieldType.tpDouble: v = Bytes.unpackF8(data, offs); offs += 8; break; case ClassDescriptor.FieldType.tpDecimal: v = Bytes.unpackDecimal(data, offs); offs += 16; break; case ClassDescriptor.FieldType.tpGuid: v = Bytes.unpackGuid(data, offs); offs += 16; break; case ClassDescriptor.FieldType.tpString: { int len = Bytes.unpack4(data, offs); offs += 4; char[] sval = new char[len]; for (int j = 0; j < len; j++) { sval[j] = (char)Bytes.unpack2(pg.data, offs); offs += 2; } v = new String(sval); break; } case ClassDescriptor.FieldType.tpArrayOfByte: { int len = Bytes.unpack4(data, offs); offs += 4; byte[] val = new byte[len]; Array.Copy(pg.data, offs, val, 0, len); offs += len; v = val; break; } default: Debug.Assert(false, "Invalid type"); break; } values[i] = v; } return(values); }