taco-db  0.1.0
Namespaces | Macros | Functions | Variables
misc.h File Reference
#include <utility>
#include <cstdint>
#include <absl/strings/string_view.h>

Go to the source code of this file.

Namespaces

 taco
 

Macros

#define STRINGIFY_HELPER(_1)   #_1
 
#define STRINGIFY(_1)   STRINGIFY_HELPER(_1)
 
#define CONCAT_HELPER(_1, _2)   _1 ## _2
 
#define CONCAT(_1, _2)   CONCAT_HELPER(_1, _2)
 
#define CONCAT3_HELPER(_1, _2, _3)   _1 ## _2 ## _3
 
#define CONCAT3(_1, _2, _3)   CONCAT3_HELPER(_1, _2, _3)
 
#define SELECT_FIRST(...)   SELECT_FIRST_HELPER(__VA_ARGS__, garbage)
 
#define SELECT_FIRST_HELPER(first, ...)   first
 
#define SELECT_SECOND(...)   SELECT_SECOND_HELPER(__VA_ARGS__, , garbage)
 
#define SELECT_SECOND_HELPER(first, second, ...)   second
 
#define NOT(boolean_var)   CONCAT(NOT_HELPER_, boolean_var)
 
#define NOT_HELPER_true   false
 
#define NOT_HELPER_false   true
 
#define IF_NONEMPTY(arg, ...)    CONCAT(SELECT_, CONCAT(IF_NONEMPTY_HELPER_, IS_EMPTY(arg))) (__VA_ARGS__)
 
#define IF_NONEMPTY_HELPER_true   SECOND
 
#define IF_NONEMPTY_HELPER_false   FIRST
 
#define IF_EMPTY(arg, ...)    CONCAT(SELECT_, CONCAT(IF_NONEMPTY_HELPER_, NOT(IS_EMPTY(arg)))) (__VA_ARGS__)
 
#define COMMA_true   ,
 
#define COMMA_false
 
#define IF_NONEMPTY_COMMA(arg, if_branch)    IF_NONEMPTY(arg, if_branch) CONCAT(COMMA_, NOT(IS_EMPTY(arg)))
 
#define IF_EMPTY_COMMA(arg, if_branch)    IF_EMPTY(arg, if_branch) CONCAT(COMMA_, IS_EMPTY(arg))
 
#define IF_BOOLEAN_LITERAL(arg, ...)    IF_EMPTY(CONCAT(IF_BOOLEAN_LITERAL_HELPER_, arg), __VA_ARGS__)
 
#define IF_BOOLEAN_LITERAL_HELPER_true
 
#define IF_BOOLEAN_LITERAL_HELPER_false
 
#define EXPAND_TO_COMMA(...)   ,
 
#define HAS_COMMA_1_HELPER(_1, _2, _3, ...)   _3
 
#define HAS_COMMA_1(...)   HAS_COMMA_1_HELPER(__VA_ARGS__, t, f)
 
#define IS_EMPTY(arg)
 
#define IS_EMPTY_HELPER_tf   true
 
#define IS_EMPTY_HELPER_ff   false
 
#define IS_EMPTY_HELPER_tt   false
 
#define IS_NONEMPTY(arg)   NOT(IS_EMPTY(arg))
 
#define HAS_AT_MOST_ONE___VA_ARGS__(...)
 
#define HAS_AT_MOST_ONE___VA_ARGS___HELPER(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, ...)   a33
 
#define CAR   SELECT_FIRST
 
#define CDR(...)    CONCAT(CDR_IS_EMPTY_, IS_EMPTY(CAR(__VA_ARGS__)))(__VA_ARGS__)
 
#define CDR_IS_EMPTY_true(...)
 
#define CDR_IS_EMPTY_false(...)    CONCAT(CDR_HELPER_, HAS_AT_MOST_ONE___VA_ARGS__(__VA_ARGS__))(__VA_ARGS__)
 
#define CDR_HELPER_t(...)
 
#define CDR_HELPER_f(first, ...)   __VA_ARGS__
 
#define CADR(...)   CAR(CDR(__VA_ARGS__))
 
#define CADDR(...)   CAR(CDR(CDR(__VA_ARGS__)))
 
#define CADDDR(...)   CAR(CDR(CDR(CDR(__VA_ARGS__))))
 
