Skip to content
Alexander Feodorov edited this page Feb 27, 2023 · 12 revisions

Import module symbols

const { BTree, GLIB_VERSION } = require("node-btree");

GLIB_VERSION

GLIB_VERSION.MAJOR
// 2

GLIB_VERSION.MINOR
// 74

GLIB_VERSION.PATCH
// 2

GLIB_VERSION..hasGTreeNode()
// true if version of GLib > 2.68

BTree Constructor

Takes one argument - comparator function. Should be like qsort() C function from libc: Required for internal keys comparison operations.

function comparator(a, b) {
  if (a > b) {
    return 1;
  }
  else if (a < b) {
    return -1;
  }
  else {
    return 0;
  }
}

With new keyword

const btree = new BTree(comparator);

As function

const btree = BTree(comparator);

Static methods

BTree.from(comparator, iterable)

Create new instance from some iterable objects.

From Map()

const map = new Map();

map.set(10, "10");
map.set(30, "30");
map.set(80, "80");
map.set(20, "20");
map.set(50, "50");

const btree = BTree.from(comparator, map);

From array of arrays

const array = [
  // [key, value]
  ["10", 10],
  ["30", 30],
  ["20", 20],
  ["50", 50],
  ["40", { number: 40, string: "40" }],
];

const btree = BTree.from(comparator, array);

From array of key-value -able objects

const array = [
  { key: "20", value: 20 },
  { key: "30", value: 30 },
  { key: "10", value: 10 },
  { key: "50", value: 50 },
  { key: "40", value: { number: 40, string: "40" } },
];

const btree = BTree.from(comparator, array);

From mixed array 😜

const array = [
  { key: "20", value: 20 },
  ["30", 30],
  { key: "10", value: 10 },
  ["50", 50],
  { key: "40", value: { number: 40, string: "40" } },
];

const btree = BTree.from(comparator, array);

From key-value -able iterator

function* generator() {
  for (let i = 0; i < 100; i++) {
    yield {
      key: i,
      value: `${i}`
    };
  }
}
 
const btree = BTree.from(comparator, generator());

Public fields

size

Tree nodes count.

const btree = new BTree(comparator);
 
btree.set("50", 50);
btree.set("30", 30);
btree.set("15", 150);

btree.size
// 3

height

Binary tree height.

const btree = new BTree(comparator);
 
btree.set("50", 50);
btree.set("30", 30);
btree.set("15", 150);

btree.height
// 2

Instance methods

set()

As: MDN: Map.prototype.set()

const btree = new BTree(comparator);

const key = "key-10";
const value = { some: "data" };

btree.set(key, value);

get()

As: MDN: Map.prototype.get()

const btree = new BTree(comparator);

const key = "key-10";

const value = btree.get(key);

has()

As: MDN: Map.prototype.has()

const btree = new BTree(comparator);
 
btree.set("50", 50);
btree.set("30", 30);
 
btree.has("30");
// true

delete()

As: MDN: Map.prototype.delete()

clear()

As: MDN: Map.prototype.clear()

forEach()

As: MDN: Map.prototype.forEach()

values()

GLib >= 2.68 only

As: MDN: Map.prototype.values()

keys()

GLib >= 2.68 only

As: MDN: Map.prototype.keys()

entries()

GLib >= 2.68 only

As: MDN: Map.prototype.entries()

[@@iterator]()

GLib >= 2.68 only

As: [MDN: Map.prototype@@iterator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/@@iterator)

map()

Almost like: MDN: Array.prototype.map()

reduce()

Almost like: MDN: Array.prototype.reduce()

filter()

Almost like: MDN: Array.prototype.filter()

forEachReverse()

btree.forEachReverse((val, key, idx, reverseIdx) => {
  // do something
}, cbThis);

last()

GLib >= 2.68 only

btree.last();
// { key, value }

first()

GLib >= 2.68 only

btree.first();
// { key, value }

before()

GLib >= 2.68 only

const btree = {
  { key: 10, value: 100 }
  { key: 30, value: 300 };
  { key: 40, value: 400 };
  { key: 45, value: 450 };
  { key: 50, value: 500 };
};

btree.before(40);
//  { key: 10, value: 100 }
//  { key: 30, value: 300 };
//  { key: 40, value: 400 };

btree.before(40, true);
//  { key: 10, value: 100 }
//  { key: 30, value: 300 };

btree.before(35); // 35 not exists
// Exception

after()

GLib >= 2.68 only

const btree = {
  { key: 10, value: 100 }
  { key: 30, value: 300 }
  { key: 40, value: 400 }
  { key: 45, value: 450 }
  { key: 50, value: 500 }
};

btree.after(40);
//  { key: 40, value: 400 };
//  { key: 45, value: 450 };
//  { key: 50, value: 500 };

btree.after(40, true);
//  { key: 45, value: 450 };
//  { key: 50, value: 500 };

btree.after(35); // 35 not exists
// Exception

between()

GLib >= 2.68 only

const btree = {
  { key: 10, value: 100 }
  { key: 30, value: 300 }
  { key: 40, value: 400 }
  { key: 45, value: 450 }
  { key: 50, value: 500 }
};

btree.between(30, 45);
//  { key: 30, value: 300 }
//  { key: 40, value: 400 }
//  { key: 45, value: 450 }

btree.between(30, 45, true);
//  { key: 40, value: 400 }

btree.between(35, 45); // 35 or 45 not exists
// Exception

btree.between(45, 30);
//  { key: 30, value: 300 }
//  { key: 40, value: 400 }
//  { key: 45, value: 450 }