From 710d06e97438a657f161f3363f2f83d5a9b1a137 Mon Sep 17 00:00:00 2001 From: Marty Schoch Date: Wed, 27 Jan 2016 17:51:07 -0500 Subject: [PATCH] add support for native C merge operators --- index/store/merge.go | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/index/store/merge.go b/index/store/merge.go index 6e1a7da7..1443dd3e 100644 --- a/index/store/merge.go +++ b/index/store/merge.go @@ -9,6 +9,8 @@ package store +import "unsafe" + // At the moment this happens to be the same interface as described by // RocksDB, but this may not always be the case. @@ -28,6 +30,34 @@ type MergeOperator interface { Name() string } +// NativeMergeOperator is a merge operator that also includeTermVectors +// a C implementation +type NativeMergeOperator interface { + MergeOperator + + // a pointer to function in C with the signature + // char* (*full_merge)(void *state, + // const char* key, size_t key_length, + // const char* existing_value, + // size_t existing_value_length, + // const char* const* operands_list, + // const size_t* operands_list_length, int num_operands, + // unsigned char* success, size_t* new_value_length) + FullMergeC() unsafe.Pointer + + // a pointer to function in C with the signature + // char* (*partial_merge)(void *state, + // const char* key, size_t key_length, + // const char* const* operands_list, + // const size_t* operands_list_length, int num_operands, + // unsigned char* success, size_t* new_value_length) + PartialMergeC() unsafe.Pointer + + // a pointer to function in C with signature + // const char* merge_operator_name_fn(void *state) + NameC() unsafe.Pointer +} + type EmulatedMerge struct { Merges map[string][][]byte mo MergeOperator