void insertImpl(TreeNode*& root, TreeNode* node) { if (!root) { root = node; return;} if (node->val < root->val) { insertImpl(root->left, node); } else { insertImpl(root->right, node); } }
NameValueTable::Elm* NameValueTable::insert(const StringData* name) { reserve(m_elms + 1); Elm* elm = insertImpl(name); if (elm->m_tv.m_type == KindOfInvalid) { ++m_elms; name->incRefCount(); } return elm; }
void NameValueTable::rehash(Elm* const oldTab, const size_t oldMask) { for (Elm* srcElm = &oldTab[oldMask]; srcElm != &oldTab[-1]; --srcElm) { if (srcElm->m_name) { assert(srcElm->m_tv.m_type == KindOfNamedLocal || tvIsPlausible(srcElm->m_tv)); Elm* dstElm = insertImpl(srcElm->m_name); dstElm->m_name = srcElm->m_name; dstElm->m_tv = srcElm->m_tv; } } }
TreeNode* insertNode(TreeNode* root, TreeNode* node) { insertImpl(root, node); return root; }