/[escript]/trunk/dudley/src/TagMap.c
ViewVC logotype

Diff of /trunk/dudley/src/TagMap.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 3086 by jfenwick, Thu Aug 5 05:07:58 2010 UTC revision 3224 by jfenwick, Wed Sep 29 05:19:37 2010 UTC
# Line 11  Line 11 
11  *  *
12  *******************************************************/  *******************************************************/
13    
   
14  /**************************************************************/  /**************************************************************/
15    
16  /* Dudley: simple mapping fram names to tag keys via a linked list */  /* Dudley: simple mapping fram names to tag keys via a linked list */
# Line 22  Line 21 
21    
22  /**************************************************************/  /**************************************************************/
23    
24  void Dudley_TagMap_insert(Dudley_TagMap** tag_map,  void Dudley_TagMap_insert(Dudley_TagMap ** tag_map, const char *name, index_t tag_key)
                           const char* name,  
                           index_t tag_key)  
25  {  {
26    Dudley_TagMap* map=NULL;      Dudley_TagMap *map = NULL;
27    if (strlen(name)<1) {      if (strlen(name) < 1)
28       Dudley_setError(VALUE_ERROR,"empty tag name.");      {
29       return;      Dudley_setError(VALUE_ERROR, "empty tag name.");
30    }      return;
31    if (strchr(name,32) != NULL) {   /* check for space */      }
32       Dudley_setError(VALUE_ERROR,"tag name may not contain a space.");      if (strchr(name, 32) != NULL)
33       return;      {               /* check for space */
34    }      Dudley_setError(VALUE_ERROR, "tag name may not contain a space.");
35    if (*tag_map == NULL) {      return;
36         map=MEMALLOC(1,Dudley_TagMap);      }
37         if (Dudley_checkPtr(map)) return;      if (*tag_map == NULL)
38         map->name=MEMALLOC(strlen(name)+1,char);      {
39         if (Dudley_checkPtr(map->name) ) {      map = MEMALLOC(1, Dudley_TagMap);
40              MEMFREE(map);      if (Dudley_checkPtr(map))
41          } else {          return;
42              strcpy(map->name,name);      map->name = MEMALLOC(strlen(name) + 1, char);
43              map->tag_key=tag_key;      if (Dudley_checkPtr(map->name))
44              map->next=NULL;      {
45              *tag_map=map;          MEMFREE(map);
46          }      }
47    } else {      else
48        if (strcmp((*tag_map)->name,name)==0) {      {
49           (*tag_map)->tag_key=tag_key;          strcpy(map->name, name);
50        } else {          map->tag_key = tag_key;
51           Dudley_TagMap_insert(&((*tag_map)->next),name,tag_key);          map->next = NULL;
52        }          *tag_map = map;
53    }      }
54        }
55        else
56        {
57        if (strcmp((*tag_map)->name, name) == 0)
58        {
59            (*tag_map)->tag_key = tag_key;
60        }
61        else
62        {
63            Dudley_TagMap_insert(&((*tag_map)->next), name, tag_key);
64        }
65        }
66  }  }
67    
68  index_t Dudley_TagMap_getTag(Dudley_TagMap* tag_map,const char* name)  index_t Dudley_TagMap_getTag(Dudley_TagMap * tag_map, const char *name)
69  {  {
70    char error_msg[LenErrorMsg_MAX];      char error_msg[LenErrorMsg_MAX];
71    if (tag_map == NULL) {      if (tag_map == NULL)
72          sprintf(error_msg,"Dudley_TagMap_getTag: unknown tag name %s.",name);      {
73          Dudley_setError(VALUE_ERROR,error_msg);      sprintf(error_msg, "Dudley_TagMap_getTag: unknown tag name %s.", name);
74          return -1;      Dudley_setError(VALUE_ERROR, error_msg);
75    } else {      return -1;
76        if (strcmp(tag_map->name,name)==0) {      }
77           return tag_map->tag_key;      else
78        } else {      {
79           return Dudley_TagMap_getTag(tag_map->next,name);      if (strcmp(tag_map->name, name) == 0)
80        }      {
81    }          return tag_map->tag_key;
82        }
83        else
84        {
85            return Dudley_TagMap_getTag(tag_map->next, name);
86        }
87        }
88  }  }
89  bool_t Dudley_TagMap_isValidTagName(Dudley_TagMap* tag_map, const char* name)  
90    bool_t Dudley_TagMap_isValidTagName(Dudley_TagMap * tag_map, const char *name)
91  {  {
92    if (tag_map == NULL) {      if (tag_map == NULL)
93          return FALSE;      {
94    } else {      return FALSE;
95        if (strcmp(tag_map->name,name)==0) {      }
96           return TRUE;      else
97        } else {      {
98           return Dudley_TagMap_isValidTagName(tag_map->next,name);      if (strcmp(tag_map->name, name) == 0)
99        }      {
100    }          return TRUE;
101        }
102        else
103        {
104            return Dudley_TagMap_isValidTagName(tag_map->next, name);
105        }
106        }
107  }  }
108    
109  /* deallocates the Dudley_TagMap in by recursive calls */  /* deallocates the Dudley_TagMap in by recursive calls */
110    
111  void Dudley_TagMap_free(Dudley_TagMap* in) {  void Dudley_TagMap_free(Dudley_TagMap * in)
112    if (in!=NULL) {  {
113      Dudley_TagMap_free(in->next);      if (in != NULL)
114      MEMFREE(in->name);      {
115      MEMFREE(in);      Dudley_TagMap_free(in->next);
116    }      MEMFREE(in->name);
117    return;      MEMFREE(in);
118        }
119        return;
120  }  }
   

Legend:
Removed from v.3086  
changed lines
  Added in v.3224

  ViewVC Help
Powered by ViewVC 1.1.26