Building Custom Topologies

## Functions

int | hwloc_custom_insert_topology (hwloc_topology_t newtopology, hwloc_obj_t newparent, hwloc_topology_t oldtopology, hwloc_obj_t oldroot)
hwloc_obj_t | hwloc_custom_insert_group_object_by_parent (hwloc_topology_t topology, hwloc_obj_t parent, int groupdepth)

## Detailed Description

A custom topology may be initialized by calling hwloc_topology_set_custom() after hwloc_topology_init(). It may then be modified by inserting objects or entire topologies. Once done assembling, hwloc_topology_load() should be invoked as usual to finalize the topology.

## Function Documentation

## hwloc_custom_insert_group_object_by_parent()

hwloc_obj_t hwloc_custom_insert_group_object_by_parent | ( | hwloc_topology_t | topology,
|  | hwloc_obj_t | parent,
|  | int | groupdepth
| ) |  |

Insert a new group object inside a custom topology.

An object with type HWLOC_OBJ_GROUP is inserted as a new child of object `parent`.

`groupdepth` is the depth attribute to be given to the new object. It may for instance be 0 for top-level groups, 1 for their children, and so on.

The custom topology `newtopology` must have been prepared with hwloc_topology_set_custom() and not loaded with hwloc_topology_load() yet.

`parent` may be either the root of `topology` or an object that was added earlier through hwloc_custom_insert_group_object_by_parent().

Note
  The cpuset and nodeset of the new group object are NULL because these sets are meaningless when assembling multiple topologies.
  The cpuset and nodeset of the `parent` object are not modified.

## hwloc_custom_insert_topology()

int hwloc_custom_insert_topology | ( | hwloc_topology_t | newtopology,
|  | hwloc_obj_t | newparent,
|  | hwloc_topology_t | oldtopology,
|  | hwloc_obj_t | oldroot
| ) |  |

Insert an existing topology inside a custom topology.

Duplicate the existing topology `oldtopology` inside a new custom topology `newtopology` as a leaf of object `newparent`.

If `oldroot` is not `NULL`, duplicate `oldroot` and all its children instead of the entire `oldtopology`. Passing the root object of `oldtopology` in `oldroot` is equivalent to passing `NULL`.

The custom topology `newtopology` must have been prepared with hwloc_topology_set_custom() and not loaded with hwloc_topology_load() yet.

`newparent` may be either the root of `newtopology` or an object that was added through hwloc_custom_insert_group_object_by_parent().

Note
  The cpuset and nodeset of the `newparent` object are not modified based on the contents of `oldtopology`.