|
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace RaptorDB
{
#region [ internal classes ]
internal class KeyPointer
{
public KeyPointer(bytearr key, long off, long duppage)
{
Offset = off;
Key = key;
DuplicatesPage = duppage;
}
public KeyPointer(bytearr key, long off)
{
Offset = off;
Key = key;
DuplicatesPage = -1;
}
public bytearr Key;
public long Offset;
public long DuplicatesPage = -1;
//public override string ToString()
//{
// return "" + Key;
//}
public KeyPointer Copy()
{
return new KeyPointer(Key, Offset);
}
}
public struct bytearr
{
public bytearr(byte[] key)
{
val = key;
}
public byte[] val;
//public override string ToString()
//{
// return "" + val[0];
//}
public override int GetHashCode()
{
int result = 17;
foreach (byte b in val)
{
result = result * 31 + b;
}
return result;
}
}
#endregion
internal class Node
{
internal long DiskPageNumber = -1;
internal List<KeyPointer> ChildPointers = new List<KeyPointer>();
internal bool isLeafPage = false;
internal bool isDirty = false;
internal bool isDuplicatePage = false;
internal bool isRootPage = false;
internal List<long> Duplicates = new List<long>();
internal long ParentPageNumber = -1;
internal long RightPageNumber = -1;
public Node(byte type, long parentpage, List<KeyPointer> children,List<long> duplicates, long diskpage, long rightpage)
{
DiskPageNumber = diskpage;
ParentPageNumber = parentpage;
RightPageNumber = rightpage;
if ((type & 1) == 1)
isLeafPage = true;
if ((type & 2) == 2)
isRootPage = true;
if((type & 4) == 4)
isDuplicatePage =true;
ChildPointers = children;
Duplicates = duplicates;
}
public Node(long diskpage)
{
isLeafPage = true;
DiskPageNumber = diskpage;
isRootPage = false;
}
public short Count
{
get { return (short)ChildPointers.Count; }
}
//public override string ToString()
//{
// return "childs=" + ChildPointers.Count + " page=" + diskPageNumber + " isleaf=" + isLeaf;
//}
}
internal class Bucket
{
internal int BucketNumber = -1;
internal List<KeyPointer> Pointers = new List<KeyPointer>();
internal List<long> Duplicates = new List<long>();
internal long DiskPageNumber = -1;
internal long NextPageNumber = -1;
internal bool isDirty = false;
internal bool isBucket = true;
internal bool isOverflow = false;
public Bucket(byte type, int bucketnumber, List<KeyPointer> pointers, List<long> duplicates, long diskpage, long nextpage)
{
DiskPageNumber = diskpage;
BucketNumber = bucketnumber;
NextPageNumber = nextpage;
if ((type & 8) == 8)
isBucket = true;
if ((type & 16) == 16)
isOverflow = true;
Pointers = pointers;
Duplicates = duplicates;
}
public Bucket(long page)
{
DiskPageNumber = page;
}
public short Count
{
get { return (short)Pointers.Count; }
}
//public override string ToString()
//{
// return "count = " + Pointers.Count;
//}
}
}
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.
Mehdi first started programming when he was 8 on BBC+128k machine in 6512 processor language, after various hardware and software changes he eventually came across .net and c# which he has been using since v1.0.
He is formally educated as a system analyst Industrial engineer, but his programming passion continues.
* Mehdi is the 5th person to get 6 out of 7 Platinum's on Code-Project (13th Jan'12)
* Mehdi is the 3rd person to get 7 out of 7 Platinum's on Code-Project (26th Aug'16)