public DateTime GetObject(byte[] buffer, int offset, int count) { long ticks = Helper.ToInt64(buffer, offset); return(new DateTime(ticks)); }
public long GetObject(byte[] buffer, int offset, int count) { return(Helper.ToInt64(buffer, offset)); }
public byte[] GetBytes(DateTime obj) { return(Helper.GetBytes(obj.Ticks, false)); }
public uint GetObject(byte[] buffer, int offset, int count) { return((uint)Helper.ToInt32(buffer, offset)); }
public byte[] GetBytes(long obj) { return(Helper.GetBytes(obj, false)); }
public string GetObject(byte[] buffer, int offset, int count) { return(Helper.GetString(buffer, offset, (short)count)); }
public byte[] GetBytes(string obj) { return(Helper.GetBytes(obj)); }
public short GetObject(byte[] buffer, int offset, int count) { return(Helper.ToInt16(buffer, offset)); }
public byte[] GetBytes(short obj) { return(Helper.GetBytes(obj, false)); }
internal void SavePage(Page <T> node) { lock (_fileLock) { int pnum = node.DiskPageNumber; if (pnum > _LastPageNumber) { throw new Exception("should not be here: page out of bounds"); } SeekPage(pnum); byte[] page = new byte[_PageLength]; byte[] blockheader = CreateBlockHeader(0, (ushort)node.tree.Count, node.RightPageNumber); Buffer.BlockCopy(blockheader, 0, page, 0, blockheader.Length); int index = blockheader.Length; int i = 0; byte[] b = null; T[] keys = node.tree.Keys(); Array.Sort(keys); // sort keys on save for read performance int blocknum = 0; if (_externalStrings) { // free old blocks if (node.allocblocks != null) { _strings.FreeBlocks(node.allocblocks); } blocknum = _strings.SaveData(node.DiskPageNumber.ToString(), fastBinaryJSON.BJSON.ToBJSON(keys)); } // node children foreach (var kp in keys) { var val = node.tree[kp]; int idx = index + _rowSize * i; // key bytes byte[] kk; byte size; if (_externalStrings == false) { kk = _T.GetBytes(kp); size = (byte)kk.Length; if (size > _maxKeySize) { size = _maxKeySize; } } else { kk = new byte[4]; Buffer.BlockCopy(Helper.GetBytes(blocknum, false), 0, kk, 0, 4); size = 4; } // key size = 1 byte page[idx] = size; Buffer.BlockCopy(kk, 0, page, idx + 1, page[idx]); // offset = 4 bytes b = Helper.GetBytes(val.RecordNumber, false); Buffer.BlockCopy(b, 0, page, idx + 1 + _maxKeySize, b.Length); // duplicatepage = 4 bytes b = Helper.GetBytes(val.DuplicateBitmapNumber, false); Buffer.BlockCopy(b, 0, page, idx + 1 + _maxKeySize + 4, b.Length); i++; } _file.Write(page, 0, page.Length); } }