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>
57 #include <absl/strings/str_cat.h>
72 using std::static_pointer_cast;
73 using std::dynamic_pointer_cast;
74 using std::const_pointer_cast;
75 #if __cplusplus >= 201703L
79 template<
class T,
class U>
80 static inline std::shared_ptr<T>
82 return std::shared_ptr<T>(p,
reinterpret_cast<T*
>(p.get()));
96 constexpr T
TYPEALIGN(uint64_t ALIGNVAL, T LEN);
99 typedef std::unique_ptr<void, AlignedAllocImpl::FreeMem>
124 template<
size_t alignment,
class T>
132 return (T*) aligned_alloc(alignment,
taco::TYPEALIGN(alignment, n *
sizeof(T)));
162 std::vector<char, AlignedAllocImpl::aligned_allocator<8, char>>;
178 #if (defined(TDB_IN_TEST) && !defined(NDEBUG))
181 #define ASSERT(...) \
183 bool __cond = (CAR(__VA_ARGS__)); \
185 LOG(::taco::kFatal, \
186 "assertion \"%s\" failed" \
187 IF_NONEMPTY(CADR(__VA_ARGS__), ": " CADR(__VA_ARGS__)), \
188 STRINGIFY(CAR(__VA_ARGS__)) \
189 IF_NONEMPTY_COMMA(CADDR(__VA_ARGS__), ) \
190 CDR(CDR(__VA_ARGS__)) \
194 #elif (!defined(TDB_IN_TEST) && !defined(NDEBUG))
197 #define ASSERT(...) \
199 bool __cond = (CAR(__VA_ARGS__)); \
201 LOG(::taco::kFatal, "%s:" STRINGIFY(__LINE__) \
202 ": assertion \"%s\" failed" \
203 IF_NONEMPTY(CADR(__VA_ARGS__), ": " CADR(__VA_ARGS__)), \
204 ::taco::StripSourcePath(__FILE__), \
205 STRINGIFY(CAR(__VA_ARGS__)) \
206 IF_NONEMPTY_COMMA(CADDR(__VA_ARGS__),) \
207 CDR(CDR(__VA_ARGS__)) \
236 static_assert(
FieldOffsetBits <= 15,
"page size cannot be larger than 2^15");
275 #define FIELDOFFSET_FORMAT "%hd"
276 #define FIELDID_FORMAT "%hd"
277 #define OID_FORMAT "%u"
278 #define FILEID_FORMAT "%u"
279 #define PAGENUMBER_FORMAT "0x%08X"
280 #define SLOTID_FORMAT "%hu"
281 #define BUFFERID_FORMAT "%lu"
288 constexpr
Oid MaxOid = std::numeric_limits<Oid>::max() - 1;
327 return (((uint64_t) (LEN) + ((ALIGNVAL) - 1)) & ~((uint64_t) ((ALIGNVAL) - 1)));
330 #define SHORTALIGN(LEN) TYPEALIGN(2, (LEN))
331 #define INTALIGN(LEN) TYPEALIGN(4, (LEN))
332 #define LONGALIGN(LEN) TYPEALIGN(8, (LEN))
333 #define DOUBLEALIGN(LEN) TYPEALIGN(8, (LEN))
334 #define MAXALIGN(LEN) TYPEALIGN(8, (LEN))
335 #define CACHELINEALIGN(LEN) TYPEALIGN(CACHELINE_SIZE, (LEN))
336 #define MAXALIGN_OF 8
341 return (((uint64_t) (LEN)) & ~((uint64_t) ((ALIGNVAL) - 1)));
344 #define SHORTALIGN_DOWN(LEN) TYPEALIGN_DOWN(2, (LEN))
345 #define INTALIGN_DOWN(LEN) TYPEALIGN_DOWN(4, (LEN))
346 #define LONGALIGN_DOWN(LEN) TYPEALIGN_DOWN(8, (LEN))
347 #define DOUBLEALIGN_DOWN(LEN) TYPEALIGN_DOWN(8, (LEN))
348 #define MAXALIGN_DOWN(LEN) TYPEALIGN_DOWN(8, (LEN))
349 #define BUFFERALIGN_DOWN(LEN) TYPEALIGN_DOWN(CACHELINE_SIZE, (LEN))
351 template<
class T,
class U>
354 if ((left > 0 && (T) right > std::numeric_limits<T>::max() - left) ||
355 (left < 0 && (T) right < left - std::numeric_limits<T>::min())) {
368 #define RETURN_IF(...) \
370 if ((CAR(__VA_ARGS__))) { \
371 return CDR(__VA_ARGS__); \
382 #define FLEXIBLE_ARRAY_MEMBER -1
388 typename std::enable_if<!std::is_same<typename std::decay<T>::type,
389 absl::string_view>::value,
392 return std::forward<T>(t);
396 typename std::enable_if<std::is_same<typename std::decay<T>::type,
397 absl::string_view>::value,
400 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:86
constexpr int PageNumberBits
Definition: tdb_base.h:234
constexpr Oid InvalidOid
Definition: tdb_base.h:231
uint8_t OpType
The operator type, see expr/optypes.h.
Definition: tdb_base.h:294
uint32_t Oid
Definition: tdb_base.h:217
bool AddWithCheck(T &left, U right)
Definition: tdb_base.h:353
constexpr FieldOffset MaxFieldOffset
Definition: tdb_base.h:237
constexpr SlotId MaxSlotId
The maximum valid slot ID.
Definition: tdb_base.h:271
uint64_t BufferId
Definition: tdb_base.h:221
uint16_t SlotId
Definition: tdb_base.h:229
constexpr SlotId INVALID_SID
The invalid slot ID.
Definition: tdb_base.h:261
int16_t FieldOffset
Definition: tdb_base.h:218
constexpr Oid MaxOid
The largest valid Oid.
Definition: tdb_base.h:288
uint8_t IdxType
The index type, see index/idxtyps.h.
Definition: tdb_base.h:291
int16_t FieldId
Definition: tdb_base.h:219
uint32_t FileId
The file ID.
Definition: tdb_base.h:228
constexpr PageNumber MaxPageNumber
The maximum valid page number.
Definition: tdb_base.h:254
constexpr T TYPEALIGN(uint64_t ALIGNVAL, T LEN)
These alignment macros are derived from PostgreSQL.
Definition: tdb_base.h:326
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:220
constexpr SlotId MinSlotId
The minimum valid slot ID.
Definition: tdb_base.h:266
uint8_t AggType
The aggregation type, see catalog/aggtyp.h.
Definition: tdb_base.h:302
constexpr PageNumber RESERVED_PID
An invalid page number reserved for file manager internal use.
Definition: tdb_base.h:249
constexpr FieldId MaxNumRegularFieldId
Definition: tdb_base.h:233
constexpr int FieldOffsetBits
Definition: tdb_base.h:235
constexpr BufferId INVALID_BUFID
Definition: tdb_base.h:273
constexpr T TYPEALIGN_DOWN(uint64_t ALIGNVAL, T LEN)
Definition: tdb_base.h:340
constexpr FieldId InvalidFieldId
Definition: tdb_base.h:232
constexpr PageNumber INVALID_PID
The invalid page number.
Definition: tdb_base.h:242
Definition: tdb_base.h:87
void operator()(void *x)
Definition: tdb_base.h:88
Definition: tdb_base.h:153
aligned_allocator< alignment, U > other
Definition: tdb_base.h:154
Definition: tdb_base.h:125
std::true_type is_always_equal
Definition: tdb_base.h:150
ptrdiff_t difference_type
Definition: tdb_base.h:128
T value_type
Definition: tdb_base.h:126
constexpr bool operator==(const aligned_allocator &)
Definition: tdb_base.h:141
static T * allocate(size_t n)
Definition: tdb_base.h:131
size_t size_type
Definition: tdb_base.h:127
constexpr bool operator!=(const aligned_allocator &)
Definition: tdb_base.h:146
static void deallocate(T *p, size_t)
Definition: tdb_base.h:136
std::vector< char, AlignedAllocImpl::aligned_allocator< 8, char > > maxaligned_char_buf
Definition: tdb_base.h:162
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:107
unique_malloced_ptr unique_malloc(size_t size)
Definition: tdb_base.h:118
constexpr const size_t PAGE_SIZE
Definition: tdb_base.h:166
constexpr const size_t CACHELINE_SIZE
Definition: tdb_base.h:165
static std::shared_ptr< T > reinterpret_pointer_cast(const std::shared_ptr< U > &p)
Definition: tdb_base.h:81
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:391
unique_malloced_ptr wrap_malloc(void *ptr)
Definition: tdb_base.h:113
std::unique_ptr< void, AlignedAllocImpl::FreeMem > unique_malloced_ptr
Definition: tdb_base.h:100