Skip to content

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

License

Notifications You must be signed in to change notification settings

TheLartians/IndexSet

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

25 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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;
}