35#if defined(REALM_ON_WINDOWS)
36#ifndef WIN32_LEAN_AND_MEAN
37#define WIN32_LEAN_AND_MEAN 1
48#define REALM_SPIN_YIELD() asm volatile("rep; nop" :::)
49#elif defined(__aarch64__) || defined(__arm__)
50#define REALM_SPIN_YIELD() asm volatile("yield" :::)
51#elif defined(__PPC64__) || defined(__PPC__)
52#define REALM_SPIN_YIELD() asm volatile("yield" :::)
54#define REALM_SPIN_YIELD()
57#define REALM_HASH_TOKEN(x) Realm::hash_fnv1a(#x, sizeof(#x) - 1)
63 const uint64_t value = 0xcbf29ce484222325ULL) noexcept
66 :
hash_fnv1a(s + 1, n - 1, ((value ^ uint64_t(*s)) * 0x100000001b3ULL));
72#if SIZE_MAX == UINT64_MAX
73 constexpr size_t seed =
size_t{0x517cc1b727220a95ULL};
75 constexpr size_t seed =
size_t{0x9e3779b9UL};
77 return lhs ^ (rhs + seed + (lhs << 6) + (lhs >> 2));
83 template <
typename T,
size_t Extent = dynamic_extent>
91 for(
typename std::vector<T *>::iterator it = v.begin(); it != v.end(); it++)
98 template <
typename K,
typename V>
101 for(
typename std::map<K, V *>::iterator it = m.begin(); it != m.end(); it++)
108 template <
typename K,
typename V>
111 for(
typename std::map<K, V *>::iterator it = m.begin(); it != m.end(); it++)
119 template <
size_t _INTERNAL_BUFFER_SIZE,
size_t _INITIAL_EXTERNAL_SIZE>
147 template <
typename T>
161 template <
typename T,
typename T2>
165 T result =
dynamic_cast<T
>(ptr);
169 return static_cast<T
>(ptr);
175 template <
typename T>
184 template <
typename T1>
201 template <
unsigned _BITS,
unsigned _SHIFT>
203 static const unsigned BITS = _BITS;
204 static const unsigned SHIFT = _SHIFT;
206 template <
typename T>
209 template <
typename T>
212 template <
typename T>
216 template <
typename T>
228 template <
typename BITFIELD>
237 static const T
MAXVAL = ~(~T(0) << BITFIELD::BITS);
243 template <
typename BITFIELD>
250 static const T
MAXVAL = ~(~T(0) << BITFIELD::BITS);
256 template <
typename BITFIELD>
258 template <
typename BITFIELD>
261 template <
typename BITFIELD>
263 template <
typename BITFIELD>
272 template <
typename T>
275 explicit PrettyVector(
const T *_data,
size_t _size,
const char *_delim =
", ",
276 const char *_pfx =
"[",
const char *_sfx =
"]");
277 template <
typename Container = std::vector<T>>
279 const char *_pfx =
"[",
const char *_sfx =
"]");
291 template <
typename T>
295 using std::enable_if;
296 using std::is_integral;
297 using std::make_signed;
298 using std::make_unsigned;
299 using std::remove_const;
301 template <
typename T>
317 template <
size_t Extent2>
319 : base(copy_from.data())
320 , length(copy_from.size())
324 span(
const std::vector<
typename remove_const<T>::type> &v)
337 T *
data()
const {
return base; }
338 size_t size()
const {
return length; }
339 bool empty()
const {
return (length == 0); }
348 template <
typename T>
355 template <
typename T>
382 template <
typename T>
395#ifdef REALM_ON_WINDOWS
397 static const OsHandle INVALID_OS_HANDLE = 0;
400 static const OsHandle INVALID_OS_HANDLE = -1;
420 const std::vector<OsHandle> &handles,
const void *data,
434 std::vector<OsHandle> &handles,
void *data,
size_t &data_sz,
450 const char *func =
nullptr;
453#if REALM_DEFAULT_LOG_LEVEL > REALM_SPEW
454#define REALM_ENTRY_EXIT(logger) \
455 Realm::RealmEntryExitRAII __entry_exit(logger, __FUNCTION__)
457#define REALM_ENTRY_EXIT(logger)
462#include "realm/utils.inl"
bootstrap_handle_t * handle
Definition bootstrap.h:61
REALM_ALIGNED_TYPE_SAMEAS(Storage_aligned, Storage_unaligned, T)
const T & operator*() const
T * ptr
Definition utils.h:195
const T * operator->() const
Storage_aligned raw_storage
Definition utils.h:198
char Storage_unaligned[sizeof(T)]
Definition utils.h:196
const char * delim
Definition utils.h:286
PrettyVector(const T *_data, size_t _size, const char *_delim=", ", const char *_pfx="[", const char *_sfx="]")
size_t size
Definition utils.h:285
const T * data
Definition utils.h:284
const char * sfx
Definition utils.h:288
void print(std::ostream &os) const
const char * pfx
Definition utils.h:287
PrettyVector(const Container &_v, const char *_delim=", ", const char *_pfx="[", const char *_sfx="]")
RealmEntryExitRAII(Logger &_logger, const char *_func)
static const T MAXVAL
Definition utils.h:237
T & target
Definition utils.h:240
bitsliceref< BITFIELD > & operator=(T field)
bitsliceref< BITFIELD > & operator|=(T field)
const T & target
Definition utils.h:253
static const T MAXVAL
Definition utils.h:250
constbitsliceref(const T &_target)
bitsliceref< BITFIELD > slice()
T value
Definition utils.h:267
bitpack< T > & operator=(const bitpack< T > ©_from)
bitpack< T > & operator=(T new_val)
constbitsliceref< BITFIELD > slice() const
bitsliceref< BITFIELD > operator[](const BITFIELD &bitfield)
bitpack(const bitpack< T > ©_from)
constbitsliceref< BITFIELD > operator[](const BITFIELD &bitfield) const
~noncopyable()
Definition utils.h:371
noncopyable()
Definition utils.h:370
static const size_t INTERNAL_BUFFER_SIZE
Definition utils.h:131
char internal_buffer[INTERNAL_BUFFER_SIZE]
Definition utils.h:133
size_t external_buffer_size
Definition utils.h:135
virtual int_type overflow(int_type c)
const char * data() const
static const size_t INITIAL_EXTERNAL_BUFFER_SIZE
Definition utils.h:132
char * external_buffer
Definition utils.h:134
remove_const< T >::type value_type
Definition utils.h:304
T * data() const
Definition utils.h:337
T * base
Definition utils.h:342
span(T *_base, size_t _length)
Definition utils.h:311
span(T &v)
Definition utils.h:330
span()
Definition utils.h:307
T & operator[](size_t idx) const
Definition utils.h:335
span(const std::vector< typename remove_const< T >::type > &v)
Definition utils.h:324
size_t length
Definition utils.h:343
bool empty() const
Definition utils.h:339
span(span< T, Extent2 > copy_from)
Definition utils.h:318
size_t size() const
Definition utils.h:338
stringbuilder & operator<<(T data)
Definition utils.h:148
std::ostream os
Definition utils.h:156
stringbuilder()
Definition utils.h:143
shortstringbuf< 32, 64 > strbuf
Definition utils.h:155
#define REALM_INTERNAL_API_EXTERNAL_LINKAGE
Definition compiler_support.h:218
#define REALM_PUBLIC_API
Definition compiler_support.h:217
Definition activemsg.h:38
void delete_container_contents_free(std::map< K, V * > &m, bool clear_cont=true)
Definition utils.h:109
constexpr size_t hash_combine(size_t lhs, size_t rhs) noexcept
Definition utils.h:70
REALM_PUBLIC_API const char * realm_strerror(int err)
T checked_cast(T2 *ptr)
Definition utils.h:162
constexpr uint64_t hash_fnv1a(const char *s, size_t n, const uint64_t value=0xcbf29ce484222325ULL) noexcept
Definition utils.h:62
OsHandle ipc_mailbox_create(const std::string &name)
Creates an ipc mailbox useful for sending and receiving other OSHandles between ranks on the same phy...
bool ipc_mailbox_send(OsHandle mailbox, const std::string &to, const std::vector< OsHandle > &handles, const void *data, size_t data_sz)
Send the handles and data given via the mailbox created by ipc_mailbox_create to the receiving mailbo...
REALM_PUBLIC_API uint32_t crc32c_accumulate(uint32_t accum_in, const void *data, size_t len)
int OsHandle
Definition utils.h:399
void delete_container_contents(std::vector< T * > &v, bool clear_cont=true)
Definition utils.h:89
bool ipc_mailbox_recv(OsHandle mailbox, const std::string &from, std::vector< OsHandle > &handles, void *data, size_t &data_sz, size_t max_data_sz)
Receive in handles and data via the mailbox created by ipc_mailbox_create from the sending mailbox gi...
void call_destructor(T *obj)
Definition utils.h:383
const size_t dynamic_extent
Definition utils.h:81
std::ostream & operator<<(std::ostream &os, const DenseRectangleList< N, T > &drl)
void close_handle(OsHandle handle)
Close the given OS handle.
span< T, dynamic_extent > make_span(T *base, size_t length)
Definition utils.h:356
static const unsigned BITS
Definition utils.h:203
static const unsigned SHIFT
Definition utils.h:204
static T bit_or(T target, T field)
static T extract(T source)
static T insert(T target, T field)