19 #ifndef GRPC_CORE_LIB_TRANSPORT_METADATA_H 20 #define GRPC_CORE_LIB_TRANSPORT_METADATA_H 78 #define GRPC_MDELEM_STORAGE_INTERNED_BIT 1 104 #define GRPC_MDELEM_DATA(md) ((grpc_mdelem_data*)((md).payload & ~(uintptr_t)3)) 105 #define GRPC_MDELEM_STORAGE(md) \ 106 ((grpc_mdelem_data_storage)((md).payload & (uintptr_t)3)) 108 #define GRPC_MAKE_MDELEM(data, storage) \ 109 (grpc_mdelem{((uintptr_t)(data)) | ((uintptr_t)storage)}) 111 #define GRPC_MAKE_MDELEM(data, storage) \ 112 ((grpc_mdelem){((uintptr_t)(data)) | ((uintptr_t)storage)}) 114 #define GRPC_MDELEM_IS_INTERNED(md) \ 115 ((grpc_mdelem_data_storage)((md).payload & \ 116 (uintptr_t)GRPC_MDELEM_STORAGE_INTERNED_BIT)) 160 #define GRPC_MDKEY(md) (GRPC_MDELEM_DATA(md)->key) 161 #define GRPC_MDVALUE(md) (GRPC_MDELEM_DATA(md)->value) 172 #define GRPC_MDISNULL(md) (GRPC_MDELEM_DATA(md) == NULL) 195 const char* file,
int line);
198 const char* file,
int line);
213 : kv_({key, value}), hash_(0), static_idx_(idx) {}
218 uint32_t
hash() {
return hash_; }
226 uintptr_t static_idx_;
232 : key_(
key), value_(
value), refcnt_(1) {}
239 uint32_t
hash() {
return hash_; }
242 void Ref(
const char* file,
int line) {
247 bool Unref(
const char* file,
int line) {
331 #define GRPC_MDELEM_REF(s) grpc_mdelem_ref((s), __FILE__, __LINE__) 334 #else // ifndef NDEBUG 335 #define GRPC_MDELEM_REF(s) grpc_mdelem_ref((s)) 337 #endif // ifndef NDEBUG 368 #define GRPC_MDELEM_UNREF(s) grpc_mdelem_unref((s), __FILE__, __LINE__) 370 uint32_t hash,
const char* file,
int line);
373 #define GRPC_MDELEM_UNREF(s) grpc_mdelem_unref((s)) 390 uint32_t hash = md->hash();
403 #define GRPC_MDNULL GRPC_MAKE_MDELEM(NULL, GRPC_MDELEM_STORAGE_EXTERNAL) 406 #define GRPC_MDELEM_LENGTH(e) \ 407 (GRPC_SLICE_LENGTH(GRPC_MDKEY((e))) + GRPC_SLICE_LENGTH(GRPC_MDVALUE((e))) + \ 410 #define GRPC_MDSTR_KV_HASH(k_hash, v_hash) (GPR_ROTL((k_hash), 2) ^ (v_hash))
Definition: slice_utils.h:101
uintptr_t payload
Definition: metadata.h:101
Mutex mu_user_data
Definition: metadata.h:205
Definition: metadata.h:204
bool Unref()
Definition: metadata.h:258
RefcountedMdBase(const grpc_slice &key, const grpc_slice &value, uint32_t hash)
Definition: metadata.h:233
const grpc_slice & key() const
Definition: metadata.h:237
A grpc_slice s, if initialized, represents the byte range s.bytes[0..s.length-1]. ...
Definition: slice.h:60
T FetchAdd(Arg arg, MemoryOrder order=MemoryOrder::SEQ_CST)
Definition: atomic.h:71
void Ref(const char *file, int line)
Definition: metadata.h:242
bool FirstRef()
Definition: metadata.h:271
bool grpc_slice_eq_static_interned(const grpc_slice &a, const grpc_slice &b_static_interned)
Definition: slice_utils.h:51
uint32_t hash()
Definition: metadata.h:239
Round Robin Policy.
Definition: backend_metric.cc:24
grpc_core::Atomic< void * > data
Definition: metadata.h:207
Definition: metadata.h:70
Definition: metadata.h:229
bool AllRefsDropped()
Definition: metadata.h:270
const grpc_slice value
Definition: metadata.h:72
RefcountedMdBase(const grpc_slice &key, const grpc_slice &value)
Definition: metadata.h:231
Definition: metadata.h:98
const grpc_slice & value() const
Definition: metadata.h:238
#define GPR_ASSERT(x)
abort() the process if x is zero, having written a line to the log.
Definition: log.h:94
T Load(MemoryOrder order) const
Definition: atomic.h:44
bool Unref(const char *file, int line)
Definition: metadata.h:247
Definition: slice_utils.h:122
Definition: slice_utils.h:145
void(* destroy_user_data_func)(void *data)
Definition: metadata.h:202
T FetchSub(Arg arg, MemoryOrder order=MemoryOrder::SEQ_CST)
Definition: atomic.h:77
Definition: metadata.cc:219
#define GPR_DEBUG_ASSERT(x)
Definition: log.h:103
void Ref()
Definition: metadata.h:252
QueuedPick * next
Definition: client_channel.cc:113
grpc_core::Atomic< destroy_user_data_func > destroy_user_data
Definition: metadata.h:206
const grpc_slice key
Definition: metadata.h:71
intptr_t RefValue()
Definition: metadata.h:269
void TraceAtStart(const char *tag)
Definition: metadata.cc:157