some header files are splitted (WORK IN PROGRESS)
This commit is contained in:
parent
b94cae12d1
commit
2b1fc70695
@ -184,22 +184,25 @@ EXECUTE_PROCESS(
|
|||||||
# target_link_libraries(query_hasher ${fmt_static_lib})
|
# target_link_libraries(query_hasher ${fmt_static_lib})
|
||||||
|
|
||||||
# hard coded implementation of queries
|
# hard coded implementation of queries
|
||||||
add_executable(
|
# add_executable(
|
||||||
queries
|
# queries
|
||||||
src/query_engine/main_queries.cpp
|
# src/query_engine/main_queries.cpp
|
||||||
src/storage/vertices.cpp
|
# src/mvcc/id.cpp
|
||||||
src/storage/model/properties/property.cpp
|
# src/storage/label_store.cpp
|
||||||
src/storage/model/properties/null.cpp
|
# src/storage/vertices.cpp
|
||||||
src/storage/model/properties/bool.cpp
|
# src/storage/model/label.cpp
|
||||||
src/storage/model/properties/string.cpp
|
# src/storage/model/label_collection.cpp
|
||||||
src/storage/model/properties/properties.cpp
|
# src/storage/model/properties/property.cpp
|
||||||
src/storage/locking/record_lock.cpp
|
# src/storage/model/properties/null.cpp
|
||||||
src/storage/vertices.cpp
|
# src/storage/model/properties/bool.cpp
|
||||||
src/storage/vertex_accessor.cpp
|
# src/storage/model/properties/string.cpp
|
||||||
src/transactions/transaction.cpp
|
# src/storage/model/properties/properties.cpp
|
||||||
)
|
# src/storage/locking/record_lock.cpp
|
||||||
target_link_libraries(queries ${fmt_static_lib})
|
# src/storage/vertex_accessor.cpp
|
||||||
|
# src/transactions/transaction.cpp
|
||||||
|
# )
|
||||||
|
# target_link_libraries(queries ${fmt_static_lib})
|
||||||
|
|
||||||
# tests
|
# tests
|
||||||
# enable_testing()
|
enable_testing()
|
||||||
# add_subdirectory(tests)
|
add_subdirectory(tests)
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <stdexcept>
|
#include <stdexcept>
|
||||||
#include <dlfcn.h>
|
#include <dlfcn.h>
|
||||||
#include <atomic>
|
#include <atomic>
|
||||||
|
|
||||||
#include <iostream>
|
|
||||||
using std::cout;
|
using std::cout;
|
||||||
using std::endl;
|
using std::endl;
|
||||||
|
|
25
include/mvcc/id.hpp
Normal file
25
include/mvcc/id.hpp
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <ostream>
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
#include "utils/total_ordering.hpp"
|
||||||
|
|
||||||
|
class Id : public TotalOrdering<Id>
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Id() = default;
|
||||||
|
|
||||||
|
Id(uint64_t id);
|
||||||
|
|
||||||
|
friend bool operator<(const Id& a, const Id& b);
|
||||||
|
|
||||||
|
friend bool operator==(const Id& a, const Id& b);
|
||||||
|
|
||||||
|
friend std::ostream& operator<<(std::ostream& stream, const Id& id);
|
||||||
|
|
||||||
|
operator uint64_t() const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
uint64_t id {0};
|
||||||
|
};
|
21
include/storage/label_store.hpp
Normal file
21
include/storage/label_store.hpp
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <stdexcept>
|
||||||
|
|
||||||
|
#include "storage/model/label.hpp"
|
||||||
|
#include "data_structures/concurrent/concurrent_set.hpp"
|
||||||
|
|
||||||
|
class LabelStore
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
const Label& find_or_create(const std::string& name);
|
||||||
|
|
||||||
|
bool contains(const std::string& name); // TODO: const
|
||||||
|
|
||||||
|
// TODO: implement find method
|
||||||
|
// return { Label, is_found }
|
||||||
|
|
||||||
|
private:
|
||||||
|
ConcurrentSet<Label> labels;
|
||||||
|
};
|
30
include/storage/model/label.hpp
Normal file
30
include/storage/model/label.hpp
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <ostream>
|
||||||
|
|
||||||
|
#include "utils/total_ordering.hpp"
|
||||||
|
#include "utils/reference_wrapper.hpp"
|
||||||
|
|
||||||
|
class Label : public TotalOrdering<Label>
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Label(const std::string& name);
|
||||||
|
Label(std::string&& name);
|
||||||
|
|
||||||
|
Label(const Label&) = default;
|
||||||
|
Label(Label&&) = default;
|
||||||
|
|
||||||
|
friend bool operator<(const Label& lhs, const Label& rhs);
|
||||||
|
|
||||||
|
friend bool operator==(const Label& lhs, const Label& rhs);
|
||||||
|
|
||||||
|
friend std::ostream& operator<<(std::ostream& stream, const Label& label);
|
||||||
|
|
||||||
|
operator const std::string&() const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::string name;
|
||||||
|
};
|
||||||
|
|
||||||
|
using label_ref_t = ReferenceWrapper<const Label>;
|
27
include/storage/model/label_collection.hpp
Normal file
27
include/storage/model/label_collection.hpp
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <set>
|
||||||
|
|
||||||
|
#include "storage/model/label.hpp"
|
||||||
|
|
||||||
|
class LabelCollection
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
auto begin();
|
||||||
|
auto begin() const;
|
||||||
|
auto cbegin() const;
|
||||||
|
|
||||||
|
auto end();
|
||||||
|
auto end() const;
|
||||||
|
auto cend() const;
|
||||||
|
|
||||||
|
bool add(const Label& label);
|
||||||
|
bool has(const Label& label) const;
|
||||||
|
size_t count() const;
|
||||||
|
bool remove(const Label& label);
|
||||||
|
void clear();
|
||||||
|
const std::set<label_ref_t>& operator()() const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::set<label_ref_t> _labels;
|
||||||
|
};
|
9
include/storage/model/properties/all.hpp
Normal file
9
include/storage/model/properties/all.hpp
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "storage/model/properties/bool.hpp"
|
||||||
|
#include "storage/model/properties/double.hpp"
|
||||||
|
#include "storage/model/properties/float.hpp"
|
||||||
|
#include "storage/model/properties/int32.hpp"
|
||||||
|
#include "storage/model/properties/int64.hpp"
|
||||||
|
#include "storage/model/properties/string.hpp"
|
||||||
|
|
@ -1,13 +1,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "storage/model/properties/property.hpp"
|
#include "storage/model/properties/property.hpp"
|
||||||
|
#include "storage/model/properties/all.hpp"
|
||||||
#include "storage/model/properties/bool.hpp"
|
|
||||||
#include "storage/model/properties/double.hpp"
|
|
||||||
#include "storage/model/properties/float.hpp"
|
|
||||||
#include "storage/model/properties/int32.hpp"
|
|
||||||
#include "storage/model/properties/int64.hpp"
|
|
||||||
#include "storage/model/properties/string.hpp"
|
|
||||||
|
|
||||||
template <class Handler>
|
template <class Handler>
|
||||||
void accept(Property &property, Handler &h)
|
void accept(Property &property, Handler &h)
|
||||||
|
@ -1,12 +0,0 @@
|
|||||||
## Dynamic Code
|
|
||||||
|
|
||||||
```
|
|
||||||
man nm
|
|
||||||
|
|
||||||
cd memgraph/dc
|
|
||||||
cd example
|
|
||||||
clang++ -std=c++1y mysql.cpp -o ../tmp/mysql.so -shared -fPIC
|
|
||||||
clang++ -std=c++1y memsql.cpp -o ../tmp/memsql.so -shared -fPIC
|
|
||||||
cd ..
|
|
||||||
clang++ -std=c++1y test.cpp -o test.out -ldl
|
|
||||||
```
|
|
@ -1,22 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#include <iostream>
|
|
||||||
|
|
||||||
using namespace std;
|
|
||||||
|
|
||||||
class db
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
// If virtual methods don't have = 0 the compiler
|
|
||||||
// won't create appropriate _ZTI symbol inside
|
|
||||||
// the .so lib. That will lead to undefined symbol
|
|
||||||
// error while the library is loading.
|
|
||||||
//
|
|
||||||
// TODO: why?
|
|
||||||
virtual void name() const = 0;
|
|
||||||
virtual void type() const = 0;
|
|
||||||
virtual ~db() {}
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef db* (*produce_t)();
|
|
||||||
typedef void (*destruct_t)(db*);
|
|
@ -1,28 +0,0 @@
|
|||||||
#include "db.hpp"
|
|
||||||
|
|
||||||
class neo4j : public db
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
|
|
||||||
void name() const override
|
|
||||||
{
|
|
||||||
cout << "Neo4j" << endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
void type() const override
|
|
||||||
{
|
|
||||||
cout << "Graph" << endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
~neo4j() {}
|
|
||||||
};
|
|
||||||
|
|
||||||
extern "C" db* produce()
|
|
||||||
{
|
|
||||||
return new neo4j();
|
|
||||||
}
|
|
||||||
|
|
||||||
extern "C" void destruct(db* p)
|
|
||||||
{
|
|
||||||
delete p;
|
|
||||||
}
|
|
@ -1,28 +0,0 @@
|
|||||||
#include "db.hpp"
|
|
||||||
|
|
||||||
class postgresql : public db
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
|
|
||||||
void name() const override
|
|
||||||
{
|
|
||||||
cout << "PostgreSQL" << endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
void type() const override
|
|
||||||
{
|
|
||||||
cout << "Relational" << endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
~postgresql() {}
|
|
||||||
};
|
|
||||||
|
|
||||||
extern "C" db* produce()
|
|
||||||
{
|
|
||||||
return new postgresql();
|
|
||||||
}
|
|
||||||
|
|
||||||
extern "C" void destruct(db* p)
|
|
||||||
{
|
|
||||||
delete p;
|
|
||||||
}
|
|
2
src/dc/tmp/.gitignore
vendored
2
src/dc/tmp/.gitignore
vendored
@ -1,2 +0,0 @@
|
|||||||
/*
|
|
||||||
!.gitignore
|
|
24
src/mvcc/id.cpp
Normal file
24
src/mvcc/id.cpp
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
#include "mvcc/id.hpp"
|
||||||
|
|
||||||
|
|
||||||
|
Id::Id(uint64_t id) : id(id) {}
|
||||||
|
|
||||||
|
bool operator<(const Id& a, const Id& b)
|
||||||
|
{
|
||||||
|
return a.id < b.id;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool operator==(const Id& a, const Id& b)
|
||||||
|
{
|
||||||
|
return a.id == b.id;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::ostream& operator<<(std::ostream& stream, const Id& id)
|
||||||
|
{
|
||||||
|
return stream << id.id;
|
||||||
|
}
|
||||||
|
|
||||||
|
Id::operator uint64_t() const
|
||||||
|
{
|
||||||
|
return id;
|
||||||
|
}
|
@ -1,36 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#include <ostream>
|
|
||||||
#include <stdint.h>
|
|
||||||
#include "utils/total_ordering.hpp"
|
|
||||||
|
|
||||||
class Id : public TotalOrdering<Id>
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
Id() = default;
|
|
||||||
|
|
||||||
Id(uint64_t id) : id(id) {}
|
|
||||||
|
|
||||||
friend bool operator<(const Id& a, const Id& b)
|
|
||||||
{
|
|
||||||
return a.id < b.id;
|
|
||||||
}
|
|
||||||
|
|
||||||
friend bool operator==(const Id& a, const Id& b)
|
|
||||||
{
|
|
||||||
return a.id == b.id;
|
|
||||||
}
|
|
||||||
|
|
||||||
friend std::ostream& operator<<(std::ostream& stream, const Id& id)
|
|
||||||
{
|
|
||||||
return stream << id.id;
|
|
||||||
}
|
|
||||||
|
|
||||||
operator uint64_t() const
|
|
||||||
{
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
|
||||||
uint64_t id {0};
|
|
||||||
};
|
|
@ -1,5 +1,6 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <tuple>
|
#include <tuple>
|
||||||
#include <unordered_map>
|
#include <unordered_map>
|
||||||
@ -13,7 +14,6 @@
|
|||||||
#include "utils/string/transform.hpp"
|
#include "utils/string/transform.hpp"
|
||||||
#include "utils/variadic/variadic.hpp"
|
#include "utils/variadic/variadic.hpp"
|
||||||
|
|
||||||
#include <iostream>
|
|
||||||
|
|
||||||
template <class T, class V>
|
template <class T, class V>
|
||||||
void store_query_param(code_args_t &arguments, V &&v)
|
void store_query_param(code_args_t &arguments, V &&v)
|
||||||
|
13
src/storage/label_store.cpp
Normal file
13
src/storage/label_store.cpp
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
#include "storage/label_store.hpp"
|
||||||
|
|
||||||
|
const Label& LabelStore::find_or_create(const std::string& name)
|
||||||
|
{
|
||||||
|
auto accessor = labels.access();
|
||||||
|
return accessor.insert(Label(name)).first;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool LabelStore::contains(const std::string& name) // const
|
||||||
|
{
|
||||||
|
auto accessor = labels.access();
|
||||||
|
return accessor.find(Label(name)) != accessor.end();
|
||||||
|
}
|
@ -1,29 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#include <stdexcept>
|
|
||||||
|
|
||||||
#include "model/label.hpp"
|
|
||||||
#include "data_structures/concurrent/concurrent_set.hpp"
|
|
||||||
|
|
||||||
class LabelStore
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
|
|
||||||
const Label& find_or_create(const std::string& name)
|
|
||||||
{
|
|
||||||
auto accessor = labels.access();
|
|
||||||
return accessor.insert(Label(name)).first;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool contains(const std::string& name) // const
|
|
||||||
{
|
|
||||||
auto accessor = labels.access();
|
|
||||||
return accessor.find(Label(name)) != accessor.end();
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO: implement find method
|
|
||||||
// return { Label, is_found }
|
|
||||||
|
|
||||||
private:
|
|
||||||
ConcurrentSet<Label> labels;
|
|
||||||
};
|
|
24
src/storage/model/label.cpp
Normal file
24
src/storage/model/label.cpp
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
#include "storage/model/label.hpp"
|
||||||
|
|
||||||
|
Label::Label(const std::string& name) : name(name) {}
|
||||||
|
Label::Label(std::string&& name) : name(std::move(name)) {}
|
||||||
|
|
||||||
|
bool operator<(const Label& lhs, const Label& rhs)
|
||||||
|
{
|
||||||
|
return lhs.name < rhs.name;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool operator==(const Label& lhs, const Label& rhs)
|
||||||
|
{
|
||||||
|
return lhs.name == rhs.name;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::ostream& operator<<(std::ostream& stream, const Label& label)
|
||||||
|
{
|
||||||
|
return stream << label.name;
|
||||||
|
}
|
||||||
|
|
||||||
|
Label::operator const std::string&() const
|
||||||
|
{
|
||||||
|
return name;
|
||||||
|
}
|
@ -1,42 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#include <stdint.h>
|
|
||||||
#include <ostream>
|
|
||||||
|
|
||||||
#include "utils/total_ordering.hpp"
|
|
||||||
#include "utils/reference_wrapper.hpp"
|
|
||||||
|
|
||||||
class Label : public TotalOrdering<Label>
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
Label(const std::string& name) : name(name) {}
|
|
||||||
Label(std::string&& name) : name(std::move(name)) {}
|
|
||||||
|
|
||||||
Label(const Label&) = default;
|
|
||||||
Label(Label&&) = default;
|
|
||||||
|
|
||||||
friend bool operator<(const Label& lhs, const Label& rhs)
|
|
||||||
{
|
|
||||||
return lhs.name < rhs.name;
|
|
||||||
}
|
|
||||||
|
|
||||||
friend bool operator==(const Label& lhs, const Label& rhs)
|
|
||||||
{
|
|
||||||
return lhs.name == rhs.name;
|
|
||||||
}
|
|
||||||
|
|
||||||
friend std::ostream& operator<<(std::ostream& stream, const Label& label)
|
|
||||||
{
|
|
||||||
return stream << label.name;
|
|
||||||
}
|
|
||||||
|
|
||||||
operator const std::string&() const
|
|
||||||
{
|
|
||||||
return name;
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
|
||||||
std::string name;
|
|
||||||
};
|
|
||||||
|
|
||||||
using label_ref_t = ReferenceWrapper<const Label>;
|
|
43
src/storage/model/label_collection.cpp
Normal file
43
src/storage/model/label_collection.cpp
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
#include "storage/model/label_collection.hpp"
|
||||||
|
|
||||||
|
auto LabelCollection::begin() { return _labels.begin(); }
|
||||||
|
auto LabelCollection::begin() const { return _labels.begin(); }
|
||||||
|
auto LabelCollection::cbegin() const { return _labels.begin(); }
|
||||||
|
|
||||||
|
auto LabelCollection::end() { return _labels.end(); }
|
||||||
|
auto LabelCollection::end() const { return _labels.end(); }
|
||||||
|
auto LabelCollection::cend() const { return _labels.end(); }
|
||||||
|
|
||||||
|
bool LabelCollection::add(const Label& label)
|
||||||
|
{
|
||||||
|
return _labels.insert(label_ref_t(label)).second;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool LabelCollection::has(const Label& label) const
|
||||||
|
{
|
||||||
|
return _labels.count(label);
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t LabelCollection::count() const {
|
||||||
|
return _labels.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool LabelCollection::remove(const Label& label)
|
||||||
|
{
|
||||||
|
auto it = _labels.find(label);
|
||||||
|
|
||||||
|
if(it == _labels.end())
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return _labels.erase(it), true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void LabelCollection::clear()
|
||||||
|
{
|
||||||
|
_labels.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
const std::set<label_ref_t>& LabelCollection::operator()() const
|
||||||
|
{
|
||||||
|
return _labels;
|
||||||
|
}
|
@ -1,54 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#include <set>
|
|
||||||
|
|
||||||
#include "label.hpp"
|
|
||||||
|
|
||||||
class LabelCollection
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
auto begin() { return _labels.begin(); }
|
|
||||||
auto begin() const { return _labels.begin(); }
|
|
||||||
auto cbegin() const { return _labels.begin(); }
|
|
||||||
|
|
||||||
auto end() { return _labels.end(); }
|
|
||||||
auto end() const { return _labels.end(); }
|
|
||||||
auto cend() const { return _labels.end(); }
|
|
||||||
|
|
||||||
bool add(const Label& label)
|
|
||||||
{
|
|
||||||
return _labels.insert(label_ref_t(label)).second;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool has(const Label& label) const
|
|
||||||
{
|
|
||||||
return _labels.count(label);
|
|
||||||
}
|
|
||||||
|
|
||||||
size_t count() const {
|
|
||||||
return _labels.size();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool remove(const Label& label)
|
|
||||||
{
|
|
||||||
auto it = _labels.find(label);
|
|
||||||
|
|
||||||
if(it == _labels.end())
|
|
||||||
return false;
|
|
||||||
|
|
||||||
return _labels.erase(it), true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void clear()
|
|
||||||
{
|
|
||||||
_labels.clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
const std::set<label_ref_t>& operator()() const
|
|
||||||
{
|
|
||||||
return _labels;
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
|
||||||
std::set<label_ref_t> _labels;
|
|
||||||
};
|
|
@ -1,6 +1,5 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "storage/model/properties/all.hpp"
|
|
||||||
#include "storage/model/properties/properties.hpp"
|
#include "storage/model/properties/properties.hpp"
|
||||||
#include "storage/model/properties/handler.hpp"
|
#include "storage/model/properties/handler.hpp"
|
||||||
|
|
||||||
|
@ -27,7 +27,7 @@ public:
|
|||||||
|
|
||||||
~Pool()
|
~Pool()
|
||||||
{
|
{
|
||||||
alive.store(false, std::memory_order_release);
|
alive.store(false, std::memory_order_seq_cst);
|
||||||
cond.notify_all();
|
cond.notify_all();
|
||||||
|
|
||||||
for(auto& thread : threads)
|
for(auto& thread : threads)
|
||||||
|
@ -2,14 +2,14 @@
|
|||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <thread>
|
#include <thread>
|
||||||
|
|
||||||
#include "data_structures/skiplist/skiplist.hpp"
|
#include "data_structures/concurrent/concurrent_map.hpp"
|
||||||
#include "data_structures/static_array.hpp"
|
#include "data_structures/static_array.hpp"
|
||||||
#include "utils/assert.hpp"
|
#include "utils/assert.hpp"
|
||||||
#include "utils/sysinfo/memory.hpp"
|
#include "utils/sysinfo/memory.hpp"
|
||||||
|
|
||||||
using std::cout;
|
using std::cout;
|
||||||
using std::endl;
|
using std::endl;
|
||||||
using skiplist_t = SkipList<int, int>;
|
using skiplist_t = ConcurrentMap<int, int>;
|
||||||
using namespace std::chrono_literals;
|
using namespace std::chrono_literals;
|
||||||
|
|
||||||
#define THREADS_NO 1
|
#define THREADS_NO 1
|
||||||
@ -77,7 +77,7 @@ int main()
|
|||||||
permanent_assert(iterator_counter == 0, "deleted elements");
|
permanent_assert(iterator_counter == 0, "deleted elements");
|
||||||
}
|
}
|
||||||
|
|
||||||
std::this_thread::sleep_for(100s);
|
std::this_thread::sleep_for(1s);
|
||||||
|
|
||||||
// TODO: test GC and memory
|
// TODO: test GC and memory
|
||||||
|
|
||||||
|
@ -1,12 +1,36 @@
|
|||||||
|
// TODO: include this into CMakeLists
|
||||||
|
|
||||||
|
// compile the shared library
|
||||||
|
// clang++ -std=c++1y mysql.cpp -o ../tmp/mysql.so -shared -fPIC
|
||||||
|
// clang++ -std=c++1y memsql.cpp -o ../tmp/memsql.so -shared -fPIC
|
||||||
|
// clang++ -std=c++1y dynamic_lib.cpp -o test.out -ldl
|
||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <iterator>
|
#include <iterator>
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
#include "example/db.hpp"
|
|
||||||
#include "dynamic_lib.hpp"
|
#include "dc/dynamic_lib.hpp"
|
||||||
#include "utils/string/file.hpp"
|
#include "utils/string/file.hpp"
|
||||||
|
|
||||||
|
class db
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
// If virtual methods don't have = 0 the compiler
|
||||||
|
// won't create appropriate _ZTI symbol inside
|
||||||
|
// the .so lib. That will lead to undefined symbol
|
||||||
|
// error while the library is loading.
|
||||||
|
//
|
||||||
|
// TODO: why?
|
||||||
|
virtual void name() const = 0;
|
||||||
|
virtual void type() const = 0;
|
||||||
|
virtual ~db() {}
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef db* (*produce_t)();
|
||||||
|
typedef void (*destruct_t)(db*);
|
||||||
|
|
||||||
using std::cout;
|
using std::cout;
|
||||||
using std::endl;
|
using std::endl;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user