18 # include <jemalloc/jemalloc.h>
26 #ifndef _ISOC11_SOURCE
27 #if __cplusplus >= 201703L
28 using std::aligned_alloc;
30 #error "need a working aligned_alloc(3)"
54 #include <absl/base/macros.h>
55 #include <absl/memory/memory.h>
56 #include <absl/strings/string_view.h>
71 using std::static_pointer_cast;
72 using std::dynamic_pointer_cast;
73 using std::const_pointer_cast;
74 #if __cplusplus >= 201703L
78 template<
class T,
class U>
79 static inline std::shared_ptr<T>
81 return std::shared_ptr<T>(p,
reinterpret_cast<T*
>(p.get()));
95 constexpr T
TYPEALIGN(uint64_t ALIGNVAL, T LEN);
98 typedef std::unique_ptr<void, AlignedAllocImpl::FreeMem>
123 template<
size_t alignment,
class T>
131 return (T*) aligned_alloc(alignment,
taco::TYPEALIGN(alignment, n *
sizeof(T)));
161 std::vector<char, AlignedAllocImpl::aligned_allocator<8, char>>;
177 #if (defined(TDB_IN_TEST) && !defined(NDEBUG))
180 #define ASSERT(...) \
182 bool __cond = (CAR(__VA_ARGS__)); \
184 LOG(::taco::kFatal, \
185 "assertion \"%s\" failed" \
186 IF_NONEMPTY(CADR(__VA_ARGS__), ": " CADR(__VA_ARGS__)), \
187 STRINGIFY(CAR(__VA_ARGS__)) \
188 IF_NONEMPTY_COMMA(CADDR(__VA_ARGS__), ) \
189 CDR(CDR(__VA_ARGS__)) \
193 #elif (!defined(TDB_IN_TEST) && !defined(NDEBUG))
196 #define ASSERT(...) \
198 bool __cond = (CAR(__VA_ARGS__)); \
200 LOG(::taco::kFatal, "%s:" STRINGIFY(__LINE__) \
201 ": assertion \"%s\" failed" \
202 IF_NONEMPTY(CADR(__VA_ARGS__), ": " CADR(__VA_ARGS__)), \
203 ::taco::StripSourcePath(__FILE__), \
204 STRINGIFY(CAR(__VA_ARGS__)) \
205 IF_NONEMPTY_COMMA(CADDR(__VA_ARGS__),) \
206 CDR(CDR(__VA_ARGS__)) \
235 static_assert(
FieldOffsetBits <= 15,
"page size cannot be larger than 2^15");
274 #define FIELDOFFSET_FORMAT "%hd"
275 #define FIELDID_FORMAT "%hd"
276 #define OID_FORMAT "%u"
277 #define FILEID_FORMAT "%u"
278 #define PAGENUMBER_FORMAT "0x%08X"
279 #define SLOTID_FORMAT "%hu"
280 #define BUFFERID_FORMAT "%lu"
287 constexpr
Oid MaxOid = std::numeric_limits<Oid>::max() - 1;
326 return (((uint64_t) (LEN) + ((ALIGNVAL) - 1)) & ~((uint64_t) ((ALIGNVAL) - 1)));
329 #define SHORTALIGN(LEN) TYPEALIGN(2, (LEN))
330 #define INTALIGN(LEN) TYPEALIGN(4, (LEN))
331 #define LONGALIGN(LEN) TYPEALIGN(8, (LEN))
332 #define DOUBLEALIGN(LEN) TYPEALIGN(8, (LEN))
333 #define MAXALIGN(LEN) TYPEALIGN(8, (LEN))
334 #define CACHELINEALIGN(LEN) TYPEALIGN(CACHELINE_SIZE, (LEN))
335 #define MAXALIGN_OF 8
340 return (((uint64_t) (LEN)) & ~((uint64_t) ((ALIGNVAL) - 1)));
343 #define SHORTALIGN_DOWN(LEN) TYPEALIGN_DOWN(2, (LEN))
344 #define INTALIGN_DOWN(LEN) TYPEALIGN_DOWN(4, (LEN))
345 #define LONGALIGN_DOWN(LEN) TYPEALIGN_DOWN(8, (LEN))
346 #define DOUBLEALIGN_DOWN(LEN) TYPEALIGN_DOWN(8, (LEN))
347 #define MAXALIGN_DOWN(LEN) TYPEALIGN_DOWN(8, (LEN))
348 #define BUFFERALIGN_DOWN(LEN) TYPEALIGN_DOWN(CACHELINE_SIZE, (LEN))
350 template<
class T,
class U>
353 if ((left > 0 && (T) right > std::numeric_limits<T>::max() - left) ||
354 (left < 0 && (T) right < left - std::numeric_limits<T>::min())) {
367 #define RETURN_IF(...) \
369 if ((CAR(__VA_ARGS__))) { \
370 return CDR(__VA_ARGS__); \
381 #define FLEXIBLE_ARRAY_MEMBER -1
387 typename std::enable_if<!std::is_same<typename std::decay<T>::type,
388 absl::string_view>::value,
391 return std::forward<T>(t);
395 typename std::enable_if<std::is_same<typename std::decay<T>::type,
396 absl::string_view>::value,
399 return std::string(t.data(), t.size());
This file includes c++11 atomic library.
#define L1_CACHELINE_SIZE
Definition: config.h:8
#define CONFIG_PAGE_SIZE
Definition: config.h:11
This file contains the definition of the Datum and DatumRef structures for storing and passing C++ ob...
This file contains the definition of the function manager and function-call interface,...
Logging component for TDB.
Definition: tdb_base.h:85
constexpr int PageNumberBits
Definition: tdb_base.h:233
constexpr Oid InvalidOid
Definition: tdb_base.h:230
uint8_t OpType
The operator type, see expr/optypes.h.
Definition: tdb_base.h:293
uint32_t Oid
Definition: tdb_base.h:216
bool AddWithCheck(T &left, U right)
Definition: tdb_base.h:352
constexpr FieldOffset MaxFieldOffset
Definition: tdb_base.h:236
constexpr SlotId MaxSlotId
The maximum valid slot ID.
Definition: tdb_base.h:270
uint64_t BufferId
Definition: tdb_base.h:220
uint16_t SlotId
Definition: tdb_base.h:228
constexpr SlotId INVALID_SID
The invalid slot ID.
Definition: tdb_base.h:260
int16_t FieldOffset
Definition: tdb_base.h:217
constexpr Oid MaxOid
The largest valid Oid.
Definition: tdb_base.h:287
uint8_t IdxType
The index type, see index/idxtyps.h.
Definition: tdb_base.h:290
int16_t FieldId
Definition: tdb_base.h:218
uint32_t FileId
The file ID.
Definition: tdb_base.h:227
constexpr PageNumber MaxPageNumber
The maximum valid page number.
Definition: tdb_base.h:253
constexpr T TYPEALIGN(uint64_t ALIGNVAL, T LEN)
These alignment macros are derived from PostgreSQL.
Definition: tdb_base.h:325
constexpr int logn_ceil(uint64_t x)
Returns $\lceil log_2(x) \rceil$ for x > 0, or 0 for x = 0.
Definition: misc.h:151
uint32_t PageNumber
Definition: tdb_base.h:219
constexpr SlotId MinSlotId
The minimum valid slot ID.
Definition: tdb_base.h:265
uint8_t AggType
The aggregation type, see catalog/aggtyp.h.
Definition: tdb_base.h:301
constexpr PageNumber RESERVED_PID
An invalid page number reserved for file manager internal use.
Definition: tdb_base.h:248
constexpr FieldId MaxNumRegularFieldId
Definition: tdb_base.h:232
constexpr int FieldOffsetBits
Definition: tdb_base.h:234
constexpr BufferId INVALID_BUFID
Definition: tdb_base.h:272
constexpr T TYPEALIGN_DOWN(uint64_t ALIGNVAL, T LEN)
Definition: tdb_base.h:339
constexpr FieldId InvalidFieldId
Definition: tdb_base.h:231
constexpr PageNumber INVALID_PID
The invalid page number.
Definition: tdb_base.h:241
Definition: tdb_base.h:86
void operator()(void *x)
Definition: tdb_base.h:87
Definition: tdb_base.h:152
aligned_allocator< alignment, U > other
Definition: tdb_base.h:153
Definition: tdb_base.h:124
std::true_type is_always_equal
Definition: tdb_base.h:149
ptrdiff_t difference_type
Definition: tdb_base.h:127
T value_type
Definition: tdb_base.h:125
constexpr bool operator==(const aligned_allocator &)
Definition: tdb_base.h:140
static T * allocate(size_t n)
Definition: tdb_base.h:130
size_t size_type
Definition: tdb_base.h:126
constexpr bool operator!=(const aligned_allocator &)
Definition: tdb_base.h:145
static void deallocate(T *p, size_t)
Definition: tdb_base.h:135
std::vector< char, AlignedAllocImpl::aligned_allocator< 8, char > > maxaligned_char_buf
Definition: tdb_base.h:161
unique_malloced_ptr unique_aligned_alloc(size_t alignment, size_t size)
Wraps an aligned_alloced'd memory space in a std::unique_ptr.
Definition: tdb_base.h:106
unique_malloced_ptr unique_malloc(size_t size)
Definition: tdb_base.h:117
constexpr const size_t PAGE_SIZE
Definition: tdb_base.h:165
constexpr const size_t CACHELINE_SIZE
Definition: tdb_base.h:164
static std::shared_ptr< T > reinterpret_pointer_cast(const std::shared_ptr< U > &p)
Definition: tdb_base.h:80
std::enable_if<!std::is_same< typename std::decay< T >::type, absl::string_view >::value, T && >::type cast_as_string(T &&t)
Definition: tdb_base.h:390
unique_malloced_ptr wrap_malloc(void *ptr)
Definition: tdb_base.h:112
std::unique_ptr< void, AlignedAllocImpl::FreeMem > unique_malloced_ptr
Definition: tdb_base.h:99