#include "blobtree.hpp" EXTERN_C_BEGIN blobtree_t::iterator blobtree_t::push_primitive_node(const primitive *primitive_ptr) { auto iter = nodes.emplace(); iter->node_data.set_ptr(const_cast(primitive_ptr)); return iter; } void blobtree_t::pop_node(blobtree_t::iterator node) { nodes.erase(node); } blobtree_t::iterator blobtree_t::push_operation_node(internal::eNodeOperation op, iterator lhs, iterator rhs) { if (!lhs->is_parent_null() || !rhs->is_parent_null()) { throw std::runtime_error("Cannot set operation node with non-null parent."); } auto iter = nodes.emplace(); iter->node_data.set_mark(static_cast(op)); iter->left_child = make_pointer_wrapper(*lhs); iter->right_child = make_pointer_wrapper(*rhs); lhs->parent = make_pointer_wrapper(*iter); rhs->parent = make_pointer_wrapper(*iter); return iter; } EXTERN_C_END