#define CADDDDR(...)   CAR(CDR(CDR(CDR(CDR(__VA_ARGS__)))))
 
#define CDDDDDR(...)   CDR(CDR(CDR(CDR(CDR(__VA_ARGS__)))))
 
#define LogTableLT(n)   n, n, n, n, n, n, n, n, n, n, n, n, n, n, n, n
 

Functions

template<class Container , class Arg0 , class ... Args>
void taco::emplace_back_parameter_pack (Container &c, Arg0 &&arg0, Args &&...args)
 
template<class Container >
void taco::emplace_back_parameter_pack (Container &c)
 
constexpr int taco::logn_floor (uint64_t x)
 Returns $\lfloor log_2(x) \rfloor$ for x > 0, or 0 for x = 0. More...
 
constexpr int taco::logn_ceil (uint64_t x)
 Returns $\lceil log_2(x) \rceil$ for x > 0, or 0 for x = 0. More...
 
bool taco::FilePathIsTDBFilePath (absl::string_view filepath)
 Returns true if filepath belongs to tdb source code path. More...
 
absl::string_view taco::StripSourcePath (absl::string_view path)
 
uint64_t taco::GetCurrentDataSize ()
 Returns the approximate size of heap-allocated memory in bytes. More...
 

Variables

static constexpr char taco::LogTable256 [256]
 

Macro Definition Documentation

◆ CADDDDR

#define CADDDDR (   ...)    CAR(CDR(CDR(CDR(CDR(__VA_ARGS__)))))

◆ CADDDR

#define CADDDR (   ...)    CAR(CDR(CDR(CDR(__VA_ARGS__))))

◆ CADDR

#define CADDR (   ...)    CAR(CDR(CDR(__VA_ARGS__)))

◆ CADR

#define CADR (   ...)    CAR(CDR(__VA_ARGS__))

◆ CAR

#define CAR   SELECT_FIRST

◆ CDDDDDR

#define CDDDDDR (   ...)    CDR(CDR(CDR(CDR(CDR(__VA_ARGS__)))))

◆ CDR

#define CDR (   ...)     CONCAT(CDR_IS_EMPTY_, IS_EMPTY(CAR(__VA_ARGS__)))(__VA_ARGS__)

◆ CDR_HELPER_f

#define CDR_HELPER_f (   first,
  ... 
)    __VA_ARGS__

◆ CDR_HELPER_t

#define CDR_HELPER_t (   ...)

◆ CDR_IS_EMPTY_false

#define CDR_IS_EMPTY_false (   ...)     CONCAT(CDR_HELPER_, HAS_AT_MOST_ONE___VA_ARGS__(__VA_ARGS__))(__VA_ARGS__)

◆ CDR_IS_EMPTY_true

#define CDR_IS_EMPTY_true (   ...)

◆ COMMA_false

#define COMMA_false

◆ COMMA_true

#define COMMA_true   ,

◆ CONCAT

#define CONCAT (   _1,
  _2 
)    CONCAT_HELPER(_1, _2)

◆ CONCAT3

#define CONCAT3 (   _1,
  _2,
  _3 
)    CONCAT3_HELPER(_1, _2, _3)

◆ CONCAT3_HELPER

#define CONCAT3_HELPER (   _1,
  _2,
  _3 
)    _1 ## _2 ## _3

◆ CONCAT_HELPER

#define CONCAT_HELPER (   _1,
  _2 
)    _1 ## _2

◆ EXPAND_TO_COMMA

#define EXPAND_TO_COMMA (   ...)    ,

◆ HAS_AT_MOST_ONE___VA_ARGS__

#define HAS_AT_MOST_ONE___VA_ARGS__ (   ...)
Value:
f, f, f, f, f, f, f, f, f, f, \
f, f, f, f, f, f, f, f, f, f, \
f, f, f, f, f, f, f, f, f, f, \
f, t, t, garbage)
#define HAS_AT_MOST_ONE___VA_ARGS___HELPER(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34,...)
Definition: misc.h:66

◆ HAS_AT_MOST_ONE___VA_ARGS___HELPER

