arena allocator + incremental garbage collector
  • C++ 98.4%
  • CMake 1.6%
Find a file
2024-06-24 23:57:57 -04:00
.github/workflows build: adopt xo-cmake dependency 2023-09-27 09:29:47 -04:00
cmake xo-refcnt: build: streamline using recent xo-camke macros 2024-04-30 10:16:51 -05:00
include/xo xo-refcnt: naked pointer -> Borrow ctor 2024-06-24 23:57:57 -04:00
src xo-refcnt: exclude logging unless XO_INTRUSIVE_PTR_ENABLE_LOGGING 2024-06-14 15:21:49 -04:00
utest Merge branch 'main' of github.com:Rconybea/refcnt 2024-04-30 10:21:25 -05:00
.gitignore .gitignore: + .projectile 2024-06-14 15:23:01 -04:00
CMakeLists.txt xo-refcnt: build: streamline 2024-06-14 15:22:30 -04:00
README.md xo-refcnt: naked pointer -> Borrow ctor 2024-06-24 23:57:57 -04:00

intrusive reference counting

Refcnt is a small shared library supplying intrusive reference counting.

Features

  • base class ref::Refcounted. Application classes opt-in to reference counting by inheriting this class.
  • common base simplifies connecting to common-base-object applications such as python, java etc.

Getting Started

build + install xo-cmake dependency (cmake macros)

see github/Rconybea/xo-cmake

Installs a few cmake ingredients, along with a build assistant for XO projects such as this one.

build + install XO deps

$ xo-build --clone --configure --build --install xo-indentlog

copy refcnt repository locally

$ xo-build --clone xo-refcnt

or equivalently

$ git clone git@github.com:Rconybea/refcnt.git xo-refcnt

build + install

$ xo-build --configure --build --install xo-refcnt

or equivalently:

$ mkdir xo-refcnt/.build
$ cmake -DCMAKE_INSTALL_PREFIX=${PREFIX} -S xo-refcnt -B xo-refcnt/.build
$ cmake --build xo-refcnt/.build
$ cmake --install xo-refcnt/.build

CMAKE_PREFIX_PATH should point to the prefix where xo-indentlog is installed

alternatively, if you're a nix user:

$ git clone git@github.com:rconybea/xo-nix.git
$ ls -d xo-nix
xo-nix
$ cd xo-nix
$ nix-build -A xo-refcnt

build for unit test coverage

$ cmake -DCMAKE_BUILD_TYPE=coverage -DCMAKE_PREFIX_PATH=${PREFIX} -S xo-refcnt -B xo-refcnt/.build-ccov
$ cmake --build xo-refcnt/.build-ccov

LSP support

$ cd xo-refcnt
$ ln -s build/compile_commands.json  # lsp will look for compile_commands.json in the root of the source tree

Examples

1

#include "xo/refcnt/Refcounted.hpp"

using xo::ref::Refcounted;

struct MyObject : public Refcounted {
     static rp<MyObject> make() { return new MyObject(); }

private:
     // intrusively-reference-counted objects should only be heap-allocated
     MyObject() { ... }
};

int main() {
     // create reference-counted instance
     auto x = MyObject::make();
     auto y = x;
     // x,y refer to the same instance.
     x = nullptr;
     // y holds last reference
     y = nullptr;
     // MyObject has been deleted
}

2

To log reference-counting activity

xo::ref::intrusive_ptr_set_debug(true);