templated the C++ codes
This commit is contained in:
parent
9a68f6970d
commit
1426a742dc
@ -17,22 +17,23 @@
|
||||
#define TL_UNLIKELY(x) __builtin_expect(!!(x), 0)
|
||||
#endif /* TL_UNLIKELY */
|
||||
|
||||
template<typename T>
|
||||
class TurboList {
|
||||
int *old;
|
||||
int *nex;
|
||||
T *old;
|
||||
T *nex;
|
||||
|
||||
uint32_t mid; // non-inclusive . . . m
|
||||
uint32_t end; // non-inclusive e . . . .
|
||||
|
||||
uint32_t capacity;
|
||||
|
||||
TL_NOINLINE void grow_and_insert(int elem) noexcept {
|
||||
TL_NOINLINE void grow_and_insert(T elem) noexcept {
|
||||
// assert(mid == 0);
|
||||
if(old) free(old);
|
||||
old = nex;
|
||||
mid = end;
|
||||
capacity *= 2;
|
||||
nex = (int *) malloc(this->capacity * sizeof(int));
|
||||
nex = (int *) malloc(this->capacity * sizeof(T));
|
||||
|
||||
// Will go into the INSERT code path here
|
||||
insert(elem);
|
||||
@ -45,7 +46,7 @@ public:
|
||||
end(initial_size),
|
||||
capacity(initial_cap) {
|
||||
|
||||
nex = (int *) malloc(this->capacity * sizeof(int));
|
||||
nex = (int *) malloc(this->capacity * sizeof(T));
|
||||
}
|
||||
|
||||
inline ~TurboList() noexcept {
|
||||
@ -53,11 +54,11 @@ public:
|
||||
if(old) free(old);
|
||||
}
|
||||
|
||||
inline int& operator[](uint32_t i) noexcept {
|
||||
inline T& operator[](uint32_t i) noexcept {
|
||||
return (i < mid) ? old[i] : nex[i];
|
||||
}
|
||||
|
||||
inline void insert(int elem) noexcept {
|
||||
inline void insert(T elem) noexcept {
|
||||
if(TL_LIKELY(end < capacity)) {
|
||||
|
||||
// INSERT
|
||||
|
9
main.cpp
9
main.cpp
@ -24,6 +24,9 @@ static inline void printt(const char *prefix, size_t before, size_t after) noexc
|
||||
}
|
||||
|
||||
int main() {
|
||||
|
||||
// std::vector //
|
||||
|
||||
std::vector<int> vec;
|
||||
auto before_vector = ms_now();
|
||||
for(int i = 0; i < N; ++i) {
|
||||
@ -32,7 +35,9 @@ int main() {
|
||||
auto after_vector = ms_now();
|
||||
printt("vector", before_vector, after_vector);
|
||||
|
||||
TurboList list;
|
||||
// TurboList //
|
||||
|
||||
TurboList<int> list;
|
||||
|
||||
auto before_TurboList = ms_now();
|
||||
for(int i = 0; i < N; ++i) {
|
||||
@ -47,6 +52,8 @@ int main() {
|
||||
}
|
||||
#endif /* PRINT_DBG */
|
||||
|
||||
// C turbolist //
|
||||
|
||||
turbolist clist = turbolist_create();
|
||||
|
||||
auto before_cturbolist = ms_now();
|
||||
|
Loading…
x
Reference in New Issue
Block a user