12 class w_keystr_t_test;
113 const void* keystr_suffix);
158 static int compare_bin_str(
const void* str1,
int len1,
const void* str2,
int len2);
242 if (
_data !=
nullptr) {
245 _data =
new unsigned char[required_len];
246 if (
_data !=
nullptr) {
261 if (r.
_data !=
nullptr) {
263 if (
_data !=
nullptr) {
272 if (r.
_data !=
nullptr) {
274 if (
_data !=
nullptr) {
282 assert (nonkeystr !=
nullptr);
285 if (
_data ==
nullptr) {
289 ::memcpy(
_data + 1, nonkeystr, length);
296 if (
_data ==
nullptr) {
306 if (
_data ==
nullptr) {
315 return ((
const unsigned char*)keystr)[0] ==
SIGN_NEGINF 317 || ((
const unsigned char*)keystr)[0] ==
SIGN_POSINF;
321 assert (length == 0 || keystr !=
nullptr);
325 if (
_data ==
nullptr) {
328 ::memcpy(
_data, keystr, length);
334 assert (keystr_prefix !=
nullptr);
337 assert (keystr_suffix !=
nullptr);
338 _strlen = prefix_length + suffix_length;
340 if (
_data ==
nullptr) {
343 ::memcpy(
_data, keystr_prefix, prefix_length);
344 ::memcpy(
_data + prefix_length, keystr_suffix, suffix_length);
351 const void* keystr_suffix) {
352 assert (keystr_prefix !=
nullptr);
353 _strlen = prefix_length + total_suffix_length;
355 if (
_data ==
nullptr) {
358 ::memcpy(
_data, keystr_prefix, prefix_length);
359 if (total_suffix_length > 0) {
360 if (total_suffix_length <
sizeof(poormkey)) {
363 _data[prefix_length] = *
reinterpret_cast<unsigned char*
>(&tmp);
364 assert (reinterpret_cast<unsigned char*>(&tmp)[1] == 0);
367 if (total_suffix_length >
sizeof(poormkey)) {
368 assert (keystr_suffix !=
nullptr);
369 ::memcpy(
_data + prefix_length +
sizeof(poormkey), keystr_suffix,
370 total_suffix_length -
sizeof(poormkey));
383 return _data !=
nullptr;
387 int d = ::memcmp(str1, str2, (len1 <= len2 ? len1 : len2));
390 d = (int)len1 - (
int)len2;
400 assert (
_data !=
nullptr);
401 assert (r.
_data !=
nullptr);
408 assert (
_data !=
nullptr);
409 assert (str !=
nullptr);
417 assert (str1 !=
nullptr);
418 assert (str2 !=
nullptr);
421 if (str1[i] != str2[i]) {
429 assert (
_data !=
nullptr);
430 assert (keystr !=
nullptr);
436 assert (
_data !=
nullptr);
437 assert (nonkeystr !=
nullptr);
479 assert (buffer !=
nullptr);
488 return std::basic_string<unsigned char>(
_data + 1,
_strlen - 1);
499 assert (buffer !=
nullptr);
514 o <<
"<Not constructed>";
516 o <<
"<Negative Infinity>";
518 o <<
"<Positive Infinity>";
520 o << std::string(reinterpret_cast<const char*>(v.
_data),
w_keystr_len_t common_leading_bytes(const w_keystr_t &r) const
Definition: w_key.h:399
void _assure(w_keystr_len_t required_len)
Definition: w_key.h:238
bool construct_regularkey(const void *nonkeystr, w_keystr_len_t length)
Definition: w_key.h:281
bool construct_from_vec(const cvec_t &vect)
const unsigned char SIGN_POSINF
Definition: w_key.h:21
bool operator>=(const w_keystr_t &r) const
Definition: w_key.h:546
bool copy_from_vec(const cvec_t &vect)
int compare_nonkeystr(const void *nonkeystr, w_keystr_len_t length) const
Definition: w_key.h:435
bool construct_from_keystr_poormkey_16(const void *keystr_prefix, w_keystr_len_t prefix_length, w_keystr_len_t total_suffix_length, uint16_t poormkey, const void *keystr_suffix)
Definition: w_key.h:348
Key string class which can represent a few special values.
Definition: w_key.h:47
unsigned char * _data
Definition: w_key.h:226
void clear()
Definition: w_key.h:447
static int compare_bin_str(const void *str1, int len1, const void *str2, int len2)
Definition: w_key.h:386
A constant vec_t (meaning things pointed to cannot be changed).
Definition: vec_t.h:95
bool construct_from_keystr(const void *keystr, w_keystr_len_t length)
Definition: w_key.h:320
bool is_posinf() const
Definition: w_key.h:462
bool construct_posinfkey()
Definition: w_key.h:303
void serialize_as_keystr(void *buffer) const
Definition: w_key.h:495
const unsigned char SIGN_REGULAR
Definition: w_key.h:19
uint32_t _memlen
Definition: w_key.h:232
bool _valid_signbyte(const void *keystr)
Definition: w_key.h:314
bool is_constructed() const
Definition: w_key.h:382
void serialize16_be(void *dest, uint16_t value)
Definition: w_endian.h:41
int compare_keystr(const void *keystr, w_keystr_len_t length) const
Definition: w_key.h:428
w_keystr_len_t get_length_as_nonkeystr() const
Definition: w_key.h:491
~w_keystr_t()
Definition: w_key.h:378
int compare(const w_keystr_t &r) const
Definition: w_key.h:395
w_keystr_len_t get_length_as_keystr() const
Definition: w_key.h:508
uint32_t _strlen
Definition: w_key.h:229
w_keystr_t & operator=(const w_keystr_t &r)
Definition: w_key.h:269
const unsigned char SIGN_NEGINF
Definition: w_key.h:17
bool construct_neginfkey()
Definition: w_key.h:293
bool operator<(const w_keystr_t &r) const
Definition: w_key.h:534
bool operator==(const w_keystr_t &r) const
Definition: w_key.h:526
friend class w_keystr_t_test
Definition: w_key.h:48
bool operator!=(const w_keystr_t &r) const
Definition: w_key.h:530
const void * buffer_as_keystr() const
Definition: w_key.h:504
bool operator<=(const w_keystr_t &r) const
Definition: w_key.h:542
bool is_neginf() const
Definition: w_key.h:454
bool operator>(const w_keystr_t &r) const
Definition: w_key.h:538
uint32_t w_keystr_len_t
Definition: w_key.h:23
bool is_regular() const
Definition: w_key.h:470
friend std::ostream & operator<<(std::ostream &, const w_keystr_t &v)
Definition: w_key.h:512
w_keystr_t()
Definition: w_key.h:253
std::basic_string< unsigned char > serialize_as_nonkeystr() const
Definition: w_key.h:485