Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
tpia_map.cc
Go to the documentation of this file.
1/*
2# <<BEGIN-copyright>>
3# Copyright (c) 2010, Lawrence Livermore National Security, LLC.
4# Produced at the Lawrence Livermore National Laboratory
5# Written by Bret R. Beck, [email protected].
6# CODE-461393
7# All rights reserved.
8#
9# This file is part of GIDI. For details, see nuclear.llnl.gov.
10# Please also read the "Additional BSD Notice" at nuclear.llnl.gov.
11#
12# Redistribution and use in source and binary forms, with or without modification,
13# are permitted provided that the following conditions are met:
14#
15# 1) Redistributions of source code must retain the above copyright notice,
16# this list of conditions and the disclaimer below.
17# 2) Redistributions in binary form must reproduce the above copyright notice,
18# this list of conditions and the disclaimer (as noted below) in the
19# documentation and/or other materials provided with the distribution.
20# 3) Neither the name of the LLNS/LLNL nor the names of its contributors may be
21# used to endorse or promote products derived from this software without
22# specific prior written permission.
23#
24# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
25# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
26# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
27# SHALL LAWRENCE LIVERMORE NATIONAL SECURITY, LLC, THE U.S. DEPARTMENT OF ENERGY OR
28# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
29# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
30# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
31# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
32# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
33# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34# <<END-copyright>>
35*/
36#include <string.h>
37#include <limits.h>
38#ifdef WIN32
39 #include <Shlwapi.h>
40#endif
41#include <tpia_map.h>
42
43#if defined __cplusplus
44namespace GIDI {
45using namespace GIDI;
46#endif
47
48static tpia_mapEntry *_tpia_map_addEntry( statusMessageReporting *smr, tpia_map *map, enum tpia_mapEntry_type type, const char *schema, const char *path,
49 const char *evaluation, const char *projectile, const char *target );
50static char *_tpia_map_findTarget2( statusMessageReporting *smr, tpia_map *map, const char *evaluation, const char *projectile, const char *target );
51static int _tpia_map_findAllOfTarget2( statusMessageReporting *smr, tpia_map *mapAllOfTarget, tpia_map *map, const char *projectile, const char *targetName );
52static int _tpia_map_walkTree2( statusMessageReporting *smr, tpia_map *map, int level, int (*handler)( tpia_mapEntry *entry, int level, void *userData),
53 void *userData );
54static void _tpia_map_simpleWrite2( FILE *f, tpia_map *map, int level );
55static int _tpia_map_smrUserInterface( void *userData, char **str );
56/*
57************************************************************
58*/
60
61 tpia_map *map;
62
63 //if( ( map = xData_malloc2( smr, sizeof( tpia_map ), 0, "map" ) ) == NULL ) return( NULL );
64 if( ( map = (tpia_map*) xData_malloc2( smr, sizeof( tpia_map ), 0, "map" ) ) == NULL ) return( NULL );
65 //if( tpia_map_initialize( smr, map ) ) map = tpia_map_free( NULL, map );
66 if( tpia_map_initialize( smr, map ) ) map = (tpia_map*) tpia_map_free( NULL, map );
67 return( map );
68}
69/*
70************************************************************
71*/
72//int tpia_map_initialize( statusMessageReporting *smr, tpia_map *map ) {
74
75 memset( map, 0, sizeof( tpia_map ) );
77 map->smrUserInterface.smrUserInterface = _tpia_map_smrUserInterface;
78 map->smrUserInterface.map = map;
79 map->path = NULL;
80 map->mapFileName = NULL;
81 map->numberOfEntries = 0;
82 map->mapEntries = NULL;
83 return( 0 );
84}
85/*
86************************************************************
87*/
88tpia_map *tpia_map_readFile( statusMessageReporting *smr, const char *basePath, const char *mapFileName ) {
89/*
90* If an error occurrs, map is freed and NULL is returned.
91*/
92 int n = 0;
93 xData_document *doc;
94 xData_element *element;
95 xData_element *child;
96 tpia_map *map;
97 const char *evaluation, *projectile, *targetName, *path, *schema;
98#ifndef WIN32
99 char realPath[2 * ( PATH_MAX + 1 )], *p = &(realPath[PATH_MAX+1]);
100#endif
101#ifdef WIN32
102 char realPath[2 * ( _MAX_PATH + 1 )], *p = &(realPath[_MAX_PATH+1]);
103#endif
104
105 if( ( map = tpia_map_create( smr ) ) == NULL ) return( NULL );
106
107 if( ( basePath == NULL ) || ( mapFileName[0] == '/' ) ) {
108 strcpy( realPath, mapFileName ); }
109 else {
110 strcpy( realPath, basePath );
111 strcat( realPath, "/" );
112 strcat( realPath, mapFileName );
113 }
114#ifndef WIN32
115 if( realpath( realPath, p ) == NULL ) {
116 smr_setMessageError( smr, NULL, __FILE__, __LINE__, tpia_map_status_mapParsing, "No map file %s\n", mapFileName );
117 //return( tpia_map_free( NULL, map ) );
118 return( (tpia_map*) tpia_map_free( NULL, map ) );
119 }
120#endif
121 n = strlen( p ) + 2;
122 //if( ( map->path = xData_malloc2( smr, 2 * n, 0, "map->path" ) ) == NULL ) return( tpia_map_free( NULL, map ) );
123 //if( ( map->path = (char*) xData_malloc2( smr, 2 * n, 0, "map->path" ) ) == NULL ) return( tpia_map_free( NULL, map ) );
124 if( ( map->path = (char*) xData_malloc2( smr, 2 * n, 0, "map->path" ) ) == NULL ) return( (tpia_map*) tpia_map_free( NULL, map ) );
125 map->mapFileName = &(map->path[n + 1]);
126 strcpy( map->mapFileName, p );
127 strcpy( map->path, p );
128 if( ( p = strrchr( map->path, '/' ) ) != NULL ) {
129 *p = 0; }
130 else {
131 strcpy( map->path, "." );
132 }
133
134 //if( ( doc = xData_parseReadFile( smr, map->mapFileName, NULL, NULL ) ) == NULL ) return( tpia_map_free( NULL, map ) );
135 if( ( doc = xData_parseReadFile( smr, map->mapFileName, NULL, NULL ) ) == NULL ) return( (tpia_map*) tpia_map_free( NULL, map ) );
136
137 element = xData_getDocumentsElement( doc );
138 for( child = xData_getFirstElement( element ); child != NULL; child = xData_getNextElement( child ) ) {
139 if( !strcmp( child->name, "path" ) ) {
140 if( ( path = xData_getAttributesValueInElement( child , "path" ) ) == NULL ) {
141 smr_setMessageError( smr, &(map->smrUserInterface), __FILE__, __LINE__, tpia_map_status_mapParsing, "path missing path attribute" );
142 break;
143 }
144 if( ( projectile = xData_getAttributesValueInElement( child , "projectile" ) ) == NULL ) {
145 smr_setMessageError( smr, &(map->smrUserInterface), __FILE__, __LINE__, tpia_map_status_mapParsing, "path missing projectile attribute" );
146 break;
147 }
148 tpia_map_addPath( smr, map, path, projectile ); }
149 else if( !strcmp( child->name, "target" ) ) {
150 if( ( schema = xData_getAttributesValueInElement( child , "schema" ) ) == NULL ) {
151 smr_setMessageError( smr, &(map->smrUserInterface), __FILE__, __LINE__, tpia_map_status_mapParsing, "target missing 'schema' attribute" );
152 break;
153 }
154 if( ( path = xData_getAttributesValueInElement( child , "path" ) ) == NULL ) {
155 smr_setMessageError( smr, &(map->smrUserInterface), __FILE__, __LINE__, tpia_map_status_mapParsing, "target missing 'path' attribute" );
156 break;
157 }
158 if( ( evaluation = xData_getAttributesValueInElement( child , "evaluation" ) ) == NULL ) {
159 smr_setMessageError( smr, &(map->smrUserInterface), __FILE__, __LINE__, tpia_map_status_mapParsing, "target missing 'evaluation' attribute" );
160 break;
161 }
162 if( ( projectile = xData_getAttributesValueInElement( child , "projectile" ) ) == NULL ) {
163 smr_setMessageError( smr, &(map->smrUserInterface), __FILE__, __LINE__, tpia_map_status_mapParsing, "target missing 'projectile' attribute" );
164 break;
165 }
166 if( ( targetName = xData_getAttributesValueInElement( child , "target" ) ) == NULL ) {
167 smr_setMessageError( smr, &(map->smrUserInterface), __FILE__, __LINE__, tpia_map_status_mapParsing, "target missing 'target' attribute" );
168 break;
169 }
170 tpia_map_addTarget( smr, map, schema, path, evaluation, projectile, targetName ); }
171 else {
172 smr_setMessageError( smr, &(map->smrUserInterface), __FILE__, __LINE__, tpia_map_status_mapParsing, "invalid element = %s", child->name );
173 }
174 if( !smr_isOk( smr ) ) break;
175 }
176 xData_parseFree( smr, doc );
177 //if( !smr_isOk( smr ) ) map = tpia_map_free( NULL, map );
178 if( !smr_isOk( smr ) ) map = (tpia_map*) tpia_map_free( NULL, map );
179 return( map );
180}
181/*
182************************************************************
183*/
185
186 tpia_map_release( smr, map );
187 xData_free( smr, map );
188 return( NULL );
189}
190/*
191************************************************************
192*/
194
195 tpia_mapEntry *entry, *next;
196
197 if( map->path != NULL ) xData_free( NULL, map->path );
198 for( entry = map->mapEntries; entry != NULL; entry = next ) {
199 next = entry->next;
200 if( entry->schema != NULL ) xData_free( NULL, entry->schema );
201 if( entry->path != NULL ) xData_free( NULL, entry->path );
202 if( entry->evaluation != NULL ) xData_free( NULL, entry->evaluation );
203 if( entry->projectile != NULL ) xData_free( NULL, entry->projectile );
204 if( entry->targetName != NULL ) xData_free( NULL, entry->targetName );
205 if( entry->map != NULL ) tpia_map_free( smr, entry->map );
206 xData_free( NULL, entry );
207 }
208 map->numberOfEntries = 0;
209 map->mapEntries = NULL;
211}
212/*
213************************************************************
214*/
216
217 return( map->mapEntries );
218}
219/*
220************************************************************
221*/
223
224 return( entry->next );
225}
226/*
227************************************************************
228*/
229int tpia_map_addTarget( statusMessageReporting *smr, tpia_map *map, const char *schema, const char *path, const char *evaluation, const char *projectile, const char *target ) {
230
231 return( _tpia_map_addEntry( smr, map, tpia_mapEntry_type_target, schema, path, evaluation, projectile, target ) != NULL );
232}
233/*
234************************************************************
235*/
236int tpia_map_addPath( statusMessageReporting *smr, tpia_map *map, const char *path, const char *projectile ) {
237
238 tpia_mapEntry *entry = _tpia_map_addEntry( smr, map, tpia_mapEntry_type_path, NULL, path, NULL, projectile, NULL );
239
240 if( entry != NULL ) {
241 if( ( entry->map = tpia_map_readFile( smr, map->path, entry->path ) ) == NULL ) entry = NULL;
242 }
243 return( entry != NULL );
244}
245/*
246************************************************************
247*/
248static tpia_mapEntry *_tpia_map_addEntry( statusMessageReporting *smr, tpia_map *map, enum tpia_mapEntry_type type, const char *schema, const char *path,
249 const char *evaluation, const char *projectile, const char *targetName ) {
250
251 tpia_mapEntry *p;
252 tpia_mapEntry *entry;
253
254 //if( ( entry = xData_malloc2( smr, sizeof( tpia_mapEntry ), 1, "entry" ) ) == NULL ) return( NULL );
255 if( ( entry = (tpia_mapEntry*) xData_malloc2( smr, sizeof( tpia_mapEntry ), 1, "entry" ) ) == NULL ) return( NULL );
256 entry->next = NULL;
257 entry->type = type;
258 entry->path = NULL;
259 entry->map = NULL;
260 if( path != NULL ) {
261 //if( ( entry->path = xData_malloc2( smr, strlen( path ) + 1, 0, "path" ) ) == NULL ) {
262 if( ( entry->path = (char*) xData_malloc2( smr, strlen( path ) + 1, 0, "path" ) ) == NULL ) {
263 xData_free( smr, entry );
264 return( NULL );
265 }
266 strcpy( entry->path, path );
267 }
268 entry->evaluation = NULL;
269 if( evaluation != NULL ) {
270 //if( ( entry->evaluation = xData_malloc2( smr, strlen( evaluation ) + 1, 0, "evaluation" ) ) == NULL ) {
271 if( ( entry->evaluation = (char*) xData_malloc2( smr, strlen( evaluation ) + 1, 0, "evaluation" ) ) == NULL ) {
272 xData_free( smr, entry->path );
273 xData_free( smr, entry );
274 return( NULL );
275 }
276 strcpy( entry->evaluation, evaluation );
277 }
278 entry->projectile = NULL;
279 if( projectile != NULL ) {
280 //if( ( entry->projectile = xData_malloc2( smr, strlen( projectile ) + 1, 0, "projectile" ) ) == NULL ) {
281 if( ( entry->projectile = (char*) xData_malloc2( smr, strlen( projectile ) + 1, 0, "projectile" ) ) == NULL ) {
282 xData_free( smr, entry->evaluation );
283 xData_free( smr, entry->path );
284 xData_free( smr, entry );
285 return( NULL );
286 }
287 strcpy( entry->projectile, projectile );
288 }
289 entry->targetName = NULL;
290 if( targetName != NULL ) {
291 //if( ( entry->targetName = xData_malloc2( smr, strlen( targetName ) + 1, 0, "target" ) ) == NULL ) {
292 if( ( entry->targetName = (char*) xData_malloc2( smr, strlen( targetName ) + 1, 0, "target" ) ) == NULL ) {
293 xData_free( smr, entry->path );
294 xData_free( smr, entry->evaluation );
295 xData_free( smr, entry->projectile );
296 xData_free( smr, entry );
297 return( NULL );
298 }
299 strcpy( entry->targetName, targetName );
300 }
301 entry->schema = NULL;
302 if( schema != NULL ) {
303 //if( ( entry->schema = xData_malloc2( smr, strlen( schema ) + 1, 0, "schema" ) ) == NULL ) {
304 if( ( entry->schema = (char*) xData_malloc2( smr, strlen( schema ) + 1, 0, "schema" ) ) == NULL ) {
305 xData_free( smr, entry->path );
306 xData_free( smr, entry->evaluation );
307 xData_free( smr, entry->projectile );
308 xData_free( smr, entry->targetName );
309 xData_free( smr, entry );
310 return( NULL );
311 }
312 strcpy( entry->schema, schema );
313 }
314
315 if( map->mapEntries == NULL ) {
316 map->mapEntries = entry; }
317 else {
318 for( p = map->mapEntries; p->next != NULL; p = p->next ){;}
319 p->next = entry;
320 }
321 map->numberOfEntries++;
322 return( entry );
323}
324/*
325************************************************************
326*/
327char *tpia_map_findTarget( statusMessageReporting *smr, tpia_map *map, const char *evaluation, const char *projectile, const char *targetName ) {
328/*
329* Calling routine must free returned pointer.
330*/
331 char *path;
332
333 if( map->status != tpia_map_status_Ok ) return( NULL );
334
335 path = _tpia_map_findTarget2( smr, map, evaluation, projectile, targetName );
336 if( ( path == NULL ) && smr_isOk( smr ) ) {
337 if( evaluation == NULL ) {
338 smr_setMessageInfo( smr, &(map->smrUserInterface), __FILE__, __LINE__, 1, "target %s for projectile %s not found", targetName, projectile ); }
339 else {
340 smr_setMessageInfo( smr, &(map->smrUserInterface), __FILE__, __LINE__, 1, "target %s for projectile %s and evaluation %s not found", targetName, projectile, evaluation );
341 }
342 }
343 return( path );
344}
345/*
346************************************************************
347*/
348static char *_tpia_map_findTarget2( statusMessageReporting *smr, tpia_map *map, const char *evaluation, const char *projectile, const char *targetName ) {
349
350 tpia_mapEntry *entry;
351 char *path = NULL;
352 int n, status;
353
354 for( entry = map->mapEntries; entry != NULL; entry = entry->next ) {
355 switch( entry->type ) {
357 if( !strcmp( projectile, entry->projectile ) && ( !strcmp( targetName, entry->targetName ) ) ) {
358 if( evaluation == NULL ) {
359 status = 1; }
360 else {
361 status = !strcmp( evaluation, entry->evaluation );
362 }
363 if( status ) {
364 n = strlen( map->path ) + 1 + strlen( entry->path ) + 1;
365 //if( ( path = xData_malloc2( smr, n, 0, "path" ) ) == NULL ) return( NULL );
366 if( ( path = (char*) xData_malloc2( smr, n, 0, "path" ) ) == NULL ) return( NULL );
367 strcpy( path, map->path );
368 strcat( path, "/" );
369 if( entry->path[0] == '/' ) {
370 strcpy( path, entry->path ); }
371 else {
372 strcat( path, entry->path );
373 }
374 return( path );
375 }
376 }
377 break;
379 if( !strcmp( projectile, entry->projectile ) ) {
380 if( ( path = _tpia_map_findTarget2( smr, entry->map, evaluation, projectile, targetName ) ) != NULL ) return( path );
381 }
382 break;
383 default :
384 smr_setMessageInfo( smr, &(map->smrUserInterface), __FILE__, __LINE__, tpia_map_status_UnknownType, "unknown type = %d", entry->type );
385 return( NULL );
386 }
387 }
388 return( NULL );
389}
390/*
391************************************************************
392*/
393tpia_map *tpia_map_findAllOfTarget( statusMessageReporting *smr, tpia_map *map, const char *projectile, const char *targetName ) {
394/*
395* Calling routine must free returned pointer.
396*/
397 int status;
398 tpia_map *mapAllOfTarget;
399
400 if( map->status != tpia_map_status_Ok ) return( NULL );
401 if( ( mapAllOfTarget = tpia_map_create( smr ) ) == NULL ) return( NULL );
402 status = _tpia_map_findAllOfTarget2( smr, mapAllOfTarget, map, projectile, targetName );
403 //if( ( status != 0 ) ) mapAllOfTarget = tpia_map_free( smr, mapAllOfTarget );
404 if( ( status != 0 ) ) mapAllOfTarget = (tpia_map*) tpia_map_free( smr, mapAllOfTarget );
405 return( mapAllOfTarget );
406}
407/*
408************************************************************
409*/
410static int _tpia_map_findAllOfTarget2( statusMessageReporting *smr, tpia_map *mapAllOfTarget, tpia_map *map, const char *projectile, const char *targetName ) {
411
412 tpia_mapEntry *entry;
413
414 for( entry = map->mapEntries; entry != NULL; entry = entry->next ) {
415 switch( entry->type ) {
417 if( !strcmp( projectile, entry->projectile ) && ( !strcmp( targetName, entry->targetName ) ) ) {
418 if( _tpia_map_addEntry( smr, mapAllOfTarget, entry->type, entry->schema, entry->path, entry->evaluation, entry->projectile,
419 entry->targetName ) == NULL ) return( 1 );
420 }
421 break;
423 if( !strcmp( projectile, entry->projectile ) ) {
424 if( _tpia_map_findAllOfTarget2( smr, mapAllOfTarget, entry->map, projectile, targetName ) != 0 ) return( 1 );
425 }
426 break;
427 default :
428 smr_setMessageInfo( smr, &(map->smrUserInterface), __FILE__, __LINE__, tpia_map_status_UnknownType, "unknown type = %d", entry->type );
429 return( 1 );
430 }
431 }
432 return( 0 );
433}
434/*
435************************************************************
436*/
437char *tpia_map_getFullPath( statusMessageReporting *smr, tpia_map *map, const char *endPath ) {
438
439 char *path;
440
441 if( endPath[0] == '/' ) {
442 //if( ( path = xData_malloc2( smr, strlen( endPath ) + 1, 0, "path" ) ) == NULL ) return( NULL );
443 if( ( path = (char*) xData_malloc2( smr, strlen( endPath ) + 1, 0, "path" ) ) == NULL ) return( NULL );
444 path[0] = 0; }
445 else {
446 //if( ( path = xData_malloc2( smr, strlen( map->path ) + strlen( endPath ) + 2, 0, "path" ) ) == NULL ) return( NULL );
447 if( ( path = (char*) xData_malloc2( smr, strlen( map->path ) + strlen( endPath ) + 2, 0, "path" ) ) == NULL ) return( NULL );
448 strcpy( path, map->path );
449 strcat( path, "/" );
450 }
451 strcat( path, endPath );
452 return( path );
453}
454/*
455************************************************************
456*/
457int tpia_map_walkTree( statusMessageReporting *smr, tpia_map *map, int (*handler)( tpia_mapEntry *entry, int level, void *userData), void *userData ) {
458
459 return( _tpia_map_walkTree2( smr, map, 0, handler, userData ) );
460}
461/*
462************************************************************
463*/
464static int _tpia_map_walkTree2( statusMessageReporting *smr, tpia_map *map, int level, int (*handler)( tpia_mapEntry *entry, int level, void *userData),
465 void *userData ) {
466
467 tpia_mapEntry *entry;
468
469 for( entry = map->mapEntries; entry != NULL; entry = entry->next ) {
470 if( handler( entry, level, userData ) != 0 ) return( 1 );
471 if( entry->type == tpia_mapEntry_type_path ) if( _tpia_map_walkTree2( smr, entry->map, level + 1, handler, userData ) != 0 ) return( 1 );
472 }
473 return( 0 );
474}
475/*
476************************************************************
477*/
479
480 tpia_mapEntry *entry;
481 char *s, *p;
482 char targetFormat[] = "<target schema=\"%s\" evaluation=\"%s\" projectile=\"%s\" target=\"%s\" path=\"%s\"/>\n";
483 char pathFormat[] = "<path projectile=\"%s\" path=\"%s\"/>\n";
484 char start[] = "<map>\n";
485 char end[] = "</map>";
486 int n = 0, nStart = strlen( start ), nEnd = strlen( end );
487 int nTarget = strlen( targetFormat ) - 10, nPath = strlen( pathFormat ) - 4;
488
489 if( map->status != tpia_map_status_Ok ) return( NULL );
490
491 n = nStart + nEnd + 1;
492 for( entry = map->mapEntries; entry != NULL; entry = entry->next ) {
493 switch( entry->type ) {
495 n += strlen( entry->schema ) + strlen( entry->path ) + strlen( entry->evaluation ) + strlen( entry->projectile ) + strlen( entry->targetName ) + nTarget;
496 break;
498 n += strlen( entry->path ) + strlen( entry->projectile ) + nPath;
499 break;
500 default :
501 smr_setMessageInfo( smr, &(map->smrUserInterface), __FILE__, __LINE__, tpia_map_status_UnknownType, "unknown type = %d", entry->type );
502 return( NULL );
503 }
504 }
505
506 if( ( s = (char *) xData_malloc2( smr, n, 0, "xml string" ) ) == NULL ) return( NULL );
507 p = s;
508 strcpy( p, start );
509 while( *p ) p++;
510 for( entry = map->mapEntries; entry != NULL; entry = entry->next ) {
511 switch( entry->type ) {
513 sprintf( p, targetFormat, entry->schema, entry->evaluation, entry->projectile, entry->targetName, entry->path );
514 break;
516 sprintf( p, pathFormat, entry->projectile, entry->path );
517 break;
518 }
519 while( *p ) p++;
520 }
521 strcpy( p, end );
522 return( s );
523}
524/*
525************************************************************
526*/
527void tpia_map_simpleWrite( FILE *f, tpia_map *map ) { _tpia_map_simpleWrite2( f, map, 0 ); }
528/*
529************************************************************
530*/
531static void _tpia_map_simpleWrite2( FILE *f, tpia_map *map, int level ) {
532
533 tpia_mapEntry *entry;
534 char sLevel[] = " ";
535 int n = strlen( sLevel ) / 4;
536
537 if( map->status != tpia_map_status_Ok ) {
538 fprintf( f, "Bad map status = %d\n", map->status );
539 return;
540 }
541 if( level < n ) sLevel[4 * level] = 0;
542 fprintf( f, "%smap->path = %s\n", sLevel, map->path );
543 fprintf( f, "%smap->mapFileName = %s\n", sLevel, map->mapFileName );
544 for( entry = map->mapEntries; entry != NULL; entry = entry->next ) {
545 switch( entry->type ) {
547 fprintf( f, "%sType = target: schema = %s: evaluation = %s: projectile = %s: target = %s: path = %s\n", sLevel, entry->schema,
548 entry->evaluation, entry->projectile, entry->targetName, entry->path );
549 break;
551 fprintf( f, "%sType = path: projectile = %s: path = %s\n", sLevel, entry->projectile, entry->path );
552 _tpia_map_simpleWrite2( f, entry->map, level + 1 );
553 break;
554 default :
555 fprintf( f, "%sUnknown type = %d\n", sLevel, entry->type );
556 }
557 }
558}
559/*
560************************************************************
561*/
562static int _tpia_map_smrUserInterface( void *userData, char **str ) {
563
564 tpia_map_smr *smrUserInterface = (tpia_map_smr *) userData;
565 char fnl[] = "map file = ";
566 int size = strlen( fnl ) + strlen( smrUserInterface->map->mapFileName ) + 1;
567
568 if( str != NULL ) {
569 //if( ( *str = xData_malloc2( NULL, size, 0, "mapFileName" ) ) == NULL ) return( -1 );
570 if( ( *str = (char*) xData_malloc2( NULL, size, 0, "mapFileName" ) ) == NULL ) return( -1 );
571 strcpy( *str, fnl );
572 strcat( *str, smrUserInterface->map->mapFileName );
573 }
574 return( size );
575}
576
577#if defined __cplusplus
578}
579#endif
int smr_setMessageError(statusMessageReporting *smr, void *userInterface, const char *file, int line, int code, const char *fmt,...)
int smr_setMessageInfo(statusMessageReporting *smr, void *userInterface, const char *file, int line, int code, const char *fmt,...)
int smr_isOk(statusMessageReporting *smr)
char * projectile
Definition: tpia_map.h:68
char * evaluation
Definition: tpia_map.h:67
char * path
Definition: tpia_map.h:66
char * schema
Definition: tpia_map.h:65
char * targetName
Definition: tpia_map.h:69
tpia_mapEntry * next
Definition: tpia_map.h:63
enum tpia_mapEntry_type type
Definition: tpia_map.h:64
tpia_map * map
Definition: tpia_map.h:70
tpia_map_smr smrUserInterface
Definition: tpia_map.h:75
char * mapFileName
Definition: tpia_map.h:77
enum tpia_map_status status
Definition: tpia_map.h:74
tpia_mapEntry * mapEntries
Definition: tpia_map.h:79
int numberOfEntries
Definition: tpia_map.h:78
char * path
Definition: tpia_map.h:76
tpia_map * map
Definition: tpia_map.h:59
smr_userInterface smrUserInterface
Definition: tpia_map.h:58
char * name
Definition: xData.h:184
tpia_map * tpia_map_create(statusMessageReporting *smr)
Definition: tpia_map.cc:59
char * tpia_map_toXMLString(statusMessageReporting *smr, tpia_map *map)
Definition: tpia_map.cc:478
@ tpia_map_status_UnknownType
Definition: tpia_map.h:50
@ tpia_map_status_Ok
Definition: tpia_map.h:49
@ tpia_map_status_mapParsing
Definition: tpia_map.h:49
void tpia_map_simpleWrite(FILE *f, tpia_map *map)
Definition: tpia_map.cc:527
int tpia_map_initialize(statusMessageReporting *smr, tpia_map *map)
Definition: tpia_map.cc:73
char * tpia_map_getFullPath(statusMessageReporting *smr, tpia_map *map, const char *endPath)
Definition: tpia_map.cc:437
tpia_mapEntry * tpia_map_getNextEntry(tpia_mapEntry *entry)
Definition: tpia_map.cc:222
tpia_map * tpia_map_readFile(statusMessageReporting *smr, const char *basePath, const char *mapFileName)
Definition: tpia_map.cc:88
char * tpia_map_findTarget(statusMessageReporting *smr, tpia_map *map, const char *evaluation, const char *projectile, const char *targetName)
Definition: tpia_map.cc:327
void tpia_map_release(statusMessageReporting *smr, tpia_map *map)
Definition: tpia_map.cc:193
tpia_mapEntry * tpia_map_getFirstEntry(tpia_map *map)
Definition: tpia_map.cc:215
int tpia_map_walkTree(statusMessageReporting *smr, tpia_map *map, int(*handler)(tpia_mapEntry *entry, int level, void *userData), void *userData)
Definition: tpia_map.cc:457
tpia_map * tpia_map_findAllOfTarget(statusMessageReporting *smr, tpia_map *map, const char *projectile, const char *targetName)
Definition: tpia_map.cc:393
int tpia_map_addTarget(statusMessageReporting *smr, tpia_map *map, const char *method, const char *path, const char *evaluation, const char *projectile, const char *targetName)
Definition: tpia_map.cc:229
tpia_mapEntry_type
Definition: tpia_map.h:51
@ tpia_mapEntry_type_target
Definition: tpia_map.h:51
@ tpia_mapEntry_type_path
Definition: tpia_map.h:51
int tpia_map_addPath(statusMessageReporting *smr, tpia_map *map, const char *path, const char *projectile)
Definition: tpia_map.cc:236
void * tpia_map_free(statusMessageReporting *smr, tpia_map *map)
Definition: tpia_map.cc:184
void * xData_free(statusMessageReporting *smr, void *p)
Definition: xDataMisc.cc:89
const char * xData_getAttributesValueInElement(xData_element *element, const char *name)
Definition: xData.cc:546
void * xData_parseFree(statusMessageReporting *smr, xData_document *xData_doc)
Definition: xData.cc:208
xData_element * xData_getNextElement(xData_element *element)
Definition: xData.cc:478
xData_element * xData_getDocumentsElement(xData_document *xData_doc)
Definition: xData.cc:476
xData_element * xData_getFirstElement(xData_element *element)
Definition: xData.cc:477
xData_document * xData_parseReadFile(statusMessageReporting *smr, const char *fileName, xData_xDataTypeOk func, void *userData)
Definition: xData.cc:84
#define xData_malloc2(smr, size, zero, forItem)
Definition: xData.h:313
#define userData
Definition: xmlparse.cc:555