datatype/RBTree.hh
// Read-write lookup operation
// Returns: <node : wrapper_type*, ver : Version, found : bool, boundary : boundaries_type, parent : node_info_type>
// Atomic: looks for rbkvp.key() in the rbtree and inserts the key with an empty value if not found; aborts if found
// a phantom node
// @node: always points to the found/inserted node
// @ver: if inserted, nodeversion of @node; otherwise value version of @node
// @boundary: boundary nodes info (*pre-insertion* state) of the inserted/found node
// @parent: parent of the returned node, prior to any insertions
Read-write lookup operation
Returns: 
Atomic: looks for rbkvp.key() in the rbtree and inserts the key with an empty value if not found; aborts if found
a phantom node
Read - write lookup operation Returns : Atomic : looks for rbkvp . key () in the rbtree and inserts the key with an empty value if not found ; aborts if found a phantom node
inline std::tuple<wrapper_type*, Version, bool, boundaries_type, node_info_type>
    find_or_insert(wrapper_type& rbkvp) {
        lock_write(&treelock_);
        auto results = wrapper_tree_.find_insert(rbkvp,
                           rbpriv::make_compare<wrapper_type, wrapper_type>(wrapper_tree_.r_.get_compare()));
        unlock_write(&treelock_);
        bool found = std::get<2>(results);
        wrapper_type* ans = std::get<0>(results);
        Version ver = std::get<1>(results);
        if (found && is_phantom_node(ans, ver)) {
            Sto::abort();
        }
        return results;
    }
inline std :: tuple < wrapper_type * , Version , bool , boundaries_type , node_info_type > find_or_insert ( wrapper_type & rbkvp ) { lock_write ( & treelock_ ) ; auto results = wrapper_tree_ . find_insert ( rbkvp , rbpriv :: make_compare < wrapper_type , wrapper_type > ( wrapper_tree_ . r_ . get_compare ( ) ) ) ; unlock_write ( & treelock_ ) ; bool found = std :: get < 2 > ( results ) ; wrapper_type * ans = std :: get < 0 > ( results ) ; Version ver = std :: get < 1 > ( results ) ; if ( found && is_phantom_node ( ans , ver ) ) { Sto :: abort ( ) ; } return results ; }
Read-write lookup operation
Returns: <node : wrapper_type*, ver : Version, found : bool, boundary : boundaries_type, parent : node_info_type>
Atomic: looks for rbkvp.key() in the rbtree and inserts the key with an empty value if not found; aborts if found
a phantom node
Read - write lookup operation Returns : <node : wrapper_type * ver : Version found : bool boundary : boundaries_type parent : node_info_type > Atomic : looks for rbkvp . key () in the rbtree and inserts the key with an empty value if not found ; aborts if found a phantom node