void create_tree_node_copy (p_tree_node -w temporary_placement,
                            p_tree_node source_placement, ulong target_thread_id)
{
  with (source_placement)
  {
    if (->left) create_copy (&temporary_placement->left, ->left, size_of (tree_node), target_thread_id);
    if (->right) create_copy (&temporary_placement->right, ->right, size_of (tree_node), target_thread_id);
  }
}

void receive_tree_node_copy (p_tree_node -w target_placement,
                             p_tree_node temporary_placement, ulong source_thread_id)
{
  with (temporary_placement)
  {
    if (->left) receive_copy (&target_placement->left, ->left, size_of (tree_node), source_thread_id);
    if (->right) receive_copy (&target_placement->right, ->right, size_of (tree_node), source_thread_id);
  }
}