Skip to content

Commit 12bb7b1

Browse files
committed
avoid handmade typelists, use tuples
1 parent 7e3954e commit 12bb7b1

File tree

10 files changed

+138
-317
lines changed

10 files changed

+138
-317
lines changed

.gitignore

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
CMakeCache.txt
2+
CMakeFiles
3+
CPackConfig.cmake
4+
CPackSourceConfig.cmake
5+
CTestTestfile.cmake
6+
cmake_install.cmake
7+
install_manifest.txt
8+
Makefile
9+
bin/
10+
Testing/
11+
.gdb_history
12+
*.swp

Generic.cmake

Lines changed: 30 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -5,29 +5,34 @@
55
# Threads
66
#
77
#INCLUDE(FindThreads)
8-
INCLUDE(CheckIncludeFileCXX)
9-
INCLUDE(CheckLibraryExists)
8+
9+
# project() option must be used later
10+
IF(WITH_LLVM)
11+
MESSAGE(STATUS "llvm/clang enabled")
12+
SET(CMAKE_C_COMPILER clang)
13+
SET(CMAKE_CXX_COMPILER clang++)
14+
ENDIF(WITH_LLVM)
15+
enable_language(CXX C)
1016

1117
IF(NOT CMAKE_BUILD_TYPE)
1218
SET (CMAKE_BUILD_TYPE "RELEASE")
1319
MESSAGE(STATUS "default build type set to RELEASE")
20+
ELSE(NOT CMAKE_BUILD_TYPE)
21+
MESSAGE(STATUS "configuring for ${CMAKE_BUILD_TYPE}...")
1422
ENDIF(NOT CMAKE_BUILD_TYPE)
1523

16-
MESSAGE(STATUS "configuring for ${CMAKE_BUILD_TYPE}...")
17-
18-
SET(CMAKE_CXX_FLAGS_RELEASE "${CXXFLAGS} ")
19-
#SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Wconversion " )
20-
SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Woverloaded-virtual " )
21-
SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Wall -W -pedantic -Wno-long-long -Wformat ")
22-
SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Wno-variadic-macros " )
23-
SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Wfloat-equal -Wdisabled-optimization " )
24-
SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Wno-unused-parameter " )
25-
SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -fno-default-inline " )
26-
SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -pthread -D_THREAD_SAFE -pipe" )
27-
SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -D_GNU_SOURCE" )
28-
SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -std=c++0x -g -ggdb" )
29-
SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_RELEASE} -D_DEBUG -O0 -D_FORTIFY_SOURCE=2" )
30-
SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3")
24+
SET(CMAKE_CXX_FLAGS "${CXXFLAGS} ")
25+
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Woverloaded-virtual " )
26+
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -W -pedantic -Wno-long-long -Wformat ")
27+
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-variadic-macros " )
28+
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wfloat-equal -Wdisabled-optimization " )
29+
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unused-parameter " )
30+
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-default-inline " )
31+
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread -D_THREAD_SAFE -pipe" )
32+
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_GNU_SOURCE" )
33+
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++1y -g -ggdb" )
34+
SET(CMAKE_CXX_FLAGS_DEBUG "-D_DEBUG -Og -D_FORTIFY_SOURCE=2 -fno-strict-aliasing -fno-omit-frame-pointer")
35+
SET(CMAKE_CXX_FLAGS_RELEASE "-O3")
3136

3237
IF(WITH_PGO STREQUAL "generate")
3338
SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -fprofile-generate")
@@ -63,8 +68,10 @@ IF(WITH_GCOV)
6368
SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} --coverage")
6469
ENDIF(WITH_GCOV)
6570

71+
INCLUDE(CheckIncludeFileCXX)
72+
INCLUDE(CheckLibraryExists)
6673
SET(EXECUTABLE_OUTPUT_PATH bin)
67-
SET(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)
74+
SET(LIBRARY_OUTPUT_PATH lib)
6875

6976
INCLUDE_DIRECTORIES(include)
7077

@@ -121,7 +128,7 @@ IF(LIBTUT_INCLUDE)
121128

122129
MACRO(GEN_ADD_TEST binname srcname lib )
123130
ADD_EXECUTABLE(${binname} ${srcname} )
124-
TARGET_LINK_LIBRARIES(${binname} ${lib})
131+
TARGET_LINK_LIBRARIES(${binname} ${lib} ${LLIB})
125132
ADD_TEST(${binname} ./bin/${binname} )
126133
MESSAGE(STATUS "libtut test added :: ${srcname}")
127134
ENDMACRO(GEN_ADD_TEST)
@@ -187,4 +194,8 @@ IF(MUDFLAP_LIBRARY)
187194
SET (LLIB ${LLIB} mudflapth)
188195
ENDIF(MUDFLAP_LIBRARY)
189196

