00001
00002
00003
00004
00005
00010 #ifndef HWLOC_DIFF_H
00011 #define HWLOC_DIFF_H
00012
00013 #ifndef HWLOC_H
00014 #error Please include the main hwloc.h instead
00015 #endif
00016
00017
00018 #ifdef __cplusplus
00019 extern "C" {
00020 #elif 0
00021 }
00022 #endif
00023
00024
00060 typedef enum hwloc_topology_diff_obj_attr_type_e {
00065 HWLOC_TOPOLOGY_DIFF_OBJ_ATTR_SIZE,
00066
00072 HWLOC_TOPOLOGY_DIFF_OBJ_ATTR_NAME,
00076 HWLOC_TOPOLOGY_DIFF_OBJ_ATTR_INFO
00077 } hwloc_topology_diff_obj_attr_type_t;
00078
00081 union hwloc_topology_diff_obj_attr_u {
00082 struct hwloc_topology_diff_obj_attr_generic_s {
00083
00084 hwloc_topology_diff_obj_attr_type_t type;
00085 } generic;
00086
00088 struct hwloc_topology_diff_obj_attr_uint64_s {
00089
00090 hwloc_topology_diff_obj_attr_type_t type;
00091 hwloc_uint64_t index;
00092 hwloc_uint64_t oldvalue;
00093 hwloc_uint64_t newvalue;
00094 } uint64;
00095
00097 struct hwloc_topology_diff_obj_attr_string_s {
00098
00099 hwloc_topology_diff_obj_attr_type_t type;
00100 char *name;
00101 char *oldvalue;
00102 char *newvalue;
00103 } string;
00104 };
00105
00106
00109 typedef enum hwloc_topology_diff_type_e {
00110
00111
00112
00113 HWLOC_TOPOLOGY_DIFF_OBJ_ATTR,
00114
00115
00116
00117
00118
00119
00120
00121
00122 HWLOC_TOPOLOGY_DIFF_TOO_COMPLEX
00123 } hwloc_topology_diff_type_t;
00124
00127 typedef union hwloc_topology_diff_u {
00128 struct hwloc_topology_diff_generic_s {
00129
00130 hwloc_topology_diff_type_t type;
00131 union hwloc_topology_diff_u * next;
00132 } generic;
00133
00134
00135 struct hwloc_topology_diff_obj_attr_s {
00136 hwloc_topology_diff_type_t type;
00137 union hwloc_topology_diff_u * next;
00138
00139 unsigned obj_depth;
00140 unsigned obj_index;
00141 union hwloc_topology_diff_obj_attr_u diff;
00142 } obj_attr;
00143
00144
00145 struct hwloc_topology_diff_too_complex_s {
00146 hwloc_topology_diff_type_t type;
00147 union hwloc_topology_diff_u * next;
00148
00149 unsigned obj_depth;
00150 unsigned obj_index;
00151 } too_complex;
00152 } * hwloc_topology_diff_t;
00153
00154
00192 HWLOC_DECLSPEC int hwloc_topology_diff_build(hwloc_topology_t topology, hwloc_topology_t newtopology, unsigned long flags, hwloc_topology_diff_t *diff);
00193
00196 enum hwloc_topology_diff_apply_flags_e {
00200 HWLOC_TOPOLOGY_DIFF_APPLY_REVERSE = (1UL<<0)
00201 };
00202
00220 HWLOC_DECLSPEC int hwloc_topology_diff_apply(hwloc_topology_t topology, hwloc_topology_diff_t diff, unsigned long flags);
00221
00227 HWLOC_DECLSPEC int hwloc_topology_diff_destroy(hwloc_topology_t topology, hwloc_topology_diff_t diff);
00228
00243 HWLOC_DECLSPEC int hwloc_topology_diff_load_xml(hwloc_topology_t topology, const char *xmlpath, hwloc_topology_diff_t *diff, char **refname);
00244
00257 HWLOC_DECLSPEC int hwloc_topology_diff_export_xml(hwloc_topology_t topology, hwloc_topology_diff_t diff, const char *refname, const char *xmlpath);
00258
00273 HWLOC_DECLSPEC int hwloc_topology_diff_load_xmlbuffer(hwloc_topology_t topology, const char *xmlbuffer, int buflen, hwloc_topology_diff_t *diff, char **refname);
00274
00289 HWLOC_DECLSPEC int hwloc_topology_diff_export_xmlbuffer(hwloc_topology_t topology, hwloc_topology_diff_t diff, const char *refname, char **xmlbuffer, int *buflen);
00290
00294 #ifdef __cplusplus
00295 }
00296 #endif
00297
00298
00299 #endif