root/opal/mca/hwloc/hwloc201/hwloc/include/private/xml.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 /*
   2  * Copyright © 2009-2017 Inria.  All rights reserved.
   3  * See COPYING in top-level directory.
   4  */
   5 
   6 #ifndef PRIVATE_XML_H
   7 #define PRIVATE_XML_H 1
   8 
   9 #include <hwloc.h>
  10 
  11 #include <sys/types.h>
  12 
  13 HWLOC_DECLSPEC int hwloc__xml_verbose(void);
  14 
  15 /**************
  16  * XML import *
  17  **************/
  18 
  19 typedef struct hwloc__xml_import_state_s {
  20   struct hwloc__xml_import_state_s *parent;
  21 
  22   /* globals shared because the entire stack of states during import */
  23   struct hwloc_xml_backend_data_s *global;
  24 
  25   /* opaque data used to store backend-specific data.
  26    * statically allocated to allow stack-allocation by the common code without knowing actual backend needs.
  27    */
  28   char data[32];
  29 } * hwloc__xml_import_state_t;
  30 
  31 struct hwloc__xml_imported_v1distances_s {
  32   unsigned long kind;
  33   unsigned nbobjs;
  34   float *floats;
  35   struct hwloc__xml_imported_v1distances_s *prev, *next;
  36 };
  37 
  38 HWLOC_DECLSPEC int hwloc__xml_import_diff(hwloc__xml_import_state_t state, hwloc_topology_diff_t *firstdiffp);
  39 
  40 struct hwloc_xml_backend_data_s {
  41   /* xml backend parameters */
  42   int (*look_init)(struct hwloc_xml_backend_data_s *bdata, struct hwloc__xml_import_state_s *state);
  43   void (*look_done)(struct hwloc_xml_backend_data_s *bdata, int result);
  44   void (*backend_exit)(struct hwloc_xml_backend_data_s *bdata);
  45   int (*next_attr)(struct hwloc__xml_import_state_s * state, char **namep, char **valuep);
  46   int (*find_child)(struct hwloc__xml_import_state_s * state, struct hwloc__xml_import_state_s * childstate, char **tagp);
  47   int (*close_tag)(struct hwloc__xml_import_state_s * state); /* look for an explicit closing tag </name> */
  48   void (*close_child)(struct hwloc__xml_import_state_s * state);
  49   int (*get_content)(struct hwloc__xml_import_state_s * state, char **beginp, size_t expected_length); /* return 0 on empty content (and sets beginp to empty string), 1 on actual content, -1 on error or unexpected content length */
  50   void (*close_content)(struct hwloc__xml_import_state_s * state);
  51   char * msgprefix;
  52   void *data; /* libxml2 doc, or nolibxml buffer */
  53   unsigned version_major, version_minor;
  54   unsigned nbnumanodes;
  55   hwloc_obj_t first_numanode, last_numanode; /* temporary cousin-list for handling v1distances */
  56   struct hwloc__xml_imported_v1distances_s *first_v1dist, *last_v1dist;
  57 };
  58 
  59 /**************
  60  * XML export *
  61  **************/
  62 
  63 typedef struct hwloc__xml_export_state_s {
  64   struct hwloc__xml_export_state_s *parent;
  65 
  66   void (*new_child)(struct hwloc__xml_export_state_s *parentstate, struct hwloc__xml_export_state_s *state, const char *name);
  67   void (*new_prop)(struct hwloc__xml_export_state_s *state, const char *name, const char *value);
  68   void (*add_content)(struct hwloc__xml_export_state_s *state, const char *buffer, size_t length);
  69   void (*end_object)(struct hwloc__xml_export_state_s *state, const char *name);
  70 
  71   struct hwloc__xml_export_data_s {
  72     hwloc_obj_t v1_memory_group; /* if we need to insert intermediate group above memory children when exporting to v1 */
  73   } *global;
  74 
  75   /* opaque data used to store backend-specific data.
  76    * statically allocated to allow stack-allocation by the common code without knowing actual backend needs.
  77    */
  78   char data[40];
  79 } * hwloc__xml_export_state_t;
  80 
  81 HWLOC_DECLSPEC void hwloc__xml_export_topology(hwloc__xml_export_state_t parentstate, hwloc_topology_t topology, unsigned long flags);
  82 
  83 HWLOC_DECLSPEC void hwloc__xml_export_diff(hwloc__xml_export_state_t parentstate, hwloc_topology_diff_t diff);
  84 
  85 /******************
  86  * XML components *
  87  ******************/
  88 
  89 struct hwloc_xml_callbacks {
  90   int (*backend_init)(struct hwloc_xml_backend_data_s *bdata, const char *xmlpath, const char *xmlbuffer, int xmlbuflen);
  91   int (*export_file)(struct hwloc_topology *topology, struct hwloc__xml_export_data_s *edata, const char *filename, unsigned long flags);
  92   int (*export_buffer)(struct hwloc_topology *topology, struct hwloc__xml_export_data_s *edata, char **xmlbuffer, int *buflen, unsigned long flags);
  93   void (*free_buffer)(void *xmlbuffer);
  94   int (*import_diff)(struct hwloc__xml_import_state_s *state, const char *xmlpath, const char *xmlbuffer, int xmlbuflen, hwloc_topology_diff_t *diff, char **refnamep);
  95   int (*export_diff_file)(union hwloc_topology_diff_u *diff, const char *refname, const char *filename);
  96   int (*export_diff_buffer)(union hwloc_topology_diff_u *diff, const char *refname, char **xmlbuffer, int *buflen);
  97 };
  98 
  99 struct hwloc_xml_component {
 100   struct hwloc_xml_callbacks *nolibxml_callbacks;
 101   struct hwloc_xml_callbacks *libxml_callbacks;
 102 };
 103 
 104 HWLOC_DECLSPEC void hwloc_xml_callbacks_register(struct hwloc_xml_component *component);
 105 HWLOC_DECLSPEC void hwloc_xml_callbacks_reset(void);
 106 
 107 #endif /* PRIVATE_XML_H */

/* [<][>][^][v][top][bottom][index][help] */