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()));
93 typedef std::unique_ptr<void, AlignedAllocImpl::FreeMem>
117 template<
size_t alignment,
class T>
125 return (T*) aligned_alloc(alignment, n *
sizeof(T));
155 std::vector<char, AlignedAllocImpl::aligned_allocator<8, char>>;
171 #if (defined(TDB_IN_TEST) && !defined(NDEBUG))
174 #define ASSERT(...) \
176 bool __cond = (CAR(__VA_ARGS__)); \
178 LOG(::taco::kFatal, \
179 "assertion \"%s\" failed" \
180 IF_NONEMPTY(CADR(__VA_ARGS__), ": " CADR(__VA_ARGS__)), \
181 STRINGIFY(CAR(__VA_ARGS__)) \
182 IF_NONEMPTY_COMMA(CADDR(__VA_ARGS__), ) \
183 CDR(CDR(__VA_ARGS__)) \
187 #elif (!defined(TDB_IN_TEST) && !defined(NDEBUG))
190 #define ASSERT(...) \
192 bool __cond = (CAR(__VA_ARGS__)); \
194 LOG(::taco::kFatal, "%s:" STRINGIFY(__LINE__) \
195 ": assertion \"%s\" failed" \
196 IF_NONEMPTY(CADR(__VA_ARGS__), ": " CADR(__VA_ARGS__)), \
197 ::taco::StripSourcePath(__FILE__), \
198 STRINGIFY(CAR(__VA_ARGS__)) \
199 IF_NONEMPTY_COMMA(CADDR(__VA_ARGS__),) \
200 CDR(CDR(__VA_ARGS__)) \
229 static_assert(
FieldOffsetBits <= 15,
"page size cannot be larger than 2^15");
268 #define FIELDOFFSET_FORMAT "%hd"
269 #define FIELDID_FORMAT "%hd"
270 #define OID_FORMAT "%u"
271 #define FILEID_FORMAT "%u"
272 #define PAGENUMBER_FORMAT "0x%08X"
273 #define SLOTID_FORMAT "%hu"
274 #define BUFFERID_FORMAT "%lu"
281 constexpr
Oid MaxOid = std::numeric_limits<Oid>::max() - 1;
320 return (((uint64_t) (LEN) + ((ALIGNVAL) - 1)) & ~((uint64_t) ((ALIGNVAL) - 1)));
323 #define SHORTALIGN(LEN) TYPEALIGN(2, (LEN))
324 #define INTALIGN(LEN) TYPEALIGN(4, (LEN))
325 #define LONGALIGN(LEN) TYPEALIGN(8, (LEN))
326 #define DOUBLEALIGN(LEN) TYPEALIGN(8, (LEN))
327 #define MAXALIGN(LEN) TYPEALIGN(8, (LEN))
328 #define CACHELINEALIGN(LEN) TYPEALIGN(CACHELINE_SIZE, (LEN))
329 #define MAXALIGN_OF 8
334 return (((uint64_t) (LEN)) & ~((uint64_t) ((ALIGNVAL) - 1)));
337 #define SHORTALIGN_DOWN(LEN) TYPEALIGN_DOWN(2, (LEN))
338 #define INTALIGN_DOWN(LEN) TYPEALIGN_DOWN(4, (LEN))
339 #define LONGALIGN_DOWN(LEN) TYPEALIGN_DOWN(8, (LEN))
340 #define DOUBLEALIGN_DOWN(LEN) TYPEALIGN_DOWN(8, (LEN))
341 #define MAXALIGN_DOWN(LEN) TYPEALIGN_DOWN(8, (LEN))
342 #define BUFFERALIGN_DOWN(LEN) TYPEALIGN_DOWN(CACHELINE_SIZE, (LEN))
344 template<
class T,
class U>
347 if ((left > 0 && (T) right > std::numeric_limits<T>::max() - left) ||
348 (left < 0 && (T) right < left - std::numeric_limits<T>::min())) {
361 #define RETURN_IF(...) \
363 if ((CAR(__VA_ARGS__))) { \
364 return CDR(__VA_ARGS__); \
375 #define FLEXIBLE_ARRAY_MEMBER -1
381 typename std::enable_if<!std::is_same<typename std::decay<T>::type,
382 absl::string_view>::value,
385 return std::forward<T>(t);
389 typename std::enable_if<std::is_same<typename std::decay<T>::type,
390 absl::string_view>::value,
393 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:227
constexpr Oid InvalidOid
Definition: tdb_base.h:224
uint8_t OpType
The operator type, see expr/optypes.h.
Definition: tdb_base.h:287
uint32_t Oid
Definition: tdb_base.h:210
bool AddWithCheck(T &left, U right)
Definition: tdb_base.h:346
constexpr FieldOffset MaxFieldOffset
Definition: tdb_base.h:230
constexpr SlotId MaxSlotId
The maximum valid slot ID.
Definition: tdb_base.h:264
uint64_t BufferId
Definition: tdb_base.h:214
uint16_t SlotId
Definition: tdb_base.h:222
constexpr SlotId INVALID_SID
The invalid slot ID.
Definition: tdb_base.h:254
int16_t FieldOffset
Definition: tdb_base.h:211
constexpr Oid MaxOid
The largest valid Oid.
Definition: tdb_base.h:281
uint8_t IdxType
The index type, see index/idxtyps.h.
Definition: tdb_base.h:284
int16_t FieldId
Definition: tdb_base.h:212
uint32_t FileId
The file ID.
Definition: tdb_base.h:221
constexpr PageNumber MaxPageNumber
The maximum valid page number.
Definition: tdb_base.h:247
constexpr T TYPEALIGN(uint64_t ALIGNVAL, T LEN)
These alignment macros are derived from PostgreSQL.
Definition: tdb_base.h:319
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:213
constexpr SlotId MinSlotId
The minimum valid slot ID.
Definition: tdb_base.h:259
uint8_t AggType
The aggregation type, see catalog/aggtyp.h.
Definition: tdb_base.h:295
constexpr PageNumber RESERVED_PID
An invalid page number reserved for file manager internal use.
Definition: tdb_base.h:242
constexpr FieldId MaxNumRegularFieldId
Definition: tdb_base.h:226
constexpr int FieldOffsetBits
Definition: tdb_base.h:228
constexpr BufferId INVALID_BUFID
Definition: tdb_base.h:266
constexpr T TYPEALIGN_DOWN(uint64_t ALIGNVAL, T LEN)
Definition: tdb_base.h:333
constexpr FieldId InvalidFieldId
Definition: tdb_base.h:225
constexpr PageNumber INVALID_PID
The invalid page number.
Definition: tdb_base.h:235
Definition: tdb_base.h:86
void operator()(void *x)
Definition: tdb_base.h:87
Definition: tdb_base.h:146
aligned_allocator< alignment, U > other
Definition: tdb_base.h:147
Definition: tdb_base.h:118
std::true_type is_always_equal
Definition: tdb_base.h:143
ptrdiff_t difference_type
Definition: tdb_base.h:121
T value_type
Definition: tdb_base.h:119
constexpr bool operator==(const aligned_allocator &)
Definition: tdb_base.h:134
static T * allocate(size_t n)
Definition: tdb_base.h:124
size_t size_type
Definition: tdb_base.h:120
constexpr bool operator!=(const aligned_allocator &)
Definition: tdb_base.h:139
static void deallocate(T *p, size_t)
Definition: tdb_base.h:129
std::vector< char, AlignedAllocImpl::aligned_allocator< 8, char > > maxaligned_char_buf
Definition: tdb_base.h:155
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:101
unique_malloced_ptr unique_malloc(size_t size)
Definition: tdb_base.h:111
constexpr const size_t PAGE_SIZE
Definition: tdb_base.h:159
constexpr const size_t CACHELINE_SIZE
Definition: tdb_base.h:158
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:384
unique_malloced_ptr wrap_malloc(void *ptr)
Definition: tdb_base.h:106
std::unique_ptr< void, AlignedAllocImpl::FreeMem > unique_malloced_ptr
Definition: tdb_base.h:94