TheLartians / IndexSet

A class for manipulating large sets of indices with optimal performance and memory use

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Actions Status Actions Status Actions Status Actions Status Actions Status codecov

IndexSet

A small library to work on large sets of indices with optimal memory and runtime performance. Internally IndexSet is using the BitLens library store indices as a bitmask vector. Operations on index sets are performed on data values, which is many orders of magnitude faster than comparing individual indices.

Usage

You can easily add IndexSet through CPM.cmake.

CPMAddPackage(
  NAME IndexSet
  GITHUB_REPOSITORY TheLartians/IndexSet
  VERSION 0.1
)

API

#include <index_set.h>
#include <iostream>

void example() {
  // create index sets
  auto a = index_set::createIndexSetFromIndices({2, 4, 6});
  auto b = index_set::createIndexSetFromIndex(3);

  // add and remove single indices (slow)
  b.addIndex(6);
  a.removeIndex(4);

  // perform operations on index sets (very fast)
  a.remove(b);
  a.add(b);
  a.intersect(b);

  // iteration
  for (auto index: a.indices()) { 
    std::cout << index << std::endl;
  }

  // printing
  std::cout << a << std::endl;
}

About

A class for manipulating large sets of indices with optimal performance and memory use

License:MIT License


Languages

Language:CMake 64.9%Language:C++ 35.1%