|
|
|
#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.emplace<primitive *>(const_cast<primitive *>(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.emplace<internal::eNodeOperation>(op);
|
|
|
|
iter->left_child = &*lhs;
|
|
|
|
iter->right_child = &*rhs;
|
|
|
|
|
|
|
|
lhs->parent = &*iter;
|
|
|
|
rhs->parent = &*iter;
|
|
|
|
|
|
|
|
return iter;
|
|
|
|
}
|
|
|
|
|
|
|
|
EXTERN_C_END
|