Node Move and Swap

The Node class provides move and swap methods that allow you to efficiently combine or exchange data between Node trees. These provide similar semantics to C++ std::move and std::swap.

  • Node.move(Node): Allows you to move the entire contents and description of a passed Node into the calling Node. There are no copies. The calling Node assumes management of all pointers and relevant metadata.
  • Node.swap(Node): Allows you to swap the entire contents and description of two Nodes. There are no copies. The Node’s swap management of all pointers and relevant metadata. The schema parent pointers are updated to reflect the new hierarchy.
  • Python Move Example:
import conduit

n_a = conduit.Node()
n_b = conduit.Node()
info = conduit.Node()

n_b["path/to/data"] = 42

print("- Before Move -")
print("n_a contents:")
print(n_a)
print("n_a memory details:")
n_a.info(info)
print(info)

print("n_b contents:")
print(n_b)
print("n_b memory details:")
n_b.info(info)
print(info)

n_a.move(n_b)

print("- After Move -")
print("n_a contents:")
print(n_a)
print("n_a memory details:")
n_a.info(info)
print(info)

print("n_b contents:")
print(n_b)
print("n_b memory details:")
n_b.info(info)
print(info)

  • Output
 - Before Move -
 n_a contents:
 
 n_a memory details:
 
 n_b contents:
 
 path: 
   to: 
     data: 42
 
 n_b memory details:
 
 - After Move -
 n_a contents:
 
 path: 
   to: 
     data: 42
 
 n_a memory details:
 
 n_b contents:
 
 n_b memory details:
 
  • Python Swap Example:
import conduit

n_a = conduit.Node()
n_b = conduit.Node()
info = conduit.Node()

n_a["data"] = 10
n_b["path/to/data"] = 20

print("- Before Swap -")
print("n_a contents:")
print(n_a)
print("n_a memory details:")
n_a.info(info)
print(info)

print("n_b contents:")
print(n_b)
print("n_b memory details:")
n_b.info(info)
print(info)

n_a.move(n_b)

print("- After Swap -")
print("n_a contents:")
print(n_a)
print("n_a memory details:")
n_a.info(info)
print(info)

print("n_b contents:")
print(n_b)
print("n_b memory details:")
n_b.info(info)
print(info)

  • Output
 - Before Swap -
 n_a contents:
 
 data: 10
 
 n_a memory details:
 
 n_b contents:
 
 path: 
   to: 
     data: 20
 
 n_b memory details:
 
 - After Swap -
 n_a contents:
 
 path: 
   to: 
     data: 20
 
 n_a memory details:
 
 n_b contents:
 
 n_b memory details: