#include <mtbl.h>
#include <memory>
#include <string>
+#include <unordered_set>
#include <string.h>
#include <assert.h>
+#include "merge_count.h"
#include "count.pb.h"
using namespace std;
-void merge_count(void* userdata,
- const uint8_t *key, size_t len_key,
- const uint8_t *val0, size_t len_val0,
- const uint8_t *val1, size_t len_val1,
- uint8_t **merged_val, size_t *len_merged_val)
+void merge_serialized_count(void* userdata,
+ const uint8_t *key, size_t len_key,
+ const uint8_t *val0, size_t len_val0,
+ const uint8_t *val1, size_t len_val1,
+ uint8_t **merged_val, size_t *len_merged_val)
{
Count c0, c1;
c0.ParseFromArray(val0, len_val0);
c1.ParseFromArray(val1, len_val1);
- Count c;
-
- c.set_white(c0.white() + c1.white());
- c.set_draw(c0.draw() + c1.draw());
- c.set_black(c0.black() + c1.black());
- c.set_sum_white_elo(c0.sum_white_elo() + c1.sum_white_elo());
- c.set_sum_black_elo(c0.sum_black_elo() + c1.sum_black_elo());
- c.set_num_elo(c0.num_elo() + c1.num_elo());
- if (c0.first_timestamp() <= c1.first_timestamp()) {
- c.set_opening_num(c0.opening_num());
- if (c0.has_first_timestamp()) {
- c.set_first_timestamp(c0.first_timestamp());
- }
- } else {
- c.set_opening_num(c1.opening_num());
- if (c1.has_first_timestamp()) {
- c.set_first_timestamp(c1.first_timestamp());
- }
- }
+ Count c = merge_count(c0, c1);
static string buf; // Keep allocated.
c.SerializeToString(&buf);
int main(int argc, char **argv)
{
mtbl_merger_options* mopt = mtbl_merger_options_init();
- mtbl_merger_options_set_merge_func(mopt, merge_count, NULL);
+ mtbl_merger_options_set_merge_func(mopt, merge_serialized_count, NULL);
mtbl_merger* merger = mtbl_merger_init(mopt);
for (int i = 1; i < argc - 1; ++i) {