197+
IF(WITH_TCMALLOC)
198+
MESSAGE(STATUS "tcmalloc enabled")
199+
SET (LLIB ${LLIB} tcmalloc)
200+
ENDIF(WITH_TCMALLOC)
190201

include/CDBRow.hpp

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ class Row {
3030
Util::SyncWriteFile disk;
3131
//Util::HFile disk;
3232
const std::string suffix;
33+
const UINT_64 id;
3334

3435
AR lzo;
3536
typedef typename AR::BufferT ArBufferT;
@@ -38,11 +39,15 @@ class Row {
3839
public:
3940
typedef T value_type;
4041

41-
explicit Row(const std::string& suffixIn)
42-
: suffix(suffixIn)
42+
explicit Row(const std::string& suffixIn, UINT_64 idIn)
43+
: suffix(suffixIn), id(idIn)
4344
{
4445
}
4546

47+
UINT_64 get_column() const {
48+
return id;
49+
}
50+
4651
void reserve(size_t s)
4752
{
4853
buf.reserve(s);

include/CDBtl.hpp

Lines changed: 27 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,7 @@ namespace CDB {
2929
template<class Data>
3030
void push_back(const Data& d) {
3131
Push push;
32-
// FIXME: rm const_cast
33-
Data& d_const = const_cast<Data&>(d);
34-
ForEach2(acc, d_const, push);
32+
tuple_for_each2(push, acc, d);
3533
}
3634

3735
struct Open {
@@ -45,9 +43,9 @@ namespace CDB {
4543
: fn(fn_), di(di_), columns(columns_) {}
4644

4745
template<class T>
48-
void operator()(T& t, INT_32 len)
46+
void operator()(T& t)
4947
{
50-
if (1 << len & columns) {
48+
if (t.get_column() & columns) {
5149
//std::cout << "open for [" << t.name() << "]" << std::endl;
5250
t.open(fn, di);
5351
}
@@ -56,7 +54,7 @@ namespace CDB {
5654
void open(const std::string& fn, CDB::Direction di, const UINT_64 columns)
5755
{
5856
Open op(fn, di, columns);
59-
ForEachN(acc, op);
57+
tuple_for_each(op, acc);
6058
}
6159

6260
struct Reserve {
@@ -72,7 +70,7 @@ namespace CDB {
7270
void reserve(size_t s)
7371
{
7472
Reserve op_res(s);
75-
ForEach(acc, op_res);
73+
tuple_for_each(op_res, acc);
7674
}
7775

7876
struct Write {
@@ -84,7 +82,7 @@ namespace CDB {
8482
};
8583
void write() {
8684
Write wr;
87-
ForEach(acc, wr);
85+
tuple_for_each(wr, acc);
8886
}
8987

9088
struct Read {
@@ -93,8 +91,8 @@ namespace CDB {
9391
Read(const UINT_64 columns_) : columns(columns_), sz(0) {}
9492

9593
template<class T>
96-
void operator()(T& t, INT_32 len){
97-
if (1 << len & columns) {
94+
void operator()(T& t){
95+
if (t.get_column() & columns) {
9896
size_t rc = t.read();
9997
if (!sz) {
10098
sz = rc;
@@ -107,7 +105,7 @@ namespace CDB {
107105
};
108106
size_t read(const UINT_64 columns) {
109107
Read re(columns);
110-
ForEachN(acc, re);
108+
tuple_for_each(re, acc);
111109
return re.sz;
112110
}
113111

@@ -119,7 +117,7 @@ namespace CDB {
119117
};
120118
void close() {
121119
Close cl;
122-
ForEach(acc, cl);
120+
tuple_for_each(cl, acc);
123121
}
124122

125123
struct IsEof {
@@ -130,9 +128,9 @@ namespace CDB {
130128
: stop(false), columns(columns_), rc(false) {}
131129

132130
template<class T>
133-
void operator()(T& t, INT_32 len)
131+
void operator()(T& t)
134132
{
135-
if (!stop && 1 << len & columns) {
133+
if (!stop && t.get_column() & columns) {
136134
//std::cout << "eof for [" << t.name() << "]" << std::endl;
137135
rc = t.eof();
138136
stop = true;
@@ -141,7 +139,7 @@ namespace CDB {
141139
};
142140
bool eof(const UINT_64 columns) {
143141
IsEof iseof(columns);
144-
ForEachN(acc, iseof);
142+
tuple_for_each(iseof, acc);
145143
return iseof.rc;
146144
}
147145
};
@@ -156,19 +154,21 @@ namespace CDB {
156154
Index index;
157155

158156
struct FindColumns {
159-
UINT_64 rc;
160-
FindColumns() : rc(0) {}
157+
UINT_64 counter = 0;
158+
UINT_64 rc = 0;
159+
FindColumns() {}
161160
template<class T>
162-
void operator()(T& t, INT_32 len) {
161+
void operator()(T& t) {
163162
if (!t.empty()) {
164-
rc |= 1 << len;
163+
rc |= 1 << counter;
165164
}
165+
counter++;
166166
}
167167
};
168168
UINT_64 columns ()
169169
{
170170
FindColumns fc;
171-
ForEachN(index, fc);
171+
tuple_for_each(fc, index);
172172
return fc.rc;
173173
}
174174

@@ -191,7 +191,7 @@ namespace CDB {
191191
bool operator()(Acc& ac, const size_t rown)
192192
{
193193
CheckIndex cindex(rown);
194-
ForEach2(index, ac.acc, cindex);
194+
tuple_for_each2(cindex, index, ac.acc);
195195
return cindex.rc;
196196
}
197197
};
@@ -200,24 +200,24 @@ namespace CDB {
200200

201201
template<class T>
202202
struct MakeRoot {
203-
typedef typename TL::ForEachT<T, TL::DeriveData>::Result Data;
203+
typedef typename TL::apply_t<TL::DeriveData, T>::Result Data;
204204
typedef TL::Accessor<T> Accessor;
205205

206-
typedef typename TL::ForEachT<T, TL::DeriveIndex>::Result Index;
206+
typedef typename TL::apply_t<TL::DeriveIndex, T>::Result Index;
207207
typedef TL::Narrow<Accessor, Index> Narrow;
208208
};
209209

210210
#define CDB_BEGIN_TABLE(NAME) \
211-
typedef Util::TL::TypeList<Util::TL::null_type, Util::TL::null_type>
211+
typedef std::tuple<>
212212

213213
#define CDB_COLUMN(NAME, TYPE) \
214214
members_before_##NAME; \
215+
static const UINT_64 ColumnName_##NAME = 1 << std::tuple_size<members_before_##NAME>::value ; \
215216
struct NAME##_base { static const char* name() { return "."#NAME; } }; \
216217
struct NAME##_row : public CDB::Row<TYPE> { \
217-
NAME##_row() : CDB::Row<TYPE>(NAME##_base::name()) {} \
218+
NAME##_row() : CDB::Row<TYPE>(NAME##_base::name(), ColumnName_##NAME) {} \
218219
}; \
219-
typedef Util::TL::AddTail<members_before_##NAME, NAME##_row>::Result NAME##current; \
220-
static const UINT_64 ColumnName_##NAME = 1 << members_before_##NAME::length ; \
220+
typedef Util::TL::append_tail<NAME##_row, members_before_##NAME>::Result NAME##current; \
221221
typedef NAME##current
222222

223223
#define CDB_END_TABLE(NAME) \

include/MDCtl.hpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -99,18 +99,18 @@ namespace MDC {
9999
void insert(Key& key, UINT_32 cube)
100100
{ // insert a value to index
101101
Inserter inserter(cube);
102-
ForEach2(key, index, inserter);
102+
tuple_for_each2(inserter, key, index);
103103
}
104104
template<class N>
105105
void lookup(Util::Index& cubes, N& narrow)
106106
{ // find clusters's we going to process
107107
Narrower na(cubes);
108-
ForEach2(index, narrow.limit, na);
108+
tuple_for_each2(na, index, narrow.limit);
109109
}
110110
size_t mem_used()
111111
{ // return index size (bitset only)
112112
MemUsageCounter muc;
113-
ForEach(index, muc);
113+
tuple_for_each(muc, index);
114114
return muc.counter;
115115
}
116116
};
@@ -142,7 +142,7 @@ namespace MDC {
142142
bool empty()
143143
{
144144
CheckIfEmpty ce;
145-
ForEach(limit, ce);
145+
tuple_for_each(ce, limit);
146146
return ce.empty;
147147
}
148148
};
@@ -156,10 +156,10 @@ namespace MDC {
156156
typedef KeyT Key;
157157
typedef ValueT Val;
158158

159-
typedef typename TL::ForEachT<Key, TL::DeriveIndex>::Result IndexTL;
159+
typedef typename TL::apply_t<TL::DeriveIndex, Key>::Result IndexTL;
160160
typedef TL::MakeIndex<Key, IndexTL> Index;
161161

162-
typedef typename TL::ForEachT<Key, TL::DeriveLimit>::Result LimitTL;
162+
typedef typename TL::apply_t<TL::DeriveLimit, Key>::Result LimitTL;
163163
typedef TL::MakeNarrow<LimitTL> Narrow;
164164
};
165165

0 commit comments

Comments
 (0)