Merge branch 'master' of ssh://cmph.git.sourceforge.net/gitroot/cmph/cmph
This commit is contained in:
commit
3bad70ec1c
@ -1,9 +1,9 @@
|
|||||||
TESTS = $(check_PROGRAMS)
|
TESTS = $(check_PROGRAMS)
|
||||||
check_PROGRAMS = seeded_hash_test mph_bits_test hollow_iterator_test mph_map_test mph_index_test trigraph_test map_tester_test
|
check_PROGRAMS = seeded_hash_test mph_bits_test hollow_iterator_test mph_map_test mph_index_test trigraph_test map_tester_test string_util_test
|
||||||
noinst_PROGRAMS = bm_index bm_map
|
noinst_PROGRAMS = bm_index bm_map
|
||||||
bin_PROGRAMS = cxxmph
|
bin_PROGRAMS = cxxmph
|
||||||
lib_LTLIBRARIES = libcxxmph.la
|
lib_LTLIBRARIES = libcxxmph.la
|
||||||
libcxxmph_la_SOURCES = MurmurHash3.h MurmurHash3.cpp trigragh.h trigraph.cc mph_bits.h mph_bits.cc mph_index.h mph_index.cc seeded_hash.h stringpiece.h benchmark.h benchmark.cc
|
libcxxmph_la_SOURCES = MurmurHash3.h MurmurHash3.cpp trigragh.h trigraph.cc mph_bits.h mph_bits.cc mph_index.h mph_index.cc seeded_hash.h stringpiece.h benchmark.h benchmark.cc string_util.cc
|
||||||
libcxxmph_la_LDFLAGS = -version-info 0:0:0
|
libcxxmph_la_LDFLAGS = -version-info 0:0:0
|
||||||
cxxmph_includedir = $(includedir)/cxxmph/
|
cxxmph_includedir = $(includedir)/cxxmph/
|
||||||
cxxmph_include_HEADERS = mph_map.h mph_index.h MurmurHash3.h trigraph.h seeded_hash.h stringpiece.h hollow_iterator.h
|
cxxmph_include_HEADERS = mph_map.h mph_index.h MurmurHash3.h trigraph.h seeded_hash.h stringpiece.h hollow_iterator.h
|
||||||
@ -34,5 +34,8 @@ seeded_hash_test_LDADD = libcxxmph.la
|
|||||||
mph_bits_test_SOURCES = mph_bits_test.cc
|
mph_bits_test_SOURCES = mph_bits_test.cc
|
||||||
mph_bits_test_LDADD = libcxxmph.la
|
mph_bits_test_LDADD = libcxxmph.la
|
||||||
|
|
||||||
|
string_util_test_SOURCES = string_util_test.cc
|
||||||
|
string_util_test_LDADD = libcxxmph.la
|
||||||
|
|
||||||
map_tester_test_SOURCES = map_tester.cc map_tester_test.cc
|
map_tester_test_SOURCES = map_tester.cc map_tester_test.cc
|
||||||
|
|
||||||
|
@ -44,10 +44,12 @@ class BM_MPHIndexSearch : public SearchUrlsBenchmark {
|
|||||||
BM_MPHIndexSearch(const std::string& urls_file, int nsearches)
|
BM_MPHIndexSearch(const std::string& urls_file, int nsearches)
|
||||||
: SearchUrlsBenchmark(urls_file, nsearches, 0) { }
|
: SearchUrlsBenchmark(urls_file, nsearches, 0) { }
|
||||||
virtual void Run() {
|
virtual void Run() {
|
||||||
|
uint64_t sum = 0;
|
||||||
for (auto it = random_.begin(); it != random_.end(); ++it) {
|
for (auto it = random_.begin(); it != random_.end(); ++it) {
|
||||||
auto idx = index_.index(*it);
|
auto idx = index_.index(*it);
|
||||||
// Collision check to be fair with STL
|
// Collision check to be fair with STL
|
||||||
if (strcmp(urls_[idx].c_str(), it->data()) != 0) idx = -1;
|
if (strcmp(urls_[idx].c_str(), it->data()) != 0) idx = -1;
|
||||||
|
sum += idx;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
protected:
|
protected:
|
||||||
@ -65,10 +67,12 @@ class BM_CmphIndexSearch : public SearchUrlsBenchmark {
|
|||||||
: SearchUrlsBenchmark(urls_file, nsearches, 0) { }
|
: SearchUrlsBenchmark(urls_file, nsearches, 0) { }
|
||||||
~BM_CmphIndexSearch() { if (index_) cmph_destroy(index_); }
|
~BM_CmphIndexSearch() { if (index_) cmph_destroy(index_); }
|
||||||
virtual void Run() {
|
virtual void Run() {
|
||||||
|
uint64_t sum = 0;
|
||||||
for (auto it = random_.begin(); it != random_.end(); ++it) {
|
for (auto it = random_.begin(); it != random_.end(); ++it) {
|
||||||
auto idx = cmph_search(index_, it->data(), it->length());
|
auto idx = cmph_search(index_, it->data(), it->length());
|
||||||
// Collision check to be fair with STL
|
// Collision check to be fair with STL
|
||||||
if (strcmp(urls_[idx].c_str(), it->data()) != 0) idx = -1;
|
if (strcmp(urls_[idx].c_str(), it->data()) != 0) idx = -1;
|
||||||
|
sum += idx;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
protected:
|
protected:
|
||||||
@ -114,8 +118,10 @@ class BM_STLIndexSearch : public SearchUrlsBenchmark {
|
|||||||
BM_STLIndexSearch(const std::string& urls_file, int nsearches)
|
BM_STLIndexSearch(const std::string& urls_file, int nsearches)
|
||||||
: SearchUrlsBenchmark(urls_file, nsearches, 0) { }
|
: SearchUrlsBenchmark(urls_file, nsearches, 0) { }
|
||||||
virtual void Run() {
|
virtual void Run() {
|
||||||
|
uint64_t sum = 0;
|
||||||
for (auto it = random_.begin(); it != random_.end(); ++it) {
|
for (auto it = random_.begin(); it != random_.end(); ++it) {
|
||||||
auto idx = index_.find(*it);
|
auto idx = index_.find(*it);
|
||||||
|
sum += idx->second;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
protected:
|
protected:
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#include <string>
|
#include <string>
|
||||||
#include <tr1/unordered_map>
|
#include <unordered_map>
|
||||||
|
|
||||||
#include "bm_common.h"
|
#include "bm_common.h"
|
||||||
#include "mph_map.h"
|
#include "mph_map.h"
|
||||||
|
@ -1,8 +1,4 @@
|
|||||||
#include "map_tester.h"
|
#include "map_tester.h"
|
||||||
|
|
||||||
namespace cxxxmph {
|
namespace cxxxmph {
|
||||||
|
|
||||||
MapTester::MapTester() {}
|
|
||||||
MapTester::~MapTester() {}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -7,15 +7,18 @@
|
|||||||
#include <vector>
|
#include <vector>
|
||||||
#include <unordered_map>
|
#include <unordered_map>
|
||||||
|
|
||||||
|
#include "string_util.h"
|
||||||
|
|
||||||
namespace cxxmph {
|
namespace cxxmph {
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
// template <template <class K, class V> class unordered_map> >
|
template <template<typename...> class map_type>
|
||||||
class MapTester {
|
class MapTester {
|
||||||
public:
|
public:
|
||||||
MapTester();
|
MapTester() {}
|
||||||
~MapTester();
|
~MapTester() {}
|
||||||
|
|
||||||
bool Run(string* errors) const {
|
bool Run(string* errors) const {
|
||||||
string e;
|
string e;
|
||||||
if (!small_insert()) e += "small insert failed\n";
|
if (!small_insert()) e += "small insert failed\n";
|
||||||
@ -27,26 +30,26 @@ class MapTester {
|
|||||||
return !e.empty();
|
return !e.empty();
|
||||||
}
|
}
|
||||||
static bool small_insert() {
|
static bool small_insert() {
|
||||||
unordered_map<int64_t, int64_t> m;
|
map_type<int64_t, int64_t> m;
|
||||||
// Start counting from 1 to not touch default constructed value bugs
|
// Start counting from 1 to not touch default constructed value bugs
|
||||||
for (int i = 1; i < 12; ++i) m.insert(make_pair(i, i));
|
for (int i = 1; i < 12; ++i) m.insert(make_pair(i, i));
|
||||||
return m.size() == 11;
|
return m.size() == 11;
|
||||||
}
|
}
|
||||||
static bool large_insert() {
|
static bool large_insert() {
|
||||||
unordered_map<int64_t, int64_t> m;
|
map_type<int64_t, int64_t> m;
|
||||||
// Start counting from 1 to not touch default constructed value bugs
|
// Start counting from 1 to not touch default constructed value bugs
|
||||||
for (int i = 1; i < 12 * 256 * 256; ++i) m.insert(make_pair(i, i));
|
for (int i = 1; i < 12 * 256 * 256; ++i) m.insert(make_pair(i, i));
|
||||||
return m.size() == 12 * 256 * 256 - 1;
|
return m.size() == 12 * 256 * 256 - 1;
|
||||||
}
|
}
|
||||||
static bool small_search() {
|
static bool small_search() {
|
||||||
unordered_map<int64_t, int64_t> m;
|
map_type<int64_t, int64_t> m;
|
||||||
// Start counting from 1 to not touch default constructed value bugs
|
// Start counting from 1 to not touch default constructed value bugs
|
||||||
for (int i = 1; i < 12; ++i) m.insert(make_pair(i, i));
|
for (int i = 1; i < 12; ++i) m.insert(make_pair(i, i));
|
||||||
for (int i = 1; i < 12; ++i) if (m.find(i) == m.end()) return false;
|
for (int i = 1; i < 12; ++i) if (m.find(i) == m.end()) return false;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
static bool default_search() {
|
static bool default_search() {
|
||||||
unordered_map<int64_t, int64_t> m;
|
map_type<int64_t, int64_t> m;
|
||||||
if (m.find(0) != m.end()) return false;
|
if (m.find(0) != m.end()) return false;
|
||||||
for (int i = 1; i < 256; ++i) m.insert(make_pair(i, i));
|
for (int i = 1; i < 256; ++i) m.insert(make_pair(i, i));
|
||||||
if (m.find(0) != m.end()) return false;
|
if (m.find(0) != m.end()) return false;
|
||||||
@ -56,7 +59,7 @@ class MapTester {
|
|||||||
}
|
}
|
||||||
static bool large_search() {
|
static bool large_search() {
|
||||||
int nkeys = 10 * 1000;
|
int nkeys = 10 * 1000;
|
||||||
unordered_map<int64_t, int64_t> m;
|
map_type<int64_t, int64_t> m;
|
||||||
for (int i = 0; i < nkeys; ++i) m.insert(make_pair(i, i));
|
for (int i = 0; i < nkeys; ++i) m.insert(make_pair(i, i));
|
||||||
for (int i = 0; i < nkeys; ++i) if (m.find(i) == m.end()) return false;
|
for (int i = 0; i < nkeys; ++i) if (m.find(i) == m.end()) return false;
|
||||||
return true;
|
return true;
|
||||||
@ -66,10 +69,10 @@ class MapTester {
|
|||||||
vector<string> keys;
|
vector<string> keys;
|
||||||
for (int i = 0; i < nkeys; ++i) {
|
for (int i = 0; i < nkeys; ++i) {
|
||||||
char buf[128];
|
char buf[128];
|
||||||
snprintf(buf, sizeof(buf), "%lu", i);
|
cxxmph::format("%v", i);
|
||||||
keys.push_back(buf);
|
keys.push_back(buf);
|
||||||
}
|
}
|
||||||
unordered_map<string, int64_t> m;
|
map_type<string, int64_t> m;
|
||||||
for (int i = 0; i < nkeys; ++i) m.insert(make_pair(keys[i], i));
|
for (int i = 0; i < nkeys; ++i) m.insert(make_pair(keys[i], i));
|
||||||
for (int i = 0; i < nkeys; ++i) {
|
for (int i = 0; i < nkeys; ++i) {
|
||||||
auto it = m.find(keys[i]);
|
auto it = m.find(keys[i]);
|
||||||
|
23
cxxmph/string_util.cc
Normal file
23
cxxmph/string_util.cc
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
#include "string_util.h"
|
||||||
|
|
||||||
|
#include <cassert>
|
||||||
|
#include <cstdint>
|
||||||
|
#include <iostream>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
namespace cxxmph {
|
||||||
|
|
||||||
|
bool stream_printf(
|
||||||
|
const std::string& format_string, uint32_t offset, std::ostream* out) {
|
||||||
|
if (offset == format_string.length()) return true;
|
||||||
|
assert(offset < format_string.length());
|
||||||
|
cerr << "length:" << format_string.length() << endl;
|
||||||
|
cerr << "offset:" << offset << endl;
|
||||||
|
auto txt = format_string.substr(offset, format_string.length() - offset);
|
||||||
|
*out << txt;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace cxxmph
|
137
cxxmph/string_util.h
Normal file
137
cxxmph/string_util.h
Normal file
@ -0,0 +1,137 @@
|
|||||||
|
#ifndef __CXXMPH_STRING_UTIL_H__
|
||||||
|
#define __CXXMPH_STRING_UTIL_H__
|
||||||
|
|
||||||
|
// Helper functions for string formatting and terminal output. Should be used
|
||||||
|
// only for debugging and tests, since performance was not a concern.
|
||||||
|
// Implemented using variadic templates because it is cool.
|
||||||
|
//
|
||||||
|
// Adds the extra format %v to the printf formatting language. Uses the method
|
||||||
|
// cxxmph::tostr to implement custom printers and fallback to operator
|
||||||
|
// ostream::operator<< otherwise.
|
||||||
|
|
||||||
|
#include <cstdint>
|
||||||
|
#include <cstdio>
|
||||||
|
#include <cstring>
|
||||||
|
#include <iostream>
|
||||||
|
#include <string>
|
||||||
|
#include <sstream>
|
||||||
|
#include <utility>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
#define CXXMPH_DEBUGLN(fmt) variadic_print(__FILE__, __LINE__, &std::cerr, fmt)
|
||||||
|
#define CXXMPH_INFOLN(fmt) variadic_print(__FILE__, __LINE__, &std::cout, fmt)
|
||||||
|
|
||||||
|
namespace cxxmph {
|
||||||
|
|
||||||
|
using std::pair;
|
||||||
|
using std::string;
|
||||||
|
using std::ostream;
|
||||||
|
using std::vector;
|
||||||
|
|
||||||
|
template <class T> void tostr(ostream *out, const T& v) {
|
||||||
|
*out << v;
|
||||||
|
}
|
||||||
|
inline void tostr(std::ostream* out, uint8_t v) {
|
||||||
|
*out << static_cast<uint32_t>(v);
|
||||||
|
}
|
||||||
|
template <class V>
|
||||||
|
inline void tostr(ostream* out, const vector<V>& v) {
|
||||||
|
*out << "[";
|
||||||
|
for (uint32_t i = 0; i < v.size(); ++i) {
|
||||||
|
tostr(out, v[1]);
|
||||||
|
if (i != v.size() - 1)*out << " ";
|
||||||
|
}
|
||||||
|
*out << "]";
|
||||||
|
}
|
||||||
|
template <class F, class S>
|
||||||
|
inline void tostr(ostream* out, const pair<F, S>& v) {
|
||||||
|
*out << "(";
|
||||||
|
tostr(out, v.first);
|
||||||
|
*out << ",";
|
||||||
|
tostr(out, v.second);
|
||||||
|
*out << ")";
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename... Args, class T >
|
||||||
|
std::string infoln(const std::string& format_string, Args&&... args) {
|
||||||
|
return stream_printf(format_string, 0, &std::cout, std::forward<Args>(args)...);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool stream_printf(
|
||||||
|
const std::string& format_string, uint32_t offset, std::ostream* out);
|
||||||
|
|
||||||
|
template <bool ispod> struct pod_snprintf {};
|
||||||
|
template <> struct pod_snprintf<false> {
|
||||||
|
template <class T>
|
||||||
|
int operator()(char*, size_t, const char*, const T&) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
template <> struct pod_snprintf<true> {
|
||||||
|
template <class T>
|
||||||
|
int operator()(char* str, size_t size, const char* format, const T& v) {
|
||||||
|
return snprintf(str, size, format, v);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T, typename... Args>
|
||||||
|
bool stream_printf(const std::string& format_string, uint32_t offset,
|
||||||
|
std::ostream* out, const T& value, Args&&... args) {
|
||||||
|
auto b = format_string.c_str() + offset;
|
||||||
|
auto txt = format_string.c_str() + offset;
|
||||||
|
for (; *txt; ++txt) {
|
||||||
|
if (*txt == '%') {
|
||||||
|
if (*(txt + 1) != '%') break;
|
||||||
|
*out << "%";
|
||||||
|
return stream_printf(format_string, offset + 2, out, value,
|
||||||
|
std::forward<Args>(args)...);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (txt != b) {
|
||||||
|
*out << string(b, txt - b);
|
||||||
|
}
|
||||||
|
auto fmt = txt + 1;
|
||||||
|
while (*fmt && *fmt != '%') ++fmt;
|
||||||
|
if (strncmp(txt, "%v", 2) == 0) {
|
||||||
|
txt += 2;
|
||||||
|
tostr(out, value);
|
||||||
|
if (txt != fmt) *out << string(txt, fmt);
|
||||||
|
} else {
|
||||||
|
char buf[256]; // Is this enough?
|
||||||
|
auto n = pod_snprintf<std::is_pod<T>::value>()(
|
||||||
|
buf, 256, std::string(txt, fmt).c_str(), value);
|
||||||
|
if (n < 0) return false;
|
||||||
|
*out << buf;
|
||||||
|
}
|
||||||
|
return stream_printf(format_string, fmt - format_string.c_str(), out,
|
||||||
|
std::forward<Args>(args)...);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename... Args>
|
||||||
|
std::string format(const std::string& format_string, Args&&... args) {
|
||||||
|
std::ostringstream out;
|
||||||
|
if (!stream_printf(format_string, 0, &out, std::forward<Args>(args)...)) {
|
||||||
|
return std::string();
|
||||||
|
};
|
||||||
|
return out.str();
|
||||||
|
}
|
||||||
|
|
||||||
|
struct variadic_print {
|
||||||
|
variadic_print(const std::string& file, uint32_t line, std::ostream* out,
|
||||||
|
const std::string& format_line)
|
||||||
|
: file_(file), line_(line), out_(out), format_line_(format_line) {}
|
||||||
|
template <typename... Args>
|
||||||
|
void operator()(Args&&... args) {
|
||||||
|
std::string fancy_format = "%s:%d: ";
|
||||||
|
fancy_format += format_line_;
|
||||||
|
stream_printf(fancy_format, 0, out_, std::forward<Args>(args)...);
|
||||||
|
}
|
||||||
|
const std::string& file_;
|
||||||
|
const uint32_t& line_;
|
||||||
|
std::ostream* out_;
|
||||||
|
const std::string& format_line_;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace cxxmph
|
||||||
|
|
||||||
|
#endif // __CXXMPH_STRING_UTIL_H__
|
18
src/bdz.c
18
src/bdz.c
@ -47,7 +47,7 @@ typedef cmph_uint32 * bdz_queue_t;
|
|||||||
|
|
||||||
static void bdz_alloc_queue(bdz_queue_t * queuep, cmph_uint32 nedges)
|
static void bdz_alloc_queue(bdz_queue_t * queuep, cmph_uint32 nedges)
|
||||||
{
|
{
|
||||||
(*queuep)=malloc(nedges*sizeof(cmph_uint32));
|
(*queuep)=(cmph_uint32 *)malloc(nedges*sizeof(cmph_uint32));
|
||||||
};
|
};
|
||||||
static void bdz_free_queue(bdz_queue_t * queue)
|
static void bdz_free_queue(bdz_queue_t * queue)
|
||||||
{
|
{
|
||||||
@ -65,9 +65,9 @@ typedef struct
|
|||||||
|
|
||||||
static void bdz_alloc_graph3(bdz_graph3_t * graph3, cmph_uint32 nedges, cmph_uint32 nvertices)
|
static void bdz_alloc_graph3(bdz_graph3_t * graph3, cmph_uint32 nedges, cmph_uint32 nvertices)
|
||||||
{
|
{
|
||||||
graph3->edges=malloc(nedges*sizeof(bdz_edge_t));
|
graph3->edges=(bdz_edge_t *)malloc(nedges*sizeof(bdz_edge_t));
|
||||||
graph3->first_edge=malloc(nvertices*sizeof(cmph_uint32));
|
graph3->first_edge=(cmph_uint32 *)malloc(nvertices*sizeof(cmph_uint32));
|
||||||
graph3->vert_degree=malloc((size_t)nvertices);
|
graph3->vert_degree=(cmph_uint8 *)malloc((size_t)nvertices);
|
||||||
};
|
};
|
||||||
static void bdz_init_graph3(bdz_graph3_t * graph3, cmph_uint32 nedges, cmph_uint32 nvertices)
|
static void bdz_init_graph3(bdz_graph3_t * graph3, cmph_uint32 nedges, cmph_uint32 nvertices)
|
||||||
{
|
{
|
||||||
@ -163,7 +163,7 @@ static int bdz_generate_queue(cmph_uint32 nedges, cmph_uint32 nvertices, bdz_que
|
|||||||
cmph_uint32 queue_head=0,queue_tail=0;
|
cmph_uint32 queue_head=0,queue_tail=0;
|
||||||
cmph_uint32 curr_edge;
|
cmph_uint32 curr_edge;
|
||||||
cmph_uint32 tmp_edge;
|
cmph_uint32 tmp_edge;
|
||||||
cmph_uint8 * marked_edge =malloc((size_t)(nedges >> 3) + 1);
|
cmph_uint8 * marked_edge = (cmph_uint8 *)malloc((size_t)(nedges >> 3) + 1);
|
||||||
memset(marked_edge, 0, (size_t)(nedges >> 3) + 1);
|
memset(marked_edge, 0, (size_t)(nedges >> 3) + 1);
|
||||||
|
|
||||||
for(i=0;i<nedges;i++){
|
for(i=0;i<nedges;i++){
|
||||||
@ -424,7 +424,7 @@ static void assigning(bdz_config_data_t *bdz, bdz_graph3_t* graph3, bdz_queue_t
|
|||||||
cmph_uint32 nedges=graph3->nedges;
|
cmph_uint32 nedges=graph3->nedges;
|
||||||
cmph_uint32 curr_edge;
|
cmph_uint32 curr_edge;
|
||||||
cmph_uint32 v0,v1,v2;
|
cmph_uint32 v0,v1,v2;
|
||||||
cmph_uint8 * marked_vertices =malloc((size_t)(bdz->n >> 3) + 1);
|
cmph_uint8 * marked_vertices = (cmph_uint8 *)malloc((size_t)(bdz->n >> 3) + 1);
|
||||||
cmph_uint32 sizeg = (cmph_uint32)ceil(bdz->n/4.0);
|
cmph_uint32 sizeg = (cmph_uint32)ceil(bdz->n/4.0);
|
||||||
bdz->g = (cmph_uint8 *)calloc((size_t)(sizeg), sizeof(cmph_uint8));
|
bdz->g = (cmph_uint8 *)calloc((size_t)(sizeg), sizeof(cmph_uint8));
|
||||||
memset(marked_vertices, 0, (size_t)(bdz->n >> 3) + 1);
|
memset(marked_vertices, 0, (size_t)(bdz->n >> 3) + 1);
|
||||||
@ -595,7 +595,7 @@ static inline cmph_uint32 rank(cmph_uint32 b, cmph_uint32 * ranktable, cmph_uint
|
|||||||
cmph_uint32 bdz_search(cmph_t *mphf, const char *key, cmph_uint32 keylen)
|
cmph_uint32 bdz_search(cmph_t *mphf, const char *key, cmph_uint32 keylen)
|
||||||
{
|
{
|
||||||
register cmph_uint32 vertex;
|
register cmph_uint32 vertex;
|
||||||
register bdz_data_t *bdz = mphf->data;
|
register bdz_data_t *bdz = (bdz_data_t *)mphf->data;
|
||||||
cmph_uint32 hl[3];
|
cmph_uint32 hl[3];
|
||||||
hash_vector(bdz->hl, key, keylen, hl);
|
hash_vector(bdz->hl, key, keylen, hl);
|
||||||
hl[0] = hl[0] % bdz->r;
|
hl[0] = hl[0] % bdz->r;
|
||||||
@ -625,7 +625,7 @@ void bdz_destroy(cmph_t *mphf)
|
|||||||
void bdz_pack(cmph_t *mphf, void *packed_mphf)
|
void bdz_pack(cmph_t *mphf, void *packed_mphf)
|
||||||
{
|
{
|
||||||
bdz_data_t *data = (bdz_data_t *)mphf->data;
|
bdz_data_t *data = (bdz_data_t *)mphf->data;
|
||||||
cmph_uint8 * ptr = packed_mphf;
|
cmph_uint8 * ptr = (cmph_uint8 *)packed_mphf;
|
||||||
|
|
||||||
// packing hl type
|
// packing hl type
|
||||||
CMPH_HASH hl_type = hash_get_type(data->hl);
|
CMPH_HASH hl_type = hash_get_type(data->hl);
|
||||||
@ -681,7 +681,7 @@ cmph_uint32 bdz_search_packed(void *packed_mphf, const char *key, cmph_uint32 ke
|
|||||||
{
|
{
|
||||||
|
|
||||||
register cmph_uint32 vertex;
|
register cmph_uint32 vertex;
|
||||||
register CMPH_HASH hl_type = *(cmph_uint32 *)packed_mphf;
|
register CMPH_HASH hl_type = (CMPH_HASH)(*(cmph_uint32 *)packed_mphf);
|
||||||
register cmph_uint8 *hl_ptr = (cmph_uint8 *)(packed_mphf) + 4;
|
register cmph_uint8 *hl_ptr = (cmph_uint8 *)(packed_mphf) + 4;
|
||||||
|
|
||||||
register cmph_uint32 *ranktable = (cmph_uint32*)(hl_ptr + hash_state_packed_size(hl_type));
|
register cmph_uint32 *ranktable = (cmph_uint32*)(hl_ptr + hash_state_packed_size(hl_type));
|
||||||
|
18
src/bdz_ph.c
18
src/bdz_ph.c
@ -34,7 +34,7 @@ typedef cmph_uint32 * bdz_ph_queue_t;
|
|||||||
|
|
||||||
static void bdz_ph_alloc_queue(bdz_ph_queue_t * queuep, cmph_uint32 nedges)
|
static void bdz_ph_alloc_queue(bdz_ph_queue_t * queuep, cmph_uint32 nedges)
|
||||||
{
|
{
|
||||||
(*queuep)=malloc(nedges*sizeof(cmph_uint32));
|
(*queuep)=(cmph_uint32 *)malloc(nedges*sizeof(cmph_uint32));
|
||||||
};
|
};
|
||||||
static void bdz_ph_free_queue(bdz_ph_queue_t * queue)
|
static void bdz_ph_free_queue(bdz_ph_queue_t * queue)
|
||||||
{
|
{
|
||||||
@ -52,9 +52,9 @@ typedef struct
|
|||||||
|
|
||||||
static void bdz_ph_alloc_graph3(bdz_ph_graph3_t * graph3, cmph_uint32 nedges, cmph_uint32 nvertices)
|
static void bdz_ph_alloc_graph3(bdz_ph_graph3_t * graph3, cmph_uint32 nedges, cmph_uint32 nvertices)
|
||||||
{
|
{
|
||||||
graph3->edges=malloc(nedges*sizeof(bdz_ph_edge_t));
|
graph3->edges=(bdz_ph_edge_t *)malloc(nedges*sizeof(bdz_ph_edge_t));
|
||||||
graph3->first_edge=malloc(nvertices*sizeof(cmph_uint32));
|
graph3->first_edge=(cmph_uint32 *)malloc(nvertices*sizeof(cmph_uint32));
|
||||||
graph3->vert_degree=malloc((size_t)nvertices);
|
graph3->vert_degree=(cmph_uint8 *)malloc((size_t)nvertices);
|
||||||
};
|
};
|
||||||
static void bdz_ph_init_graph3(bdz_ph_graph3_t * graph3, cmph_uint32 nedges, cmph_uint32 nvertices)
|
static void bdz_ph_init_graph3(bdz_ph_graph3_t * graph3, cmph_uint32 nedges, cmph_uint32 nvertices)
|
||||||
{
|
{
|
||||||
@ -148,7 +148,7 @@ static int bdz_ph_generate_queue(cmph_uint32 nedges, cmph_uint32 nvertices, bdz_
|
|||||||
cmph_uint32 queue_head=0,queue_tail=0;
|
cmph_uint32 queue_head=0,queue_tail=0;
|
||||||
cmph_uint32 curr_edge;
|
cmph_uint32 curr_edge;
|
||||||
cmph_uint32 tmp_edge;
|
cmph_uint32 tmp_edge;
|
||||||
cmph_uint8 * marked_edge =malloc((size_t)(nedges >> 3) + 1);
|
cmph_uint8 * marked_edge =(cmph_uint8 *)malloc((size_t)(nedges >> 3) + 1);
|
||||||
memset(marked_edge, 0, (size_t)(nedges >> 3) + 1);
|
memset(marked_edge, 0, (size_t)(nedges >> 3) + 1);
|
||||||
|
|
||||||
for(i=0;i<nedges;i++){
|
for(i=0;i<nedges;i++){
|
||||||
@ -381,7 +381,7 @@ static void assigning(bdz_ph_config_data_t *bdz_ph, bdz_ph_graph3_t* graph3, bdz
|
|||||||
cmph_uint32 nedges=graph3->nedges;
|
cmph_uint32 nedges=graph3->nedges;
|
||||||
cmph_uint32 curr_edge;
|
cmph_uint32 curr_edge;
|
||||||
cmph_uint32 v0,v1,v2;
|
cmph_uint32 v0,v1,v2;
|
||||||
cmph_uint8 * marked_vertices =malloc((size_t)(bdz_ph->n >> 3) + 1);
|
cmph_uint8 * marked_vertices = (cmph_uint8 *)malloc((size_t)(bdz_ph->n >> 3) + 1);
|
||||||
cmph_uint32 sizeg = (cmph_uint32)ceil(bdz_ph->n/4.0);
|
cmph_uint32 sizeg = (cmph_uint32)ceil(bdz_ph->n/4.0);
|
||||||
bdz_ph->g = (cmph_uint8 *)calloc((size_t)sizeg, sizeof(cmph_uint8));
|
bdz_ph->g = (cmph_uint8 *)calloc((size_t)sizeg, sizeof(cmph_uint8));
|
||||||
memset(marked_vertices, 0, (size_t)(bdz_ph->n >> 3) + 1);
|
memset(marked_vertices, 0, (size_t)(bdz_ph->n >> 3) + 1);
|
||||||
@ -507,7 +507,7 @@ void bdz_ph_load(FILE *f, cmph_t *mphf)
|
|||||||
|
|
||||||
cmph_uint32 bdz_ph_search(cmph_t *mphf, const char *key, cmph_uint32 keylen)
|
cmph_uint32 bdz_ph_search(cmph_t *mphf, const char *key, cmph_uint32 keylen)
|
||||||
{
|
{
|
||||||
register bdz_ph_data_t *bdz_ph = mphf->data;
|
register bdz_ph_data_t *bdz_ph = (bdz_ph_data_t *)mphf->data;
|
||||||
cmph_uint32 hl[3];
|
cmph_uint32 hl[3];
|
||||||
register cmph_uint8 byte0, byte1, byte2;
|
register cmph_uint8 byte0, byte1, byte2;
|
||||||
register cmph_uint32 vertex;
|
register cmph_uint32 vertex;
|
||||||
@ -547,7 +547,7 @@ void bdz_ph_destroy(cmph_t *mphf)
|
|||||||
void bdz_ph_pack(cmph_t *mphf, void *packed_mphf)
|
void bdz_ph_pack(cmph_t *mphf, void *packed_mphf)
|
||||||
{
|
{
|
||||||
bdz_ph_data_t *data = (bdz_ph_data_t *)mphf->data;
|
bdz_ph_data_t *data = (bdz_ph_data_t *)mphf->data;
|
||||||
cmph_uint8 * ptr = packed_mphf;
|
cmph_uint8 * ptr = (cmph_uint8 *)packed_mphf;
|
||||||
|
|
||||||
// packing hl type
|
// packing hl type
|
||||||
CMPH_HASH hl_type = hash_get_type(data->hl);
|
CMPH_HASH hl_type = hash_get_type(data->hl);
|
||||||
@ -590,7 +590,7 @@ cmph_uint32 bdz_ph_packed_size(cmph_t *mphf)
|
|||||||
cmph_uint32 bdz_ph_search_packed(void *packed_mphf, const char *key, cmph_uint32 keylen)
|
cmph_uint32 bdz_ph_search_packed(void *packed_mphf, const char *key, cmph_uint32 keylen)
|
||||||
{
|
{
|
||||||
|
|
||||||
register CMPH_HASH hl_type = *(cmph_uint32 *)packed_mphf;
|
register CMPH_HASH hl_type = (CMPH_HASH)*(cmph_uint32 *)packed_mphf;
|
||||||
register cmph_uint8 *hl_ptr = (cmph_uint8 *)(packed_mphf) + 4;
|
register cmph_uint8 *hl_ptr = (cmph_uint8 *)(packed_mphf) + 4;
|
||||||
|
|
||||||
register cmph_uint8 * ptr = hl_ptr + hash_state_packed_size(hl_type);
|
register cmph_uint8 * ptr = hl_ptr + hash_state_packed_size(hl_type);
|
||||||
|
@ -44,7 +44,7 @@ void bm_create(CMPH_ALGO algo, int iters) {
|
|||||||
cmph_config_t* config = NULL;
|
cmph_config_t* config = NULL;
|
||||||
cmph_t* mphf = NULL;
|
cmph_t* mphf = NULL;
|
||||||
|
|
||||||
if (iters > g_numbers_len) {
|
if (iters > (int)g_numbers_len) {
|
||||||
fprintf(stderr, "No input with proper size.");
|
fprintf(stderr, "No input with proper size.");
|
||||||
exit(-1);
|
exit(-1);
|
||||||
}
|
}
|
||||||
|
10
src/bmz.c
10
src/bmz.c
@ -526,7 +526,7 @@ void bmz_load(FILE *f, cmph_t *mphf)
|
|||||||
|
|
||||||
cmph_uint32 bmz_search(cmph_t *mphf, const char *key, cmph_uint32 keylen)
|
cmph_uint32 bmz_search(cmph_t *mphf, const char *key, cmph_uint32 keylen)
|
||||||
{
|
{
|
||||||
bmz_data_t *bmz = mphf->data;
|
bmz_data_t *bmz = (bmz_data_t *)mphf->data;
|
||||||
cmph_uint32 h1 = hash(bmz->hashes[0], key, keylen) % bmz->n;
|
cmph_uint32 h1 = hash(bmz->hashes[0], key, keylen) % bmz->n;
|
||||||
cmph_uint32 h2 = hash(bmz->hashes[1], key, keylen) % bmz->n;
|
cmph_uint32 h2 = hash(bmz->hashes[1], key, keylen) % bmz->n;
|
||||||
DEBUGP("key: %.*s h1: %u h2: %u\n", keylen, key, h1, h2);
|
DEBUGP("key: %.*s h1: %u h2: %u\n", keylen, key, h1, h2);
|
||||||
@ -554,7 +554,7 @@ void bmz_pack(cmph_t *mphf, void *packed_mphf)
|
|||||||
{
|
{
|
||||||
|
|
||||||
bmz_data_t *data = (bmz_data_t *)mphf->data;
|
bmz_data_t *data = (bmz_data_t *)mphf->data;
|
||||||
cmph_uint8 * ptr = packed_mphf;
|
cmph_uint8 * ptr = (cmph_uint8 *)packed_mphf;
|
||||||
|
|
||||||
// packing h1 type
|
// packing h1 type
|
||||||
CMPH_HASH h1_type = hash_get_type(data->hashes[0]);
|
CMPH_HASH h1_type = hash_get_type(data->hashes[0]);
|
||||||
@ -606,12 +606,12 @@ cmph_uint32 bmz_packed_size(cmph_t *mphf)
|
|||||||
*/
|
*/
|
||||||
cmph_uint32 bmz_search_packed(void *packed_mphf, const char *key, cmph_uint32 keylen)
|
cmph_uint32 bmz_search_packed(void *packed_mphf, const char *key, cmph_uint32 keylen)
|
||||||
{
|
{
|
||||||
register cmph_uint8 *h1_ptr = packed_mphf;
|
register cmph_uint8 *h1_ptr = (cmph_uint8 *)packed_mphf;
|
||||||
register CMPH_HASH h1_type = *((cmph_uint32 *)h1_ptr);
|
register CMPH_HASH h1_type = (CMPH_HASH)(*((cmph_uint32 *)h1_ptr));
|
||||||
h1_ptr += 4;
|
h1_ptr += 4;
|
||||||
|
|
||||||
register cmph_uint8 *h2_ptr = h1_ptr + hash_state_packed_size(h1_type);
|
register cmph_uint8 *h2_ptr = h1_ptr + hash_state_packed_size(h1_type);
|
||||||
register CMPH_HASH h2_type = *((cmph_uint32 *)h2_ptr);
|
register CMPH_HASH h2_type = (CMPH_HASH)(*((cmph_uint32 *)h2_ptr));
|
||||||
h2_ptr += 4;
|
h2_ptr += 4;
|
||||||
|
|
||||||
register cmph_uint32 *g_ptr = (cmph_uint32 *)(h2_ptr + hash_state_packed_size(h2_type));
|
register cmph_uint32 *g_ptr = (cmph_uint32 *)(h2_ptr + hash_state_packed_size(h2_type));
|
||||||
|
10
src/bmz8.c
10
src/bmz8.c
@ -534,7 +534,7 @@ void bmz8_load(FILE *f, cmph_t *mphf)
|
|||||||
|
|
||||||
cmph_uint8 bmz8_search(cmph_t *mphf, const char *key, cmph_uint32 keylen)
|
cmph_uint8 bmz8_search(cmph_t *mphf, const char *key, cmph_uint32 keylen)
|
||||||
{
|
{
|
||||||
bmz8_data_t *bmz8 = mphf->data;
|
bmz8_data_t *bmz8 = (bmz8_data_t *)mphf->data;
|
||||||
cmph_uint8 h1 = (cmph_uint8)(hash(bmz8->hashes[0], key, keylen) % bmz8->n);
|
cmph_uint8 h1 = (cmph_uint8)(hash(bmz8->hashes[0], key, keylen) % bmz8->n);
|
||||||
cmph_uint8 h2 = (cmph_uint8)(hash(bmz8->hashes[1], key, keylen) % bmz8->n);
|
cmph_uint8 h2 = (cmph_uint8)(hash(bmz8->hashes[1], key, keylen) % bmz8->n);
|
||||||
DEBUGP("key: %s h1: %u h2: %u\n", key, h1, h2);
|
DEBUGP("key: %s h1: %u h2: %u\n", key, h1, h2);
|
||||||
@ -561,7 +561,7 @@ void bmz8_destroy(cmph_t *mphf)
|
|||||||
void bmz8_pack(cmph_t *mphf, void *packed_mphf)
|
void bmz8_pack(cmph_t *mphf, void *packed_mphf)
|
||||||
{
|
{
|
||||||
bmz8_data_t *data = (bmz8_data_t *)mphf->data;
|
bmz8_data_t *data = (bmz8_data_t *)mphf->data;
|
||||||
cmph_uint8 * ptr = packed_mphf;
|
cmph_uint8 * ptr = (cmph_uint8 *)packed_mphf;
|
||||||
|
|
||||||
// packing h1 type
|
// packing h1 type
|
||||||
CMPH_HASH h1_type = hash_get_type(data->hashes[0]);
|
CMPH_HASH h1_type = hash_get_type(data->hashes[0]);
|
||||||
@ -612,12 +612,12 @@ cmph_uint32 bmz8_packed_size(cmph_t *mphf)
|
|||||||
*/
|
*/
|
||||||
cmph_uint8 bmz8_search_packed(void *packed_mphf, const char *key, cmph_uint32 keylen)
|
cmph_uint8 bmz8_search_packed(void *packed_mphf, const char *key, cmph_uint32 keylen)
|
||||||
{
|
{
|
||||||
register cmph_uint8 *h1_ptr = packed_mphf;
|
register cmph_uint8 *h1_ptr = (cmph_uint8 *)packed_mphf;
|
||||||
register CMPH_HASH h1_type = *((cmph_uint32 *)h1_ptr);
|
register CMPH_HASH h1_type = (CMPH_HASH)(*((cmph_uint32 *)h1_ptr));
|
||||||
h1_ptr += 4;
|
h1_ptr += 4;
|
||||||
|
|
||||||
register cmph_uint8 *h2_ptr = h1_ptr + hash_state_packed_size(h1_type);
|
register cmph_uint8 *h2_ptr = h1_ptr + hash_state_packed_size(h1_type);
|
||||||
register CMPH_HASH h2_type = *((cmph_uint32 *)h2_ptr);
|
register CMPH_HASH h2_type = (CMPH_HASH)(*((cmph_uint32 *)h2_ptr));
|
||||||
h2_ptr += 4;
|
h2_ptr += 4;
|
||||||
|
|
||||||
register cmph_uint8 *g_ptr = h2_ptr + hash_state_packed_size(h2_type);
|
register cmph_uint8 *g_ptr = h2_ptr + hash_state_packed_size(h2_type);
|
||||||
|
18
src/brz.c
18
src/brz.c
@ -685,7 +685,7 @@ static cmph_uint32 brz_fch_search(brz_data_t *brz, const char *key, cmph_uint32
|
|||||||
|
|
||||||
cmph_uint32 brz_search(cmph_t *mphf, const char *key, cmph_uint32 keylen)
|
cmph_uint32 brz_search(cmph_t *mphf, const char *key, cmph_uint32 keylen)
|
||||||
{
|
{
|
||||||
brz_data_t *brz = mphf->data;
|
brz_data_t *brz = (brz_data_t *)mphf->data;
|
||||||
cmph_uint32 fingerprint[3];
|
cmph_uint32 fingerprint[3];
|
||||||
switch(brz->algo)
|
switch(brz->algo)
|
||||||
{
|
{
|
||||||
@ -728,7 +728,7 @@ void brz_destroy(cmph_t *mphf)
|
|||||||
void brz_pack(cmph_t *mphf, void *packed_mphf)
|
void brz_pack(cmph_t *mphf, void *packed_mphf)
|
||||||
{
|
{
|
||||||
brz_data_t *data = (brz_data_t *)mphf->data;
|
brz_data_t *data = (brz_data_t *)mphf->data;
|
||||||
cmph_uint8 * ptr = packed_mphf;
|
cmph_uint8 * ptr = (cmph_uint8 *)packed_mphf;
|
||||||
cmph_uint32 i,n;
|
cmph_uint32 i,n;
|
||||||
|
|
||||||
// packing internal algo type
|
// packing internal algo type
|
||||||
@ -858,7 +858,7 @@ cmph_uint32 brz_packed_size(cmph_t *mphf)
|
|||||||
|
|
||||||
static cmph_uint32 brz_bmz8_search_packed(cmph_uint32 *packed_mphf, const char *key, cmph_uint32 keylen, cmph_uint32 * fingerprint)
|
static cmph_uint32 brz_bmz8_search_packed(cmph_uint32 *packed_mphf, const char *key, cmph_uint32 keylen, cmph_uint32 * fingerprint)
|
||||||
{
|
{
|
||||||
register CMPH_HASH h0_type = *packed_mphf++;
|
register CMPH_HASH h0_type = (CMPH_HASH)*packed_mphf++;
|
||||||
register cmph_uint32 *h0_ptr = packed_mphf;
|
register cmph_uint32 *h0_ptr = packed_mphf;
|
||||||
packed_mphf = (cmph_uint32 *)(((cmph_uint8 *)packed_mphf) + hash_state_packed_size(h0_type));
|
packed_mphf = (cmph_uint32 *)(((cmph_uint8 *)packed_mphf) + hash_state_packed_size(h0_type));
|
||||||
|
|
||||||
@ -867,9 +867,9 @@ static cmph_uint32 brz_bmz8_search_packed(cmph_uint32 *packed_mphf, const char *
|
|||||||
register double c = (double)(*((cmph_uint64*)packed_mphf));
|
register double c = (double)(*((cmph_uint64*)packed_mphf));
|
||||||
packed_mphf += 2;
|
packed_mphf += 2;
|
||||||
|
|
||||||
register CMPH_HASH h1_type = *packed_mphf++;
|
register CMPH_HASH h1_type = (CMPH_HASH)*packed_mphf++;
|
||||||
|
|
||||||
register CMPH_HASH h2_type = *packed_mphf++;
|
register CMPH_HASH h2_type = (CMPH_HASH)*packed_mphf++;
|
||||||
|
|
||||||
register cmph_uint8 * size = (cmph_uint8 *) packed_mphf;
|
register cmph_uint8 * size = (cmph_uint8 *) packed_mphf;
|
||||||
packed_mphf = (cmph_uint32 *)(size + k);
|
packed_mphf = (cmph_uint32 *)(size + k);
|
||||||
@ -911,7 +911,7 @@ static cmph_uint32 brz_bmz8_search_packed(cmph_uint32 *packed_mphf, const char *
|
|||||||
|
|
||||||
static cmph_uint32 brz_fch_search_packed(cmph_uint32 *packed_mphf, const char *key, cmph_uint32 keylen, cmph_uint32 * fingerprint)
|
static cmph_uint32 brz_fch_search_packed(cmph_uint32 *packed_mphf, const char *key, cmph_uint32 keylen, cmph_uint32 * fingerprint)
|
||||||
{
|
{
|
||||||
register CMPH_HASH h0_type = *packed_mphf++;
|
register CMPH_HASH h0_type = (CMPH_HASH)*packed_mphf++;
|
||||||
|
|
||||||
register cmph_uint32 *h0_ptr = packed_mphf;
|
register cmph_uint32 *h0_ptr = packed_mphf;
|
||||||
packed_mphf = (cmph_uint32 *)(((cmph_uint8 *)packed_mphf) + hash_state_packed_size(h0_type));
|
packed_mphf = (cmph_uint32 *)(((cmph_uint8 *)packed_mphf) + hash_state_packed_size(h0_type));
|
||||||
@ -921,9 +921,9 @@ static cmph_uint32 brz_fch_search_packed(cmph_uint32 *packed_mphf, const char *k
|
|||||||
register double c = (double)(*((cmph_uint64*)packed_mphf));
|
register double c = (double)(*((cmph_uint64*)packed_mphf));
|
||||||
packed_mphf += 2;
|
packed_mphf += 2;
|
||||||
|
|
||||||
register CMPH_HASH h1_type = *packed_mphf++;
|
register CMPH_HASH h1_type = (CMPH_HASH)*packed_mphf++;
|
||||||
|
|
||||||
register CMPH_HASH h2_type = *packed_mphf++;
|
register CMPH_HASH h2_type = (CMPH_HASH)*packed_mphf++;
|
||||||
|
|
||||||
register cmph_uint8 * size = (cmph_uint8 *) packed_mphf;
|
register cmph_uint8 * size = (cmph_uint8 *) packed_mphf;
|
||||||
packed_mphf = (cmph_uint32 *)(size + k);
|
packed_mphf = (cmph_uint32 *)(size + k);
|
||||||
@ -972,7 +972,7 @@ static cmph_uint32 brz_fch_search_packed(cmph_uint32 *packed_mphf, const char *k
|
|||||||
cmph_uint32 brz_search_packed(void *packed_mphf, const char *key, cmph_uint32 keylen)
|
cmph_uint32 brz_search_packed(void *packed_mphf, const char *key, cmph_uint32 keylen)
|
||||||
{
|
{
|
||||||
register cmph_uint32 *ptr = (cmph_uint32 *)packed_mphf;
|
register cmph_uint32 *ptr = (cmph_uint32 *)packed_mphf;
|
||||||
register CMPH_ALGO algo = *ptr++;
|
register CMPH_ALGO algo = (CMPH_ALGO)*ptr++;
|
||||||
cmph_uint32 fingerprint[3];
|
cmph_uint32 fingerprint[3];
|
||||||
switch(algo)
|
switch(algo)
|
||||||
{
|
{
|
||||||
|
@ -105,7 +105,7 @@ cmph_t *chd_new(cmph_config_t *mph, double c)
|
|||||||
DEBUGP("packed_chd_phf_size = %u\n", packed_chd_phf_size);
|
DEBUGP("packed_chd_phf_size = %u\n", packed_chd_phf_size);
|
||||||
|
|
||||||
/* Make sure that we have enough space to pack the mphf. */
|
/* Make sure that we have enough space to pack the mphf. */
|
||||||
packed_chd_phf = calloc((size_t)packed_chd_phf_size,(size_t)1);
|
packed_chd_phf = (cmph_uint8 *)calloc((size_t)packed_chd_phf_size,(size_t)1);
|
||||||
|
|
||||||
/* Pack the mphf. */
|
/* Pack the mphf. */
|
||||||
cmph_pack(chd_phf, packed_chd_phf);
|
cmph_pack(chd_phf, packed_chd_phf);
|
||||||
@ -229,14 +229,14 @@ static inline cmph_uint32 _chd_search(void * packed_chd_phf, void * packed_cr, c
|
|||||||
|
|
||||||
cmph_uint32 chd_search(cmph_t *mphf, const char *key, cmph_uint32 keylen)
|
cmph_uint32 chd_search(cmph_t *mphf, const char *key, cmph_uint32 keylen)
|
||||||
{
|
{
|
||||||
register chd_data_t * chd = mphf->data;
|
register chd_data_t * chd = (chd_data_t *)mphf->data;
|
||||||
return _chd_search(chd->packed_chd_phf, chd->packed_cr, key, keylen);
|
return _chd_search(chd->packed_chd_phf, chd->packed_cr, key, keylen);
|
||||||
}
|
}
|
||||||
|
|
||||||
void chd_pack(cmph_t *mphf, void *packed_mphf)
|
void chd_pack(cmph_t *mphf, void *packed_mphf)
|
||||||
{
|
{
|
||||||
chd_data_t *data = (chd_data_t *)mphf->data;
|
chd_data_t *data = (chd_data_t *)mphf->data;
|
||||||
cmph_uint32 * ptr = packed_mphf;
|
cmph_uint32 * ptr = (cmph_uint32 *)packed_mphf;
|
||||||
cmph_uint8 * ptr8;
|
cmph_uint8 * ptr8;
|
||||||
|
|
||||||
// packing packed_cr_size and packed_cr
|
// packing packed_cr_size and packed_cr
|
||||||
@ -263,7 +263,7 @@ cmph_uint32 chd_packed_size(cmph_t *mphf)
|
|||||||
cmph_uint32 chd_search_packed(void *packed_mphf, const char *key, cmph_uint32 keylen)
|
cmph_uint32 chd_search_packed(void *packed_mphf, const char *key, cmph_uint32 keylen)
|
||||||
{
|
{
|
||||||
|
|
||||||
register cmph_uint32 * ptr = packed_mphf;
|
register cmph_uint32 * ptr = (cmph_uint32 *)packed_mphf;
|
||||||
register cmph_uint32 packed_cr_size = *ptr++;
|
register cmph_uint32 packed_cr_size = *ptr++;
|
||||||
register cmph_uint8 * packed_chd_phf = ((cmph_uint8 *) ptr) + packed_cr_size + sizeof(cmph_uint32);
|
register cmph_uint8 * packed_chd_phf = ((cmph_uint8 *) ptr) + packed_cr_size + sizeof(cmph_uint32);
|
||||||
return _chd_search(packed_chd_phf, ptr, key, keylen);
|
return _chd_search(packed_chd_phf, ptr, key, keylen);
|
||||||
|
10
src/chd_ph.c
10
src/chd_ph.c
@ -221,7 +221,7 @@ cmph_uint8 chd_ph_mapping(cmph_config_t *mph, chd_ph_bucket_t * buckets, chd_ph_
|
|||||||
char * key = NULL;
|
char * key = NULL;
|
||||||
cmph_uint32 keylen = 0;
|
cmph_uint32 keylen = 0;
|
||||||
chd_ph_map_item_t * map_item;
|
chd_ph_map_item_t * map_item;
|
||||||
chd_ph_map_item_t * map_items = malloc(chd_ph->m*sizeof(chd_ph_map_item_t));
|
chd_ph_map_item_t * map_items = (chd_ph_map_item_t *)malloc(chd_ph->m*sizeof(chd_ph_map_item_t));
|
||||||
register cmph_uint32 mapping_iterations = 1000;
|
register cmph_uint32 mapping_iterations = 1000;
|
||||||
*max_bucket_size = 0;
|
*max_bucket_size = 0;
|
||||||
while(1)
|
while(1)
|
||||||
@ -317,7 +317,7 @@ chd_ph_sorted_list_t * chd_ph_ordering(chd_ph_bucket_t ** _buckets, chd_ph_item_
|
|||||||
};
|
};
|
||||||
sorted_lists[i-1].size = 0;
|
sorted_lists[i-1].size = 0;
|
||||||
// Store the buckets in a new array which is sorted by bucket sizes
|
// Store the buckets in a new array which is sorted by bucket sizes
|
||||||
output_buckets = calloc(nbuckets, sizeof(chd_ph_bucket_t)); // everything is initialized with zero
|
output_buckets = (chd_ph_bucket_t *)calloc(nbuckets, sizeof(chd_ph_bucket_t)); // everything is initialized with zero
|
||||||
// non_empty_buckets = nbuckets;
|
// non_empty_buckets = nbuckets;
|
||||||
|
|
||||||
for(i = 0; i < nbuckets; i++)
|
for(i = 0; i < nbuckets; i++)
|
||||||
@ -901,7 +901,7 @@ void chd_ph_destroy(cmph_t *mphf)
|
|||||||
|
|
||||||
cmph_uint32 chd_ph_search(cmph_t *mphf, const char *key, cmph_uint32 keylen)
|
cmph_uint32 chd_ph_search(cmph_t *mphf, const char *key, cmph_uint32 keylen)
|
||||||
{
|
{
|
||||||
register chd_ph_data_t * chd_ph = mphf->data;
|
register chd_ph_data_t * chd_ph = (chd_ph_data_t *)mphf->data;
|
||||||
cmph_uint32 hl[3];
|
cmph_uint32 hl[3];
|
||||||
register cmph_uint32 disp,position;
|
register cmph_uint32 disp,position;
|
||||||
register cmph_uint32 probe0_num,probe1_num;
|
register cmph_uint32 probe0_num,probe1_num;
|
||||||
@ -921,7 +921,7 @@ cmph_uint32 chd_ph_search(cmph_t *mphf, const char *key, cmph_uint32 keylen)
|
|||||||
void chd_ph_pack(cmph_t *mphf, void *packed_mphf)
|
void chd_ph_pack(cmph_t *mphf, void *packed_mphf)
|
||||||
{
|
{
|
||||||
chd_ph_data_t *data = (chd_ph_data_t *)mphf->data;
|
chd_ph_data_t *data = (chd_ph_data_t *)mphf->data;
|
||||||
cmph_uint8 * ptr = packed_mphf;
|
cmph_uint8 * ptr = (cmph_uint8 *)packed_mphf;
|
||||||
|
|
||||||
// packing hl type
|
// packing hl type
|
||||||
CMPH_HASH hl_type = hash_get_type(data->hl);
|
CMPH_HASH hl_type = hash_get_type(data->hl);
|
||||||
@ -959,7 +959,7 @@ cmph_uint32 chd_ph_packed_size(cmph_t *mphf)
|
|||||||
|
|
||||||
cmph_uint32 chd_ph_search_packed(void *packed_mphf, const char *key, cmph_uint32 keylen)
|
cmph_uint32 chd_ph_search_packed(void *packed_mphf, const char *key, cmph_uint32 keylen)
|
||||||
{
|
{
|
||||||
register CMPH_HASH hl_type = *(cmph_uint32 *)packed_mphf;
|
register CMPH_HASH hl_type = (CMPH_HASH)*(cmph_uint32 *)packed_mphf;
|
||||||
register cmph_uint8 *hl_ptr = (cmph_uint8 *)(packed_mphf) + 4;
|
register cmph_uint8 *hl_ptr = (cmph_uint8 *)(packed_mphf) + 4;
|
||||||
|
|
||||||
register cmph_uint32 * ptr = (cmph_uint32 *)(hl_ptr + hash_state_packed_size(hl_type));
|
register cmph_uint32 * ptr = (cmph_uint32 *)(hl_ptr + hash_state_packed_size(hl_type));
|
||||||
|
10
src/chm.c
10
src/chm.c
@ -276,7 +276,7 @@ void chm_load(FILE *f, cmph_t *mphf)
|
|||||||
|
|
||||||
cmph_uint32 chm_search(cmph_t *mphf, const char *key, cmph_uint32 keylen)
|
cmph_uint32 chm_search(cmph_t *mphf, const char *key, cmph_uint32 keylen)
|
||||||
{
|
{
|
||||||
chm_data_t *chm = mphf->data;
|
chm_data_t *chm = (chm_data_t *)mphf->data;
|
||||||
cmph_uint32 h1 = hash(chm->hashes[0], key, keylen) % chm->n;
|
cmph_uint32 h1 = hash(chm->hashes[0], key, keylen) % chm->n;
|
||||||
cmph_uint32 h2 = hash(chm->hashes[1], key, keylen) % chm->n;
|
cmph_uint32 h2 = hash(chm->hashes[1], key, keylen) % chm->n;
|
||||||
DEBUGP("key: %s h1: %u h2: %u\n", key, h1, h2);
|
DEBUGP("key: %s h1: %u h2: %u\n", key, h1, h2);
|
||||||
@ -303,7 +303,7 @@ void chm_destroy(cmph_t *mphf)
|
|||||||
void chm_pack(cmph_t *mphf, void *packed_mphf)
|
void chm_pack(cmph_t *mphf, void *packed_mphf)
|
||||||
{
|
{
|
||||||
chm_data_t *data = (chm_data_t *)mphf->data;
|
chm_data_t *data = (chm_data_t *)mphf->data;
|
||||||
cmph_uint8 * ptr = packed_mphf;
|
cmph_uint8 * ptr = (cmph_uint8 *)packed_mphf;
|
||||||
|
|
||||||
// packing h1 type
|
// packing h1 type
|
||||||
CMPH_HASH h1_type = hash_get_type(data->hashes[0]);
|
CMPH_HASH h1_type = hash_get_type(data->hashes[0]);
|
||||||
@ -359,12 +359,12 @@ cmph_uint32 chm_packed_size(cmph_t *mphf)
|
|||||||
*/
|
*/
|
||||||
cmph_uint32 chm_search_packed(void *packed_mphf, const char *key, cmph_uint32 keylen)
|
cmph_uint32 chm_search_packed(void *packed_mphf, const char *key, cmph_uint32 keylen)
|
||||||
{
|
{
|
||||||
register cmph_uint8 *h1_ptr = packed_mphf;
|
register cmph_uint8 *h1_ptr = (cmph_uint8 *)packed_mphf;
|
||||||
register CMPH_HASH h1_type = *((cmph_uint32 *)h1_ptr);
|
register CMPH_HASH h1_type = (CMPH_HASH)(*((cmph_uint32 *)h1_ptr));
|
||||||
h1_ptr += 4;
|
h1_ptr += 4;
|
||||||
|
|
||||||
register cmph_uint8 *h2_ptr = h1_ptr + hash_state_packed_size(h1_type);
|
register cmph_uint8 *h2_ptr = h1_ptr + hash_state_packed_size(h1_type);
|
||||||
register CMPH_HASH h2_type = *((cmph_uint32 *)h2_ptr);
|
register CMPH_HASH h2_type = (CMPH_HASH)(*((cmph_uint32 *)h2_ptr));
|
||||||
h2_ptr += 4;
|
h2_ptr += 4;
|
||||||
|
|
||||||
register cmph_uint32 *g_ptr = (cmph_uint32 *)(h2_ptr + hash_state_packed_size(h2_type));
|
register cmph_uint32 *g_ptr = (cmph_uint32 *)(h2_ptr + hash_state_packed_size(h2_type));
|
||||||
|
@ -70,7 +70,7 @@ void bm_register(const char* name, void (*func)(int), int iters) {
|
|||||||
benchmark.func = func;
|
benchmark.func = func;
|
||||||
benchmark.iters = iters;
|
benchmark.iters = iters;
|
||||||
assert(!find_benchmark(name));
|
assert(!find_benchmark(name));
|
||||||
global_benchmarks = realloc(
|
global_benchmarks = (benchmark_t *)realloc(
|
||||||
global_benchmarks, (length + 2)*sizeof(benchmark_t));
|
global_benchmarks, (length + 2)*sizeof(benchmark_t));
|
||||||
global_benchmarks[length] = benchmark;
|
global_benchmarks[length] = benchmark;
|
||||||
memset(&benchmark, 0, sizeof(benchmark_t)); // pivot
|
memset(&benchmark, 0, sizeof(benchmark_t)); // pivot
|
||||||
|
@ -49,7 +49,7 @@ cmph_t *__cmph_load(FILE *f)
|
|||||||
{
|
{
|
||||||
if (strcmp(algo_name, cmph_names[i]) == 0)
|
if (strcmp(algo_name, cmph_names[i]) == 0)
|
||||||
{
|
{
|
||||||
algo = i;
|
algo = (CMPH_ALGO)(i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (algo == CMPH_COUNT)
|
if (algo == CMPH_COUNT)
|
||||||
|
10
src/fch.c
10
src/fch.c
@ -398,7 +398,7 @@ void fch_load(FILE *f, cmph_t *mphf)
|
|||||||
|
|
||||||
cmph_uint32 fch_search(cmph_t *mphf, const char *key, cmph_uint32 keylen)
|
cmph_uint32 fch_search(cmph_t *mphf, const char *key, cmph_uint32 keylen)
|
||||||
{
|
{
|
||||||
fch_data_t *fch = mphf->data;
|
fch_data_t *fch = (fch_data_t *)mphf->data;
|
||||||
cmph_uint32 h1 = hash(fch->h1, key, keylen) % fch->m;
|
cmph_uint32 h1 = hash(fch->h1, key, keylen) % fch->m;
|
||||||
cmph_uint32 h2 = hash(fch->h2, key, keylen) % fch->m;
|
cmph_uint32 h2 = hash(fch->h2, key, keylen) % fch->m;
|
||||||
h1 = mixh10h11h12 (fch->b, fch->p1, fch->p2, h1);
|
h1 = mixh10h11h12 (fch->b, fch->p1, fch->p2, h1);
|
||||||
@ -423,7 +423,7 @@ void fch_destroy(cmph_t *mphf)
|
|||||||
void fch_pack(cmph_t *mphf, void *packed_mphf)
|
void fch_pack(cmph_t *mphf, void *packed_mphf)
|
||||||
{
|
{
|
||||||
fch_data_t *data = (fch_data_t *)mphf->data;
|
fch_data_t *data = (fch_data_t *)mphf->data;
|
||||||
cmph_uint8 * ptr = packed_mphf;
|
cmph_uint8 * ptr = (cmph_uint8 *)packed_mphf;
|
||||||
|
|
||||||
// packing h1 type
|
// packing h1 type
|
||||||
CMPH_HASH h1_type = hash_get_type(data->h1);
|
CMPH_HASH h1_type = hash_get_type(data->h1);
|
||||||
@ -488,12 +488,12 @@ cmph_uint32 fch_packed_size(cmph_t *mphf)
|
|||||||
*/
|
*/
|
||||||
cmph_uint32 fch_search_packed(void *packed_mphf, const char *key, cmph_uint32 keylen)
|
cmph_uint32 fch_search_packed(void *packed_mphf, const char *key, cmph_uint32 keylen)
|
||||||
{
|
{
|
||||||
register cmph_uint8 *h1_ptr = packed_mphf;
|
register cmph_uint8 *h1_ptr = (cmph_uint8 *)packed_mphf;
|
||||||
register CMPH_HASH h1_type = *((cmph_uint32 *)h1_ptr);
|
register CMPH_HASH h1_type = (CMPH_HASH)*((cmph_uint32 *)h1_ptr);
|
||||||
h1_ptr += 4;
|
h1_ptr += 4;
|
||||||
|
|
||||||
register cmph_uint8 *h2_ptr = h1_ptr + hash_state_packed_size(h1_type);
|
register cmph_uint8 *h2_ptr = h1_ptr + hash_state_packed_size(h1_type);
|
||||||
register CMPH_HASH h2_type = *((cmph_uint32 *)h2_ptr);
|
register CMPH_HASH h2_type = (CMPH_HASH)*((cmph_uint32 *)h2_ptr);
|
||||||
h2_ptr += 4;
|
h2_ptr += 4;
|
||||||
|
|
||||||
register cmph_uint32 *g_ptr = (cmph_uint32 *)(h2_ptr + hash_state_packed_size(h2_type));
|
register cmph_uint32 *g_ptr = (cmph_uint32 *)(h2_ptr + hash_state_packed_size(h2_type));
|
||||||
|
@ -172,13 +172,13 @@ cmph_uint32 fch_buckets_get_nbuckets(fch_buckets_t * buckets)
|
|||||||
|
|
||||||
cmph_uint32 * fch_buckets_get_indexes_sorted_by_size(fch_buckets_t * buckets)
|
cmph_uint32 * fch_buckets_get_indexes_sorted_by_size(fch_buckets_t * buckets)
|
||||||
{
|
{
|
||||||
cmph_uint32 i = 0;
|
cmph_int32 i = 0;
|
||||||
cmph_uint32 sum = 0, value;
|
cmph_uint32 sum = 0, value;
|
||||||
cmph_uint32 *nbuckets_size = (cmph_uint32 *) calloc((size_t)buckets->max_size + 1, sizeof(cmph_uint32));
|
cmph_uint32 *nbuckets_size = (cmph_uint32 *) calloc((size_t)buckets->max_size + 1, sizeof(cmph_uint32));
|
||||||
cmph_uint32 * sorted_indexes = (cmph_uint32 *) calloc((size_t)buckets->nbuckets, sizeof(cmph_uint32));
|
cmph_uint32 * sorted_indexes = (cmph_uint32 *) calloc((size_t)buckets->nbuckets, sizeof(cmph_uint32));
|
||||||
|
|
||||||
// collect how many buckets for each size.
|
// collect how many buckets for each size.
|
||||||
for(i = 0; i < buckets->nbuckets; i++) nbuckets_size[fch_bucket_size(buckets->values + i)] ++;
|
for(i = 0; i < (int)buckets->nbuckets; i++) nbuckets_size[fch_bucket_size(buckets->values + i)] ++;
|
||||||
|
|
||||||
// calculating offset considering a decreasing order of buckets size.
|
// calculating offset considering a decreasing order of buckets size.
|
||||||
value = nbuckets_size[buckets->max_size];
|
value = nbuckets_size[buckets->max_size];
|
||||||
@ -190,7 +190,7 @@ cmph_uint32 * fch_buckets_get_indexes_sorted_by_size(fch_buckets_t * buckets)
|
|||||||
nbuckets_size[i] = sum;
|
nbuckets_size[i] = sum;
|
||||||
|
|
||||||
}
|
}
|
||||||
for(i = 0; i < buckets->nbuckets; i++)
|
for(i = 0; i < (int)buckets->nbuckets; i++)
|
||||||
{
|
{
|
||||||
sorted_indexes[nbuckets_size[fch_bucket_size(buckets->values + i)]] = (cmph_uint32)i;
|
sorted_indexes[nbuckets_size[fch_bucket_size(buckets->values + i)]] = (cmph_uint32)i;
|
||||||
nbuckets_size[fch_bucket_size(buckets->values + i)] ++;
|
nbuckets_size[fch_bucket_size(buckets->values + i)] ++;
|
||||||
|
@ -101,7 +101,7 @@ hash_state_t *hash_state_load(const char *buf, cmph_uint32 buflen)
|
|||||||
{
|
{
|
||||||
if (strcmp(buf, cmph_hash_names[i]) == 0)
|
if (strcmp(buf, cmph_hash_names[i]) == 0)
|
||||||
{
|
{
|
||||||
hashfunc = i;
|
hashfunc = (CMPH_HASH)(i);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -177,7 +177,7 @@ int main(int argc, char **argv)
|
|||||||
{
|
{
|
||||||
if (strcmp(cmph_names[i], optarg) == 0)
|
if (strcmp(cmph_names[i], optarg) == 0)
|
||||||
{
|
{
|
||||||
mph_algo = i;
|
mph_algo = (CMPH_ALGO)i;
|
||||||
valid = 1;
|
valid = 1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -197,7 +197,7 @@ int main(int argc, char **argv)
|
|||||||
if (strcmp(cmph_hash_names[i], optarg) == 0)
|
if (strcmp(cmph_hash_names[i], optarg) == 0)
|
||||||
{
|
{
|
||||||
hashes = (CMPH_HASH *)realloc(hashes, sizeof(CMPH_HASH) * ( nhashes + 2 ));
|
hashes = (CMPH_HASH *)realloc(hashes, sizeof(CMPH_HASH) * ( nhashes + 2 ));
|
||||||
hashes[nhashes] = i;
|
hashes[nhashes] = (CMPH_HASH)i;
|
||||||
hashes[nhashes + 1] = CMPH_HASH_COUNT;
|
hashes[nhashes + 1] = CMPH_HASH_COUNT;
|
||||||
++nhashes;
|
++nhashes;
|
||||||
valid = 1;
|
valid = 1;
|
||||||
|
@ -147,7 +147,7 @@ int main(int argc, char **argv)
|
|||||||
fprintf(stderr, "packed_size = %u\n", packed_size);
|
fprintf(stderr, "packed_size = %u\n", packed_size);
|
||||||
|
|
||||||
/* Make sure that we have enough space to pack the mphf. */
|
/* Make sure that we have enough space to pack the mphf. */
|
||||||
cmph_uint8 * packed_mphf = calloc((size_t)packed_size,(size_t)1);
|
cmph_uint8 * packed_mphf = (cmph_uint8 *)calloc((size_t)packed_size,(size_t)1);
|
||||||
|
|
||||||
/* Pack the mphf. */
|
/* Pack the mphf. */
|
||||||
cmph_pack(mphf, packed_mphf);
|
cmph_pack(mphf, packed_mphf);
|
||||||
|
Loading…
Reference in New Issue
Block a user