SIONlib  1.6.2
Scalable I/O library for parallel access to task-local files
sion_generic_apidesc.c
Go to the documentation of this file.
1 /****************************************************************************
2 ** SIONLIB http://www.fz-juelich.de/jsc/sionlib **
3 *****************************************************************************
4 ** Copyright (c) 2008-2016 **
5 ** Forschungszentrum Juelich, Juelich Supercomputing Centre **
6 ** **
7 ** See the file COPYRIGHT in the package base directory for details **
8 ****************************************************************************/
9 
14 #include <stdlib.h>
15 #include <stdio.h>
16 #include <stdarg.h>
17 #include <string.h>
18 
19 #include "sion.h"
20 #include "sion_internal.h"
21 #include "sion_debug.h"
22 #include "sion_generic_apidesc.h"
23 
29  _sion_generic_apidesc *sion_apidesc;
30 
31  sion_apidesc = (_sion_generic_apidesc *) malloc(sizeof(_sion_generic_apidesc));
32  if (sion_apidesc == NULL) {
33  _sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,"cannot allocate apidescriptor structure of size %lu (sion_apidesc), aborting ...\n", (unsigned long) sizeof(_sion_generic_apidesc));
34  return(NULL);
35  }
36 
37  return(sion_apidesc);
38 }
39 
47 {
48 
49  int rc = SION_SUCCESS;
50 
51  if (sion_apidesc == NULL) {
52  return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,"_sion_generic_init_apidesc: cannot initalized, data structure is not allocated, aborting ...\n"));
53  }
54  sion_apidesc->aid = -1;
55  sion_apidesc->name = NULL;
56  sion_apidesc->level=SION_GENERIC_API_LEVEL_NONE;
57  sion_apidesc->create_lcg_cb = NULL;
58  sion_apidesc->free_lcg_cb = NULL;
59  sion_apidesc->barrier_cb = NULL;
60  sion_apidesc->bcastr_cb = NULL;
61  sion_apidesc->gatherr_cb = NULL;
62  sion_apidesc->gathervr_cb = NULL;
63  sion_apidesc->scatterr_cb = NULL;
64  sion_apidesc->scattervr_cb = NULL;
65  sion_apidesc->gather_execute_cb = NULL;
66  sion_apidesc->execute_scatter_cb = NULL;
67  sion_apidesc->get_multi_filename_cb = NULL;
68  sion_apidesc->get_capability_cb = NULL;
69  return(rc);
70 
71 }
72 
80 {
81 
82  int rc = SION_SUCCESS;
83 
84  if (sion_apidesc == NULL) {
85  return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,"_sion_generic_free_apidesc: cannot free, data structure is not allocated, aborting ...\n"));
86  }
87 
88  if (sion_apidesc->name) free(sion_apidesc->name);
89 
90  free(sion_apidesc);
91 
92  return(rc);
93 
94 }
95 
96 
102  _sion_generic_gendata *sion_gendata;
103 
104  sion_gendata = (_sion_generic_gendata *) malloc(sizeof(_sion_generic_gendata));
105  if (sion_gendata == NULL) {
106  _sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,"cannot allocate gendata structure of size %lu (sion_gendata), aborting ...\n", (unsigned long) sizeof(_sion_generic_gendata));
107  return(NULL);
108  }
109 
110  return(sion_gendata);
111 }
112 
120 {
121 
122  int rc = SION_SUCCESS;
123 
124  if (sion_gendata == NULL) {
125  return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,"_sion_generic_init_gendata: cannot initalized, data structure is not allocated, aborting ...\n"));
126  }
127  sion_gendata->apidesc = NULL;
128  sion_gendata->aid = -1;
129  sion_gendata->comm_data_global = NULL;
130  sion_gendata->comm_data_local = NULL;
131 
132  return(rc);
133 
134 }
135 
143 {
144 
145  int rc = SION_SUCCESS;
146 
147  if (sion_gendata == NULL) {
148  return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,"_sion_generic_free_gendata: cannot free, data structure is not allocated, aborting ...\n"));
149  }
150  free(sion_gendata);
151 
152  return(rc);
153 
154 }
155 
156 
164 {
165 
166  int rc = SION_SUCCESS;
167 
168  if (sion_apidesc == NULL) {
169  return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,"_sion_generic_update_api_level: cannot update data structure, it is not allocated, aborting ...\n"));
170  }
171 
172  if (
173  (sion_apidesc->create_lcg_cb) &&
174  (sion_apidesc->free_lcg_cb) &&
175  (sion_apidesc->barrier_cb) &&
176  (sion_apidesc->bcastr_cb) &&
177  (sion_apidesc->gatherr_cb) &&
178  (sion_apidesc->gathervr_cb) &&
179  (sion_apidesc->scatterr_cb) &&
180  (sion_apidesc->scattervr_cb)
181  ) {
182  sion_apidesc->level=SION_GENERIC_API_LEVEL_STD;
183 
184  if (
185  (sion_apidesc->gather_execute_cb) &&
186  (sion_apidesc->execute_scatter_cb) &&
187  (sion_apidesc->get_capability_cb)
188  ) {
189  sion_apidesc->level=SION_GENERIC_API_LEVEL_FULL;
190  }
191  }
192 
193  return(rc);
194 
195 }
_sion_generic_gendata * _sion_generic_alloc_gendata()
Allocates memory for internal sion api data structure needed for each SION file.
int _sion_generic_free_apidesc(_sion_generic_apidesc *sion_apidesc)
free apidesc structure
_sion_generic_apidesc * _sion_generic_alloc_apidesc()
Allocates memory for internal sion api desc structure.
int _sion_errorprint(int rc, int level, const char *format,...)
Internal SION error.
int _sion_generic_update_api_level(_sion_generic_apidesc *sion_apidesc)
Update API level.
int _sion_generic_init_apidesc(_sion_generic_apidesc *sion_apidesc)
Initialize the sion api description.
int _sion_generic_free_gendata(_sion_generic_gendata *sion_gendata)
Free sion gendata description.
int _sion_generic_init_gendata(_sion_generic_gendata *sion_gendata)
Initialize the sion file description.