in ecosystem/simple_dom.cpp [30:71]
inline int NodeImpl::init_non_root(str key, str value,
const NodeImpl* root, uint32_t flags) {
_root = root;
assert(root);
_flags = flags & ~FLAG_IS_ROOT;
assert(key.length() <= MAX_KEY_LENGTH);
assert(value.length() <= MAX_VALUE_LENGTH);
_k_len = key.length();
_v_len = value.length();
auto text_begin = root->_text_begin;
assert(key.empty() || key.data() > text_begin);
assert(value.empty() || value.data() > key.end());
uint64_t koff, voff;
switch ((key.empty() << 1) | value.empty()) {
case 0: // key && value
koff = key.data() - text_begin;
voff = value.data() - key.end();
break;
case 1: // key && !value
koff = key.data() - text_begin;
voff = 0;
break;
case 2: // !key && value
koff = value.data() - text_begin;
voff = 0;
break;
case 3: // !key && !value
_k_off = 0; _k_len = 0;
_v_off = 0; _v_len = 0;
return 0;
default:
assert(false);
return -1;
}
assert(koff <= MAX_KEY_OFFSET);
assert(voff <= MAX_VALUE_OFFSET);
_k_off = koff;
_v_off = voff;
return 0;
}