From b08eee1cc0277ad3316b353077242c9476b755f7 Mon Sep 17 00:00:00 2001 From: SisMaker <1713699517@qq.com> Date: Wed, 26 Feb 2020 00:25:17 +0800 Subject: [PATCH] =?UTF-8?q?nif=20=E7=9B=B8=E5=85=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 - c_src/epqueue/critical_section.h | 62 +++++ c_src/epqueue/epqueue.cc | 257 ++++++++++++++++++ c_src/epqueue/epqueue.h | 14 + c_src/epqueue/epqueue_item.cc | 36 +++ c_src/epqueue/epqueue_item.h | 22 ++ c_src/epqueue/epqueue_nif.cc | 74 +++++ c_src/epqueue/epqueue_nif.h | 25 ++ c_src/epqueue/macros.h | 9 + c_src/epqueue/nif_utils.cc | 27 ++ c_src/epqueue/nif_utils.h | 10 + c_src/epqueue/priority_queue.cc | 148 ++++++++++ c_src/epqueue/priority_queue.h | 41 +++ c_src/epqueue/rebar.config | 7 + c_src/erlNpc | Bin 25623 -> 25639 bytes priv/binary_tools.exp | Bin 0 -> 695 bytes priv/binary_tools.lib | Bin 0 -> 1840 bytes priv/binary_tools.so | Bin 0 -> 21104 bytes priv/bitmap_filter.exp | Bin 0 -> 702 bytes priv/bitmap_filter.lib | Bin 0 -> 1852 bytes priv/bitmap_filter.so | Bin 0 -> 12528 bytes priv/bsn_ext.exp | Bin 0 -> 680 bytes priv/bsn_ext.lib | Bin 0 -> 1702 bytes priv/bsn_ext.so | Bin 0 -> 25952 bytes priv/bsn_int.exp | Bin 0 -> 680 bytes priv/bsn_int.lib | Bin 0 -> 1702 bytes priv/bsn_int.so | Bin 0 -> 24576 bytes priv/btreelru_nif.exp | Bin 0 -> 692 bytes priv/btreelru_nif.lib | Bin 0 -> 1840 bytes priv/btreelru_nif.so | Bin 0 -> 282608 bytes priv/cbase64.exp | Bin 0 -> 695 bytes priv/cbase64.lib | Bin 0 -> 1702 bytes priv/cbase64.so | Bin 0 -> 22832 bytes priv/e2qc_nif.so | Bin 0 -> 61928 bytes priv/enlfq.exp | Bin 0 -> 678 bytes priv/enlfq.lib | Bin 0 -> 1678 bytes priv/enlfq.so | Bin 0 -> 278912 bytes priv/epqueue_nif.exp | Bin 0 -> 692 bytes priv/epqueue_nif.lib | Bin 0 -> 1750 bytes priv/epqueue_nif.so | Bin 0 -> 71056 bytes priv/etsq.exp | Bin 0 -> 674 bytes priv/etsq.lib | Bin 0 -> 1666 bytes priv/etsq.so | Bin 0 -> 197232 bytes priv/granderl.so | Bin 0 -> 14448 bytes priv/hqueue.exp | Bin 0 -> 688 bytes priv/hqueue.lib | Bin 0 -> 1690 bytes priv/hqueue.so | Bin 0 -> 62376 bytes priv/judy.exp | Bin 0 -> 674 bytes priv/judy.lib | Bin 0 -> 1666 bytes priv/judy.so | Bin 0 -> 25952 bytes priv/mqtree.so | Bin 0 -> 97352 bytes priv/native_array_nif.exp | Bin 0 -> 706 bytes priv/native_array_nif.lib | Bin 0 -> 1892 bytes priv/native_array_nif.so | Bin 0 -> 17856 bytes priv/neural.exp | Bin 0 -> 680 bytes priv/neural.lib | Bin 0 -> 1690 bytes priv/neural.so | Bin 0 -> 512088 bytes priv/nif_skiplist.exp | Bin 0 -> 699 bytes priv/nif_skiplist.lib | Bin 0 -> 1840 bytes priv/nif_skiplist.so | Bin 0 -> 39280 bytes priv/zset_nif.dll | Bin 0 -> 136704 bytes priv/zset_nif.exp | Bin 0 -> 682 bytes priv/zset_nif.lib | Bin 0 -> 1714 bytes src/nifSrc/epqueue/benchmarks/benchmark.erl | 68 +++++ src/nifSrc/epqueue/benchmarks/multi_spawn.erl | 24 ++ src/nifSrc/epqueue/src/epqueue.app.src | 29 ++ src/nifSrc/epqueue/src/epqueue.erl | 60 ++++ src/nifSrc/epqueue/src/epqueue_nif.erl | 51 ++++ src/nifSrc/epqueue/test/cover.spec | 8 + .../epqueue/test/integrity_test_SUITE.erl | 69 +++++ 70 files changed, 1041 insertions(+), 1 deletion(-) create mode 100644 c_src/epqueue/critical_section.h create mode 100644 c_src/epqueue/epqueue.cc create mode 100644 c_src/epqueue/epqueue.h create mode 100644 c_src/epqueue/epqueue_item.cc create mode 100644 c_src/epqueue/epqueue_item.h create mode 100644 c_src/epqueue/epqueue_nif.cc create mode 100644 c_src/epqueue/epqueue_nif.h create mode 100644 c_src/epqueue/macros.h create mode 100644 c_src/epqueue/nif_utils.cc create mode 100644 c_src/epqueue/nif_utils.h create mode 100644 c_src/epqueue/priority_queue.cc create mode 100644 c_src/epqueue/priority_queue.h create mode 100644 c_src/epqueue/rebar.config create mode 100644 priv/binary_tools.exp create mode 100644 priv/binary_tools.lib create mode 100644 priv/binary_tools.so create mode 100644 priv/bitmap_filter.exp create mode 100644 priv/bitmap_filter.lib create mode 100644 priv/bitmap_filter.so create mode 100644 priv/bsn_ext.exp create mode 100644 priv/bsn_ext.lib create mode 100644 priv/bsn_ext.so create mode 100644 priv/bsn_int.exp create mode 100644 priv/bsn_int.lib create mode 100644 priv/bsn_int.so create mode 100644 priv/btreelru_nif.exp create mode 100644 priv/btreelru_nif.lib create mode 100644 priv/btreelru_nif.so create mode 100644 priv/cbase64.exp create mode 100644 priv/cbase64.lib create mode 100644 priv/cbase64.so create mode 100644 priv/e2qc_nif.so create mode 100644 priv/enlfq.exp create mode 100644 priv/enlfq.lib create mode 100644 priv/enlfq.so create mode 100644 priv/epqueue_nif.exp create mode 100644 priv/epqueue_nif.lib create mode 100644 priv/epqueue_nif.so create mode 100644 priv/etsq.exp create mode 100644 priv/etsq.lib create mode 100644 priv/etsq.so create mode 100644 priv/granderl.so create mode 100644 priv/hqueue.exp create mode 100644 priv/hqueue.lib create mode 100644 priv/hqueue.so create mode 100644 priv/judy.exp create mode 100644 priv/judy.lib create mode 100644 priv/judy.so create mode 100644 priv/mqtree.so create mode 100644 priv/native_array_nif.exp create mode 100644 priv/native_array_nif.lib create mode 100644 priv/native_array_nif.so create mode 100644 priv/neural.exp create mode 100644 priv/neural.lib create mode 100644 priv/neural.so create mode 100644 priv/nif_skiplist.exp create mode 100644 priv/nif_skiplist.lib create mode 100644 priv/nif_skiplist.so create mode 100644 priv/zset_nif.dll create mode 100644 priv/zset_nif.exp create mode 100644 priv/zset_nif.lib create mode 100644 src/nifSrc/epqueue/benchmarks/benchmark.erl create mode 100644 src/nifSrc/epqueue/benchmarks/multi_spawn.erl create mode 100644 src/nifSrc/epqueue/src/epqueue.app.src create mode 100644 src/nifSrc/epqueue/src/epqueue.erl create mode 100644 src/nifSrc/epqueue/src/epqueue_nif.erl create mode 100644 src/nifSrc/epqueue/test/cover.spec create mode 100644 src/nifSrc/epqueue/test/integrity_test_SUITE.erl diff --git a/.gitignore b/.gitignore index 80a5baa..0ad44f1 100644 --- a/.gitignore +++ b/.gitignore @@ -16,7 +16,6 @@ deps _build/ _checkouts/ rebar.lock -priv # idea .idea diff --git a/c_src/epqueue/critical_section.h b/c_src/epqueue/critical_section.h new file mode 100644 index 0000000..334da0b --- /dev/null +++ b/c_src/epqueue/critical_section.h @@ -0,0 +1,62 @@ +#ifndef C_SRC_CRITICAL_SECTION_H_ +#define C_SRC_CRITICAL_SECTION_H_ + +#include "erl_nif.h" +#include "macros.h" + +class CriticalSection +{ +public: + + CriticalSection() { } + virtual ~CriticalSection() {} + + virtual void Enter() = 0; + virtual void Leave() = 0; +}; + +class NullCriticalSection : public CriticalSection +{ +public: + + NullCriticalSection() {} + ~NullCriticalSection() {} + + void Enter() override {} + void Leave() override {} + +private: + + DISALLOW_COPY_AND_ASSIGN(NullCriticalSection); +}; + +class EnifCriticalSection : public CriticalSection +{ +public: + + EnifCriticalSection() { mutex_ = enif_mutex_create(NULL);} + ~EnifCriticalSection() {enif_mutex_destroy(mutex_);} + + void Enter() override {enif_mutex_lock(mutex_);} + void Leave() override {enif_mutex_unlock(mutex_);} + +private: + + ErlNifMutex *mutex_; + DISALLOW_COPY_AND_ASSIGN(EnifCriticalSection); +}; + +class CritScope +{ +public: + + explicit CritScope(CriticalSection *pp) : pcrit_(pp) { pcrit_->Enter();} + ~CritScope() {pcrit_->Leave();} + +private: + + CriticalSection *pcrit_; + DISALLOW_COPY_AND_ASSIGN(CritScope); +}; + +#endif // C_SRC_CRITICAL_SECTION_H_ diff --git a/c_src/epqueue/epqueue.cc b/c_src/epqueue/epqueue.cc new file mode 100644 index 0000000..d7fe536 --- /dev/null +++ b/c_src/epqueue/epqueue.cc @@ -0,0 +1,257 @@ +#include "epqueue.h" +#include "epqueue_item.h" +#include "epqueue_nif.h" +#include "priority_queue.h" +#include "critical_section.h" +#include "nif_utils.h" +#include "macros.h" + +#include + +struct epqueue +{ + CriticalSection* crit; + PriorityQueue* queue; + ERL_NIF_TERM owner_pid; +}; + +void nif_epqueue_free(ErlNifEnv* env, void* obj) +{ + UNUSED(env); + epqueue* qinst = static_cast(obj); + + if(qinst->queue) + delete qinst->queue; + + if(qinst->crit) + delete qinst->crit; +} + +bool internal_insert(epqueue* q, queue_item* item) +{ + CritScope ss(q->crit); + return q->queue->insert(item); +} + +bool internal_remove(epqueue* q, queue_item* item) +{ + CritScope ss(q->crit); + + if(item->heap_index == -1) + return false; + + return q->queue->remove(item, item->heap_index); +} + +queue_item* internal_pop(epqueue* q) +{ + CritScope ss(q->crit); + return static_cast(q->queue->pop()); +} + +bool is_owner(ErlNifEnv* env, epqueue* q) +{ + if(q->owner_pid == 0) + return true; + + ErlNifPid self; + + if(enif_self(env, &self) && !enif_is_identical(q->owner_pid, enif_make_pid(env, &self))) + return false; + + return true; +} + +ERL_NIF_TERM nif_epqueue_new(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]) +{ + UNUSED(argc); + + epqueue_data* data = static_cast(enif_priv_data(env)); + + if(!enif_is_list(env, argv[0])) + return enif_make_badarg(env); + + bool use_lock = false; + + ERL_NIF_TERM settings_list = argv[0]; + ERL_NIF_TERM head; + + while(enif_get_list_cell(env, settings_list, &head, &settings_list)) + { + const ERL_NIF_TERM *items; + int arity; + + if(!enif_get_tuple(env, head, &arity, &items) || arity != 2) + return enif_make_badarg(env); + + if(enif_is_identical(items[0], ATOMS.atomGlobalLock)) + use_lock = enif_is_identical(items[1], ATOMS.atomTrue); + else + return enif_make_badarg(env); + } + + epqueue* qinst = static_cast(enif_alloc_resource(data->resPQueueInstance, sizeof(epqueue))); + + if(qinst == NULL) + return make_error(env, "enif_alloc_resource failed"); + + memset(qinst, 0, sizeof(epqueue)); + + if(use_lock) + { + qinst->crit = new EnifCriticalSection(); + qinst->owner_pid = 0; + } + else + { + qinst->crit = new NullCriticalSection(); + ErlNifPid self; + enif_self(env, &self); + qinst->owner_pid = enif_make_pid(env, &self); + } + + qinst->queue = new PriorityQueue(epqueue_item_less, epqueue_item_update_pos, enif_release_resource); + + ERL_NIF_TERM term = enif_make_resource(env, qinst); + enif_release_resource(qinst); + return enif_make_tuple2(env, ATOMS.atomOk, term); +} + +ERL_NIF_TERM nif_epqueue_size(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]) +{ + UNUSED(argc); + + epqueue_data* data = static_cast(enif_priv_data(env)); + + epqueue* inst = NULL; + + if(!enif_get_resource(env, argv[0], data->resPQueueInstance, reinterpret_cast(&inst))) + return enif_make_badarg(env); + + if(!is_owner(env, inst)) + return enif_make_badarg(env); + + CritScope ss(inst->crit); + return enif_make_int(env, inst->queue->size()); +} + +ERL_NIF_TERM nif_epqueue_insert(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]) +{ + UNUSED(argc); + + epqueue_data* data = static_cast(enif_priv_data(env)); + + epqueue* inst; + ErlNifBinary data_bin; + long priority; + + if(!enif_get_resource(env, argv[0], data->resPQueueInstance, reinterpret_cast(&inst))) + return enif_make_badarg(env); + + if(!is_owner(env, inst)) + return enif_make_badarg(env); + + if(!enif_get_long(env, argv[2], &priority)) + return enif_make_badarg(env); + + if(!enif_term_to_binary(env, argv[1], &data_bin)) + return enif_make_badarg(env); + + queue_item* item = epqueue_item_new(data, data_bin, priority); + + if(item == NULL) + { + enif_release_binary(&data_bin); + return make_error(env, "failed to allocate a new item"); + } + + if(!internal_insert(inst, item)) + { + enif_release_resource(&item); + return make_error(env, "failed to insert new item in the queue"); + } + + ERL_NIF_TERM ref = enif_make_resource(env, item); + return enif_make_tuple2(env, ATOMS.atomOk, ref); +} + +ERL_NIF_TERM nif_epqueue_remove(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]) +{ + UNUSED(argc); + + epqueue_data* data = static_cast(enif_priv_data(env)); + epqueue* inst = NULL; + queue_item* item = NULL; + + if(!enif_get_resource(env, argv[0], data->resPQueueInstance, reinterpret_cast(&inst))) + return enif_make_badarg(env); + + if(!is_owner(env, inst)) + return enif_make_badarg(env); + + if(!enif_get_resource(env, argv[1], data->resPQueueItem, reinterpret_cast(&item))) + return enif_make_badarg(env); + + if(!internal_remove(inst, item)) + return ATOMS.atomFalse; + + enif_release_resource(&item); + return ATOMS.atomTrue; +} + +ERL_NIF_TERM nif_epqueue_pop(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]) +{ + UNUSED(argc); + + epqueue_data* data = static_cast(enif_priv_data(env)); + epqueue* inst = NULL; + + if(!enif_get_resource(env, argv[0], data->resPQueueInstance, reinterpret_cast(&inst))) + return enif_make_badarg(env); + + if(!is_owner(env, inst)) + return enif_make_badarg(env); + + queue_item* item = internal_pop(inst); + + if(item == NULL) + return ATOMS.atomUndefined; + + ERL_NIF_TERM bin_term; + + if(enif_binary_to_term(env, item->data.data, item->data.size, &bin_term, 0) == 0) + { + enif_release_resource(item); + return make_error(env, "failed to decode data"); + } + + enif_release_resource(item); + return enif_make_tuple3(env, ATOMS.atomOk, bin_term, enif_make_long(env, item->priority)); +} + +ERL_NIF_TERM nif_epqueue_peek(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]) +{ + UNUSED(argc); + + epqueue_data* data = static_cast(enif_priv_data(env)); + epqueue* inst = NULL; + + if(!enif_get_resource(env, argv[0], data->resPQueueInstance, reinterpret_cast(&inst))) + return enif_make_badarg(env); + + if(!is_owner(env, inst)) + return enif_make_badarg(env); + + CritScope ss(inst->crit); + queue_item* item = static_cast(inst->queue->peek()); + + if(item == NULL) + return ATOMS.atomUndefined; + + ERL_NIF_TERM bin_term; + + if(enif_binary_to_term(env, item->data.data, item->data.size, &bin_term, 0) == 0) + return make_error(env, "failed to decode data"); + + return enif_make_tuple3(env, ATOMS.atomOk, bin_term, enif_make_int64(env, item->priority)); +} diff --git a/c_src/epqueue/epqueue.h b/c_src/epqueue/epqueue.h new file mode 100644 index 0000000..8efce7b --- /dev/null +++ b/c_src/epqueue/epqueue.h @@ -0,0 +1,14 @@ +#ifndef C_SRC_EPQUEUE_H_ +#define C_SRC_EPQUEUE_H_ + +#include "erl_nif.h" + +void nif_epqueue_free(ErlNifEnv* env, void* obj); +ERL_NIF_TERM nif_epqueue_new(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]); +ERL_NIF_TERM nif_epqueue_size(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]); +ERL_NIF_TERM nif_epqueue_insert(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]); +ERL_NIF_TERM nif_epqueue_remove(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]); +ERL_NIF_TERM nif_epqueue_pop(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]); +ERL_NIF_TERM nif_epqueue_peek(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]); + +#endif // C_SRC_EPQUEUE_H_ diff --git a/c_src/epqueue/epqueue_item.cc b/c_src/epqueue/epqueue_item.cc new file mode 100644 index 0000000..614cc35 --- /dev/null +++ b/c_src/epqueue/epqueue_item.cc @@ -0,0 +1,36 @@ +#include "epqueue_item.h" +#include "epqueue_nif.h" +#include "macros.h" + +bool epqueue_item_less(void* ax, void* bx) +{ + queue_item* a = static_cast(ax); + queue_item* b = static_cast(bx); + return a->priority < b->priority; +} + +void epqueue_item_update_pos(void* ax, int32_t pos) +{ + queue_item* a = static_cast(ax); + a->heap_index = pos; +} + +void epqueue_item_free(ErlNifEnv* env, void* obj) +{ + UNUSED(env); + queue_item* item = static_cast(obj); + enif_release_binary(&item->data); +} + +queue_item* epqueue_item_new(const epqueue_data* data, const ErlNifBinary& bin, uint64_t priority) +{ + queue_item* item = static_cast(enif_alloc_resource(data->resPQueueItem, sizeof(queue_item))); + + if(item == NULL) + return NULL; + + item->heap_index = -1; + item->priority = priority; + item->data = bin; + return item; +} diff --git a/c_src/epqueue/epqueue_item.h b/c_src/epqueue/epqueue_item.h new file mode 100644 index 0000000..86568af --- /dev/null +++ b/c_src/epqueue/epqueue_item.h @@ -0,0 +1,22 @@ +#ifndef C_SRC_EPQUEUE_ITEM_H_ +#define C_SRC_EPQUEUE_ITEM_H_ + +#include "erl_nif.h" +#include + +struct epqueue_data; + +struct queue_item +{ + int32_t heap_index; + uint64_t priority; + ErlNifBinary data; +}; + +void epqueue_item_update_pos(void* ax, int32_t pos); +bool epqueue_item_less(void* ax, void* bx); + +queue_item* epqueue_item_new(const epqueue_data* data, const ErlNifBinary& bin, uint64_t priority); +void epqueue_item_free(ErlNifEnv* env, void* obj); + +#endif // C_SRC_EPQUEUE_ITEM_H_ diff --git a/c_src/epqueue/epqueue_nif.cc b/c_src/epqueue/epqueue_nif.cc new file mode 100644 index 0000000..1220a21 --- /dev/null +++ b/c_src/epqueue/epqueue_nif.cc @@ -0,0 +1,74 @@ +#include /* memcmp,strlen */ +#include "epqueue_nif.h" +#include "epqueue.h" +#include "epqueue_item.h" +#include "nif_utils.h" +#include "macros.h" + +const char kAtomOk[] = "ok"; +const char kAtomError[] = "error"; +const char kAtomTrue[] = "true"; +const char kAtomFalse[] = "false"; +const char kAtomUndefined[] = "undefined"; +const char kAtomGlobalLock[] = "global_lock"; + +atoms ATOMS; + +void open_resources(ErlNifEnv* env, epqueue_data* data) +{ + ErlNifResourceFlags flags = static_cast(ERL_NIF_RT_CREATE | ERL_NIF_RT_TAKEOVER); + data->resPQueueInstance = enif_open_resource_type(env, NULL, "pqueue_instance", nif_epqueue_free, flags, NULL); + data->resPQueueItem = enif_open_resource_type(env, NULL, "pqueue_item", epqueue_item_free, flags, NULL); +} + +int on_nif_load(ErlNifEnv* env, void** priv_data, ERL_NIF_TERM load_info) +{ + UNUSED(load_info); + + ATOMS.atomOk = make_atom(env, kAtomOk); + ATOMS.atomError = make_atom(env, kAtomError); + ATOMS.atomTrue = make_atom(env, kAtomTrue); + ATOMS.atomFalse = make_atom(env, kAtomFalse); + ATOMS.atomUndefined = make_atom(env, kAtomUndefined); + + ATOMS.atomGlobalLock = make_atom(env, kAtomGlobalLock); + + epqueue_data* data = static_cast(enif_alloc(sizeof(epqueue_data))); + open_resources(env, data); + + *priv_data = data; + return 0; +} + +void on_nif_unload(ErlNifEnv* env, void* priv_data) +{ + UNUSED(env); + + epqueue_data* data = static_cast(priv_data); + enif_free(data); +} + +int on_nif_upgrade(ErlNifEnv* env, void** priv, void** old_priv, ERL_NIF_TERM info) +{ + UNUSED(old_priv); + UNUSED(info); + + epqueue_data* data = static_cast(enif_alloc(sizeof(epqueue_data))); + open_resources(env, data); + + *priv = data; + return 0; +} + +static ErlNifFunc nif_funcs[] = +{ + {"new", 1, nif_epqueue_new}, + {"insert", 3, nif_epqueue_insert}, + {"remove", 2, nif_epqueue_remove}, + {"pop", 1, nif_epqueue_pop}, + {"peek", 1, nif_epqueue_peek}, + {"size", 1, nif_epqueue_size} +}; + +ERL_NIF_INIT(epqueue_nif, nif_funcs, on_nif_load, NULL, on_nif_upgrade, on_nif_unload) + diff --git a/c_src/epqueue/epqueue_nif.h b/c_src/epqueue/epqueue_nif.h new file mode 100644 index 0000000..202138a --- /dev/null +++ b/c_src/epqueue/epqueue_nif.h @@ -0,0 +1,25 @@ +#ifndef C_SRC_EPQUEUE_NIF_H_ +#define C_SRC_EPQUEUE_NIF_H_ + +#include "erl_nif.h" + +struct atoms +{ + ERL_NIF_TERM atomOk; + ERL_NIF_TERM atomError; + ERL_NIF_TERM atomTrue; + ERL_NIF_TERM atomFalse; + ERL_NIF_TERM atomUndefined; + + ERL_NIF_TERM atomGlobalLock; +}; + +struct epqueue_data +{ + ErlNifResourceType* resPQueueInstance; + ErlNifResourceType* resPQueueItem; +}; + +extern atoms ATOMS; + +#endif // C_SRC_EPQUEUE_NIF_H_ diff --git a/c_src/epqueue/macros.h b/c_src/epqueue/macros.h new file mode 100644 index 0000000..8576331 --- /dev/null +++ b/c_src/epqueue/macros.h @@ -0,0 +1,9 @@ +#ifndef C_SRC_MACROS_H_ +#define C_SRC_MACROS_H_ + +#define UNUSED(expr) do { (void)(expr); } while (0) + +#define DISALLOW_ASSIGN(TypeName) void operator=(const TypeName&) +#define DISALLOW_COPY_AND_ASSIGN(TypeName) TypeName(const TypeName&); DISALLOW_ASSIGN(TypeName) + +#endif // C_SRC_MACROS_H_ diff --git a/c_src/epqueue/nif_utils.cc b/c_src/epqueue/nif_utils.cc new file mode 100644 index 0000000..7581b96 --- /dev/null +++ b/c_src/epqueue/nif_utils.cc @@ -0,0 +1,27 @@ +#include "nif_utils.h" +#include "epqueue_nif.h" + +#include + +ERL_NIF_TERM make_atom(ErlNifEnv* env, const char* name) +{ + ERL_NIF_TERM ret; + + if(enif_make_existing_atom(env, name, &ret, ERL_NIF_LATIN1)) + return ret; + + return enif_make_atom(env, name); +} + +ERL_NIF_TERM make_binary(ErlNifEnv* env, const char* buff, size_t length) +{ + ERL_NIF_TERM term; + unsigned char *destination_buffer = enif_make_new_binary(env, length, &term); + memcpy(destination_buffer, buff, length); + return term; +} + +ERL_NIF_TERM make_error(ErlNifEnv* env, const char* error) +{ + return enif_make_tuple2(env, ATOMS.atomError, make_binary(env, error, strlen(error))); +} diff --git a/c_src/epqueue/nif_utils.h b/c_src/epqueue/nif_utils.h new file mode 100644 index 0000000..541a3aa --- /dev/null +++ b/c_src/epqueue/nif_utils.h @@ -0,0 +1,10 @@ +#ifndef C_SRC_NIF_UTILS_H_ +#define C_SRC_NIF_UTILS_H_ + +#include "erl_nif.h" + +ERL_NIF_TERM make_atom(ErlNifEnv* env, const char* name); +ERL_NIF_TERM make_error(ErlNifEnv* env, const char* error); +ERL_NIF_TERM make_binary(ErlNifEnv* env, const char* buff, size_t length); + +#endif // C_SRC_NIF_UTILS_H_ diff --git a/c_src/epqueue/priority_queue.cc b/c_src/epqueue/priority_queue.cc new file mode 100644 index 0000000..e6c4e95 --- /dev/null +++ b/c_src/epqueue/priority_queue.cc @@ -0,0 +1,148 @@ +#include "priority_queue.h" +#include "erl_nif.h" +#include +#include + +// Algorithm described at : http://robin-thomas.github.io/min-heap/ + +#define left(x) 2 * x + 1 +#define right(x) 2 * x + 2 +#define parent(x) (x - 1) / 2 + +#define less(a, b) less_(heap_[a], heap_[b]) + +PriorityQueue::PriorityQueue(LessFun ls, UpdatePositionFun upd, DestroyElementFun dtor) : + capacity_(0), + length_(0), + heap_(NULL), + less_(ls), + update_pos_fun_(upd), + item_dtor_(dtor) { } + +PriorityQueue::~PriorityQueue() +{ + if(heap_) + { + for(int i = 0; i < length_; i++) + item_dtor_(heap_[i]); + + enif_free(heap_); + } +} + +bool PriorityQueue::insert(void* item) +{ + int pos; + + if (length_ == capacity_) + { + int new_capacity = (length_+1) * 2; + void** new_heap = reinterpret_cast(enif_alloc(sizeof(void*) * new_capacity)); + + if (!new_heap) + return false; + + memcpy(new_heap, heap_, sizeof(void*)*length_); + enif_free(heap_); + heap_ = new_heap; + capacity_ = new_capacity; + } + + pos = (length_)++; + set(pos, item); + bubble_down(pos); + return true; +} + +bool PriorityQueue::remove(void* item, int pos) +{ + if (pos >= length_) + return false; + + if(heap_[pos] != item) + return false; + + return remove(pos) == item; +} + +void* PriorityQueue::remove(int pos) +{ + if (pos >= length_) + return NULL; + + void* item = heap_[pos]; + length_--; + + int ls = less(pos, length_); + + set(pos, heap_[length_]); + + if(ls) + bubble_up(pos); + else + bubble_down(pos); + + // todo: resize down the heap in case we have a lot of empty slots + + update_pos_fun_(item, -1); + return item; +} + +void* PriorityQueue::peek() +{ + if(length_ == 0) + return NULL; + + return heap_[0]; +} + +// private + +void PriorityQueue::set(int pos, void* item) +{ + heap_[pos] = item; + update_pos_fun_(item, pos); +} + +void PriorityQueue::pos_swap(int pos1, int pos2) +{ + void* tmp = heap_[pos1]; + set(pos1, heap_[pos2]); + set(pos2, tmp); +} + +void PriorityQueue::bubble_down(int pos) +{ + while(true) + { + int parent = parent(pos); + + if (pos == 0 || less(parent, pos)) + return; + + pos_swap(pos, parent); + pos = parent; + } +} + +void PriorityQueue::bubble_up(int pos) +{ + while (true) + { + int left = left(pos); + int right = right(pos); + int smallest = pos; + + if (left < length_ && less(left, smallest)) + smallest = left; + + if (right < length_ && less(right, smallest)) + smallest = right; + + if (smallest == pos) + return; + + pos_swap(pos, smallest); + pos = smallest; + } +} diff --git a/c_src/epqueue/priority_queue.h b/c_src/epqueue/priority_queue.h new file mode 100644 index 0000000..c9ae375 --- /dev/null +++ b/c_src/epqueue/priority_queue.h @@ -0,0 +1,41 @@ +#ifndef C_SRC_PRIORITY_QUEUE_H_ +#define C_SRC_PRIORITY_QUEUE_H_ + +#include "macros.h" + +typedef bool(*LessFun)(void*, void*); +typedef void(*UpdatePositionFun)(void*, int); +typedef void(*DestroyElementFun)(void*); + +class PriorityQueue +{ +public: + + PriorityQueue(LessFun ls, UpdatePositionFun upd, DestroyElementFun dtor); + ~PriorityQueue(); + + bool insert(void* item); + bool remove(void* item, int pos); + void* remove(int pos); + void* pop() {return remove(0);} + void* peek(); + int size() const { return length_;} + +private: + + inline void set(int pos, void* item); + inline void pos_swap(int pos1, int pos2); + void bubble_down(int pos); + void bubble_up(int pos); + + int capacity_; + int length_; + void** heap_; + LessFun less_; + UpdatePositionFun update_pos_fun_; + DestroyElementFun item_dtor_; + + DISALLOW_COPY_AND_ASSIGN(PriorityQueue); +}; + +#endif // C_SRC_PRIORITY_QUEUE_H_ diff --git a/c_src/epqueue/rebar.config b/c_src/epqueue/rebar.config new file mode 100644 index 0000000..cccb5e8 --- /dev/null +++ b/c_src/epqueue/rebar.config @@ -0,0 +1,7 @@ +{port_specs, [ + {"../../priv/epqueue_nif.so", ["*.cc"]} +]}. + + + + diff --git a/c_src/erlNpc b/c_src/erlNpc index 369cceca994ecb4278ef7585c61028c879ae901a..4dc4f03d02669c5f1bd8dfead416af5e4eea5031 100644 GIT binary patch delta 4752 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 g1}%SZS1&blbw*UYD delta 4744 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 LP~l%&{C)B-=6$@> diff --git a/priv/binary_tools.exp b/priv/binary_tools.exp new file mode 100644 index 0000000000000000000000000000000000000000..4fdbf16018614f83801759bd5b8703f78854eb1a GIT binary patch literal 695 zcmY*X%}yIJ5S}E^6jV_nE*yGTp&Wu*S(`LMDFP{K0D*u|H7zGgk=b=3tIj&IogexD zyaY#HfJfm$xbOrpv&jY+d1k)(cD!THIKIilGf56$6=uR@EWDTp=+01M)cZO00euq} zi{;g*U+&Cl*uZ~0X2IMyVf`mTDv^D{G{`jL-uo++2z%Z2#%RZ4tszmpu1b`LPnfub zT7WNTms1p=r85(MYQh;wTQ*HAXh>NjB#8;tH%6YQ8^vLSJ*2R zaqj~qrm_Z`aGL;}tH>H>dOoQ9-VV-A+NW>_`z44bF&yslzVaK6BC?wv+HP|`GGa$r2C_X7OFR`dHz9c_Cr`NpllWN- z7(N`pZ~_6nl+>isbd_KTkAcAr$moG_ptJ*nfRkQkN@7W(iV;jo1jx7q#Lu7t%s|?K z!QcQ?of%Y^K?ulT0on&s2NHK+P&mK@q{SIHL0kp_bZ@FN2n(%y20npjA z^B5Wb|3}sb)W868CldqA_YMpUV3%jWM8N)p*alT&0#XCi!~j=giVy*btAYq90GZCf zU^<_?>-VSAyJ%J@uqOq~Ih{>M@21f>O^a z7zav&QV;D?1u?NK3v>z2qKxF6XJm;el|VT!iF3`ZM?f1OagIIg@Z>yGSa5-IE-2?A z0|y2NSk5zniG$SLf^ncUNF8m$n3(WY0=j~_=@VY?D}ZV*Q0`4>^J?ijF9r553!+NF G$o2rW+E%{+ literal 0 HcmV?d00001 diff --git a/priv/binary_tools.so b/priv/binary_tools.so new file mode 100644 index 0000000000000000000000000000000000000000..57345daa683d216a48c3a6b984a223292c49d300 GIT binary patch literal 21104 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 JE&aW({{an9TyOvY literal 0 HcmV?d00001 diff --git a/priv/bitmap_filter.so b/priv/bitmap_filter.so new file mode 100644 index 0000000000000000000000000000000000000000..8d26c84ffccd0462a8383a90530322b79342a43f GIT binary patch literal 12528 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 literal 0 HcmV?d00001 diff --git a/priv/bsn_ext.exp b/priv/bsn_ext.exp new file mode 100644 index 0000000000000000000000000000000000000000..d68de84ee1eba6c062a7e2e12ec96594f2520b36 GIT binary patch literal 680 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 literal 0 HcmV?d00001 diff --git a/priv/bsn_int.exp b/priv/bsn_int.exp new file mode 100644 index 0000000000000000000000000000000000000000..dcee3536c1e29d3e5f5a46dd2f60fb2b3c0b00be GIT binary patch literal 680 zcmY*X&2AGh5T0aPQmP7?8wZf~kV7geYZIa&nAJ)CcqZ(`_M|IezIogHY$dS8u1HFa5qEZ!(7~?o&EvLL_DCT2&P4B7|T)TET zxjds6beR#I$Ve-rhSsnD*zvy}^^WNey{}RdANUf*`tS>F6WH--3v!(&_uMz(aCs4lvU*2kHZ$*I-t4^JoA+jJ&$M>h8?)wptGC^o z?3J}Np_s|yl;T!R02ctm2eJo1?g$tX+@-87EG^niIrn(^kzHGAF4}T!*ORW-g_Mnz zdi_rWyi^w9eDldlV_wcxn^jujZf#4?U8nVK7ZEeC=cU;59J%frz(E!`B0&rVP+%Z~ z9DP~Z^$Zx&TusHMFc+N7%>d57qF~LvG0v6xb2YXWfLKFX%dHna$lO(oW_-r_+u{yQ+OBqkZy zG@dDeQWM2Y!0jtjiWOb4tES^;@O$s=#}9#X?BeN};)GMtn8=ipR&u7i(So9!Dd&;_ z{haG9aw7Fo88~VW;yZ%t>&3fkKfcli;US+MwZGI?MF)!Olj|$l1ca`yvevWR7cD5t ncKNTf#r@oP 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 literal 0 HcmV?d00001 diff --git a/priv/btreelru_nif.exp b/priv/btreelru_nif.exp new file mode 100644 index 0000000000000000000000000000000000000000..bf278d4d5fc43b7c50d604e935702b219c739555 GIT binary patch literal 692 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 literal 0 HcmV?d00001 diff --git a/priv/cbase64.exp b/priv/cbase64.exp new file mode 100644 index 0000000000000000000000000000000000000000..d5e06834d5a295eabf1bc7890de740c21ea6c1e7 GIT binary patch literal 695 zcmY*X!A=`75S=8Yloqwg2@W9bA%`Hq+N4nw5JeFb+Nux`p`0wC&91Yux>-lI0}&s< zPw)$T44=_!zo0yCvVo2~GjHCGJ>D5d_eJ{Wq(JnZrou!N*kBgGeS=2O#~Jk&zJtXg z(I3av-i)Rdobe|QX1+t^0|#A+{1ehB*PQ#`hyB2aR+B|ZLa7{F%T!vTWhA|UmS_!j zAwwRlyHAO#u!|Y0!7gQJ3-(=x+`hli4=B7&g$f`s#<50P-tfGjn2czX_9~0m_T+Lh z`ADnukP@BBP%EPb)~j7?cqc!)Khcvf6$)=7I@;y2w1@ z{8A|tIqd<~o2-G={#CL{b^!40TH zoq-4}^ZhdVHf3Hv2e-LIuLobu7<1PRhA7ZLG|kcR=mr6~VdTs-%MB%GZqGDcmOp2z TT^~}X{W&wgDi|ll>**x(V zP>BVxcV+7gLSkV-VqhsN6A}X|@7Z^@BWg%0IP32HxOcwyy?gKO`n}d(yK~>TV-B|4 zvxBmdW+XFPs!DFn0B{b_0w8w?u(Cb>-P~eBYR#>JkOKsfd(ArfMXKuu@DM0 z=*ZKTqg~H{Aqb%mJs)W1jtg#|Wdj-*{xs&SE+6Y9#2^)}2So#-Sku!xBi zs2jLkI8V9{;S6vIS8>ptT=d&}z5U*1-@NJEG8^^gf}9^9ycs*fozg4h3N%vAkuJ3h z>~?QwmwY|wYT60;m#iRDI#TWmvJHgpc9bRr7wsc$EViLVh;1r~hV>>7vhm-6IVmyG z;m~-d1jgSu#Id<{%O!1 z0mGc@HF6^JQW-gFcauAU>+3=N<@e9DL3GHcN9_;wRZ)TB`sDgbHygI9FH7m!?xPYU oWxIbK-C-k}nUJGK){5U1emA&Cz2M#3&ZnsmWj?vqQ$L3B3s!G4jsO4v literal 0 HcmV?d00001 diff --git a/priv/cbase64.so b/priv/cbase64.so new file mode 100644 index 0000000000000000000000000000000000000000..02c17f1986d7dadd3f8ac798fb2bebf081265c10 GIT binary patch literal 22832 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 literal 0 HcmV?d00001 diff --git a/priv/e2qc_nif.so b/priv/e2qc_nif.so new file mode 100644 index 0000000000000000000000000000000000000000..411716cfbf00c74cfa6151c645c90b78c84dab4d GIT binary patch literal 61928 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 K423hA*8c-JCJ`wB literal 0 HcmV?d00001 diff --git a/priv/enlfq.exp b/priv/enlfq.exp new file mode 100644 index 0000000000000000000000000000000000000000..82ec3c9575e84c1935b4ea96f7fcf12ece60c033 GIT binary patch literal 678 zcmY*X%}N6?5T3UFR1vi|K@WTAp+yPXT1u4)#adC+DpoxOWZg}dV7jT<^amfnm+;`- zr|~H~3f={s>~^aT`R3>AWG0z7Xq>%Ao;5D4xFJLmIbZ<34OcJvWb+-b_X$%diH| z0l*n|l?-K9TZPM_b$Z-Bffv}zfjjb`wM%`jn?eSRG9|7x7a?_TL*>S$fsGj)?9vM* zedYA5LoQfo6~?t{k^a`b;o-m$R!0v!E@{~=?a)@BnZhTAjNUZqm6TZbtb=Z;Ldtk* z+ocM<;{iRAp&nN&)Ijjyo|ulX0=1kO^mK>~SN8gZd-#V^W*-@7beW@xZLi{>V&?Dm z&E*XI-E%r(!pFAL!v81*;6Lpwoyt@pEA>@B4Z>S G?feHZ6okG2 literal 0 HcmV?d00001 diff --git a/priv/enlfq.lib b/priv/enlfq.lib new file mode 100644 index 0000000000000000000000000000000000000000..3ed51cd592b43eacfd3d05ff521f031327e30b86 GIT binary patch literal 1678 zcmcIl%}*0S6#wnEf;7f7!hytS)`Uc9VugNaO$aWCi4CQYQW9@N=~CFFYyoS+32vPH z54e!{M{wmzxR}UE4@Nn8^=|OJ*_mw{S#1r>X6AkF&UqGj zvX;gaGoDH*ZaD_v24L(0kwYMQ2J|I(3Xz{%m@k#Z%&WzhrTjv9z9d$?dTk3r6qgEx zKh4;acHdfly;PhPGgIX$@^?2jh3D3U>$yz?OwUoLTTw?T>|Fymi~wgOB>H3;Fkm7| zPlR^uIsULfL-LZ@CY^d+CGxMTXL8w~>dt-yJKqwY`zeQ;lnalfv%2zbZDi4xfEUEP z*Mg!p;?qgjsWdAiDQy}e=9K1FrJ$0)#@Mm)d#cpnqy9xx`?21Jb!-xiV}L~r1W7%_ zV7#9+AEh3+jbR*kcjnyccH?cM*0dg#My*1=IIHX(aI!c~8T^o?0u4|1<%-==%WY~vZLg15aX;^=s7d80nz%wN=F;S%T zKY$YgkXVptmk3E^a%~7PasI|UIg){Kc$Xu@@lCgaBDjICqK7N2W5uQ)+HW%7_r|>Z7zcV literal 0 HcmV?d00001 diff --git a/priv/enlfq.so b/priv/enlfq.so new file mode 100644 index 0000000000000000000000000000000000000000..9a2f05c8762001e1e43069cbb8e6cf197671215c GIT binary patch literal 278912 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 j;Rp=24{a%G0r_kjm?99zp=#MD!F;m z%M^N?LN_V&1ckm_p(iTzc!j=Dq2Hj;vlaT43cWy~V?{8ILWMrppyD?`6?&mUFH`9K z75XNH?pgKm8=wk(yCPqq(A79rsnFLc^1BpzkV3Cg=rs5Aqeh|U=|sRh@%$1Ai5goM=11FEFu1h zR_OAlCYWJU=pjOs|BX}V6BK%aLVre~Co1$S6#7Di{**$`R_H?%dVxYmf@2(o3jI!l z3jbH=ofUeSLhqu`H!1Yz6neQrAE3}H6uSJW80JTrdbraOQDA=^zI5hLZNR{=pz(*qC$^W=z0oEY@0$Ks>sJFbo``?aU>}8 z>kX==B`WlX6#7DiK2@P-EA%xAy+ENCEA&Ez{-i=*tI#(q^fHA$O`&g6=oc#Va)rK7 zp;st${kM3CU8&IfD)PG&`aFeRrO;<8^csbJi$bqe=miSBPNCCp{OCu$LdQ?u7>8S- zM;lb+R|@?mh2E^tCn|L9a|>hS|2Hf2V1?dOp@%8-aE0DOq2I31Eed_3LJwEy_bBuT zg?_O@AED4EDfDQC-bXt48_F1;KzIkj3mG3pI8DEXY{sJq4<>_#(n-Dm2tGKA-T*39n*&4&hf2Udi|j!mlK}obf4yUqyHs;}Zy{ z6rrJz@lk|dO?WorQG`=yZAfIiAK|nVHN-J~IpO^Xk7m3l;r$7ZVEjD7Db;JRFdjnq zK*GZqHxo`ve}l&OiN6BBhVZ77JpP175MIyt*Mw85-%!i=XM{%)Ud8x_gww5XLnY&H z6HcjbLpkHG6HX~eLmA^Q6HcM7p^)+2gbyb?oAKueA3=B`<4+JilJGdjA0d1c;n9rW zPdKHd4H1mrL--iNEsWnm_*lZj7{871YYEpFUq<*i!kd2O@h3c*@Os7<5l*41p_cLa zgij#6it#yw(~{ay$@mPyX^CnmXM76b6w(^X7@t7+WWoy>A4T|egl97zMYxUdM8^9O z9z%E>LZYG>kyatW&6U%^8=x%5_ z!Q)SO9O3nhe@*xegx50u8R4|VG*mJEA>owzG*mMFHsP}fFK7I9!s7`qWBg^pXA@q? z_-?{)Bs`n(=Ln~zvmuf3CkUrhrXh~;M+l!ocr@ep6Mi${5scqM_*}v*jNd`{Ji@~m zzm4#}5Uw%4jBq>QO~3H?6P`$TJ>!cAr=_Q%mht(7&nLW!@i~N3YS2*0_zc2R2rp-R z3gHgI%NU^KS4MxI7{o<&P71I~x7bZiWvY__?+a9)H|U=-vi6*zZZOMU8~ z(B7+Ae%>pT1$c0j?@Q%Mhf=@C+xnhDdE5R|0XA2YZNGb*&2-TA)+uKXDE!_j6m}+s zZRsl<`vL6L@~*KJjjcujsDwS8Z6#wrE3jzpu^0ij4gVYrdKPjfGN+IX`}ZqQiKs&2 z^BPhiL08CXEH>8)v?;I2=8AXQN~YnAZ?ctGoA*(UVslmRqT=pZi1n|%LS<6Xq)SnA zYO2kBCuYDrrn;KfT2F?)KxY+tC3HiTpreK`uA$V5TB_YA(Z>W+0ENDp5V1jI7mTP( zv6Tc~MT?isWpzhZ!H!B?)!2$w)M(Bapf$DE*anNboI!3YLKzY|+s(r2@w3RPXjoO_ z$~%Cb*~KbRL1(lW7Eu*AwSB>&lice`fy-L|5>?~w05fc^SN2sg_fz*q)QJ-HHdhZc zrC!VH&iYD+euKbGcITmZ<2-bIy{L#ANAr#PL6od^7qXV14{|J;tt1%2#Hq2l{zV!F zA{lACIL39rXz2c*TUugWsI%I=5i1p%7k%^ixyG=>DXmkxy_vfmYOCG7g#og$VW