Newer
Older
ubixfs-2 / btree.cpp
#include <stdio.h>
#include <stdlib.h>
#include "btree.h"

bool 
operator ==(uPtr u1, uPtr u2) {
  return (u1.offset == u2.offset);
} // overloaded operator ==

bTree::bTree(char * filename, uInt32 nodeSize, treeTypes tt, bTreeVFS * virtualFS) {
  filename = filename;
  nodeSize = nodeSize;
  tt = tt;
  vfs = virtualFS;
  return;
} // bTree::bTree

int
bTree::align(int keyLength) {
  return ((sizeof(uPtr) + keyLength + 7) >> 3) << 3;
} // bTree::align

int
bTree::calcSize(TbNode * node) {
  int size;
  TbNodeData * dataNode;

  if (node == NULL) return 0;
  dataNode = &node->data;
  size = (int)dataNode - (int)node;
  
  for (unsigned int curNode = 1; curNode <= node->numKeys; curNode++) {
    size += align(keySize(&dataNode->key));
//mjikaboom    dataNode += align(keySize(&dataNode->key)));
  } // for curNode 
  return size;
} // bTree::calcSize

uPtr
bTree::getFirstDeleted(void) {

  if (!memoryTree) {
    if (!vfs->fSeek((int)&info->firstDeleted- (int)info)) exit(42);
    if (!vfs->fRead(&info->firstDeleted, sizeof(info->firstDeleted))) exit(42);
  }  // if not memoryTree

  return info->firstDeleted;
} // bTree::getFirstDeleted

void
bTree::setNull(uPtr & u) {
  u.offset = 0;
} // bTree::setNull

void
bTree::InstallUserFunctions(compareKeyFunc cmpFunc, copyKeyProc copyProc, keySizeFunc ksFunc) {
  compareKey = cmpFunc;
  copyKey = copyProc;
  keySize = ksFunc;
  return;
} // bTree::InstallUserFunctions

bTree::~bTree(void) {
  return;
} // bTree::~bTree