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
00061 typedef enum hwloc_topology_diff_obj_attr_type_e {
00066 HWLOC_TOPOLOGY_DIFF_OBJ_ATTR_SIZE,
00067
00073 HWLOC_TOPOLOGY_DIFF_OBJ_ATTR_NAME,
00077 HWLOC_TOPOLOGY_DIFF_OBJ_ATTR_INFO
00078 } hwloc_topology_diff_obj_attr_type_t;
00079
00082 union hwloc_topology_diff_obj_attr_u {
00083 struct hwloc_topology_diff_obj_attr_generic_s {
00084
00085 hwloc_topology_diff_obj_attr_type_t type;
00086 } generic;
00087
00089 struct hwloc_topology_diff_obj_attr_uint64_s {
00090
00091 hwloc_topology_diff_obj_attr_type_t type;
00092 hwloc_uint64_t index;
00093 hwloc_uint64_t oldvalue;
00094 hwloc_uint64_t newvalue;
00095 } uint64;
00096
00098 struct hwloc_topology_diff_obj_attr_string_s {
00099
00100 hwloc_topology_diff_obj_attr_type_t type;
00101 char *name;
00102 char *oldvalue;
00103 char *newvalue;
00104 } string;
00105 };
00106
00107
00110 typedef enum hwloc_topology_diff_type_e {
00114 HWLOC_TOPOLOGY_DIFF_OBJ_ATTR,
00115
00123 HWLOC_TOPOLOGY_DIFF_TOO_COMPLEX
00124 } hwloc_topology_diff_type_t;
00125
00128 typedef union hwloc_topology_diff_u {
00129 struct hwloc_topology_diff_generic_s {
00130
00131 hwloc_topology_diff_type_t type;
00132 union hwloc_topology_diff_u * next;
00133 } generic;
00134
00135
00136 struct hwloc_topology_diff_obj_attr_s {
00137 hwloc_topology_diff_type_t type;
00138 union hwloc_topology_diff_u * next;
00139
00140 unsigned obj_depth;
00141 unsigned obj_index;
00142 union hwloc_topology_diff_obj_attr_u diff;
00143 } obj_attr;
00144
00145
00146 struct hwloc_topology_diff_too_complex_s {
00147 hwloc_topology_diff_type_t type;
00148 union hwloc_topology_diff_u * next;
00149
00150 unsigned obj_depth;
00151 unsigned obj_index;
00152 } too_complex;
00153 } * hwloc_topology_diff_t;
00154
00155
00193 HWLOC_DECLSPEC int hwloc_topology_diff_build(hwloc_topology_t topology, hwloc_topology_t newtopology, unsigned long flags, hwloc_topology_diff_t *diff);
00194
00197 enum hwloc_topology_diff_apply_flags_e {
00201 HWLOC_TOPOLOGY_DIFF_APPLY_REVERSE = (1UL<<0)
00202 };
00203
00221 HWLOC_DECLSPEC int hwloc_topology_diff_apply(hwloc_topology_t topology, hwloc_topology_diff_t diff, unsigned long flags);
00222
00228 HWLOC_DECLSPEC int hwloc_topology_diff_destroy(hwloc_topology_t topology, hwloc_topology_diff_t diff);
00229
00244 HWLOC_DECLSPEC int hwloc_topology_diff_load_xml(hwloc_topology_t topology, const char *xmlpath, hwloc_topology_diff_t *diff, char **refname);
00245
00258 HWLOC_DECLSPEC int hwloc_topology_diff_export_xml(hwloc_topology_t topology, hwloc_topology_diff_t diff, const char *refname, const char *xmlpath);
00259
00274 HWLOC_DECLSPEC int hwloc_topology_diff_load_xmlbuffer(hwloc_topology_t topology, const char *xmlbuffer, int buflen, hwloc_topology_diff_t *diff, char **refname);
00275
00293 HWLOC_DECLSPEC int hwloc_topology_diff_export_xmlbuffer(hwloc_topology_t topology, hwloc_topology_diff_t diff, const char *refname, char **xmlbuffer, int *buflen);
00294
00298 #ifdef __cplusplus
00299 }
00300 #endif
00301
00302
00303 #endif