#define HAS_AT_MOST_ONE___VA_ARGS___HELPER (   a1,
  a2,
  a3,
  a4,
  a5,
  a6,
  a7,
  a8,
  a9,
  a10,
  a11,
  a12,
  a13,
  a14,
  a15,
  a16,
  a17,
  a18,
  a19,
  a20,
  a21,
  a22,
  a23,
  a24,
  a25,
  a26,
  a27,
  a28,
  a29,
  a30,
  a31,
  a32,
  a33,
  a34,
  ... 
)    a33

◆ HAS_COMMA_1

#define HAS_COMMA_1 (   ...)    HAS_COMMA_1_HELPER(__VA_ARGS__, t, f)

◆ HAS_COMMA_1_HELPER

#define HAS_COMMA_1_HELPER (   _1,
  _2,
  _3,
  ... 
)    _3

◆ IF_BOOLEAN_LITERAL

#define IF_BOOLEAN_LITERAL (   arg,
  ... 
)     IF_EMPTY(CONCAT(IF_BOOLEAN_LITERAL_HELPER_, arg), __VA_ARGS__)

◆ IF_BOOLEAN_LITERAL_HELPER_false

#define IF_BOOLEAN_LITERAL_HELPER_false

◆ IF_BOOLEAN_LITERAL_HELPER_true

#define IF_BOOLEAN_LITERAL_HELPER_true

◆ IF_EMPTY

#define IF_EMPTY (   arg,
  ... 
)     CONCAT(SELECT_, CONCAT(IF_NONEMPTY_HELPER_, NOT(IS_EMPTY(arg)))) (__VA_ARGS__)

◆ IF_EMPTY_COMMA

#define IF_EMPTY_COMMA (   arg,
  if_branch 
)     IF_EMPTY(arg, if_branch) CONCAT(COMMA_, IS_EMPTY(arg))

◆ IF_NONEMPTY

#define IF_NONEMPTY (   arg,
  ... 
)     CONCAT(SELECT_, CONCAT(IF_NONEMPTY_HELPER_, IS_EMPTY(arg))) (__VA_ARGS__)

◆ IF_NONEMPTY_COMMA

#define IF_NONEMPTY_COMMA (   arg,
  if_branch 
)     IF_NONEMPTY(arg, if_branch) CONCAT(COMMA_, NOT(IS_EMPTY(arg)))

◆ IF_NONEMPTY_HELPER_false

#define IF_NONEMPTY_HELPER_false   FIRST

◆ IF_NONEMPTY_HELPER_true

#define IF_NONEMPTY_HELPER_true   SECOND

◆ IS_EMPTY

#define IS_EMPTY (   arg)
Value:
CONCAT3(IS_EMPTY_HELPER_, \
#define EXPAND_TO_COMMA(...)
Definition: misc.h:47
#define HAS_COMMA_1(...)
Definition: misc.h:49
#define CONCAT3(_1, _2, _3)
Definition: misc.h:12

◆ IS_EMPTY_HELPER_ff

#define IS_EMPTY_HELPER_ff   false

◆ IS_EMPTY_HELPER_tf

#define IS_EMPTY_HELPER_tf   true

◆ IS_EMPTY_HELPER_tt

#define IS_EMPTY_HELPER_tt   false

◆ IS_NONEMPTY

#define IS_NONEMPTY (   arg)    NOT(IS_EMPTY(arg))

◆ LogTableLT

#define LogTableLT (   n)    n, n, n, n, n, n, n, n, n, n, n, n, n, n, n, n

◆ NOT

#define NOT (   boolean_var)    CONCAT(NOT_HELPER_, boolean_var)

◆ NOT_HELPER_false

#define NOT_HELPER_false   true

◆ NOT_HELPER_true

#define NOT_HELPER_true   false

◆ SELECT_FIRST

#define SELECT_FIRST (   ...)    SELECT_FIRST_HELPER(__VA_ARGS__, garbage)

◆ SELECT_FIRST_HELPER

#define SELECT_FIRST_HELPER (   first,
  ... 
)    first

◆ SELECT_SECOND

#define SELECT_SECOND (   ...)    SELECT_SECOND_HELPER(__VA_ARGS__, , garbage)

◆ SELECT_SECOND_HELPER

#define SELECT_SECOND_HELPER (   first,
  second,
  ... 
)    second

◆ STRINGIFY

#define STRINGIFY (   _1)    STRINGIFY_HELPER(_1)

◆ STRINGIFY_HELPER

#define STRINGIFY_HELPER (   _1)    #_1