summaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
authorallen <allen@17b73243-c579-4c4c-a9d2-2d5706c11dac>1999-04-15 09:54:38 +0000
committerallen <allen@17b73243-c579-4c4c-a9d2-2d5706c11dac>1999-04-15 09:54:38 +0000
commit7ba11e281d881c30e158706f03c4162902323362 (patch)
tree5a263ff594d2bced9b4cfc3f56b0c9642baef587 /src/main
parentf8061c25ece275067badd916766ad24e8a0ecf85 (diff)
Restructured all the groups routines a bit, now in general they
take the full group or variable name, so you don't need all the DecomposeName business anymore. There will be 3 copies of many routines one taking the fullname one taking the index and one taking both/either arguments. IF YOU HAVE AN INDEX USE IT ... the routines which take the full name just call a routine to get the index. The general convention for names is CCTK_GetSomething(const char *fullname) ( = CCTK_GetSomething_ByIndex(CCTK_Get...Index(fullname)) ) CCTK_GetSomething_ByIndex(int index) CCTK_GetSomething_ByBoth(int index, const char *fullname) Also important to note is that the Group routines will all check and report errors ... so you should just have to handle the error codes in your own routine, you don't have to say for example that the variable index is out of range. I've changed all checked in routines (except for Grace :) ) to make use of these changes, but I have only checked under Linux, so you might want to hold of updating for a couple of hours while I check other platforms Gab. git-svn-id: http://svn.cactuscode.org/flesh/trunk@478 17b73243-c579-4c4c-a9d2-2d5706c11dac
Diffstat (limited to 'src/main')
-rw-r--r--src/main/Groups.c353
-rw-r--r--src/main/GroupsOnGH.c23
2 files changed, 174 insertions, 202 deletions
diff --git a/src/main/Groups.c b/src/main/Groups.c
index f726ab56..bf0b52b3 100644
--- a/src/main/Groups.c
+++ b/src/main/Groups.c
@@ -42,6 +42,83 @@ int _cctk_one = 1;
cGroupDefinition *CCTK_SetupGroup(const char *implementation, const char *group_name, int n_variables);
+
+ /*@@
+ @routine CCTK_GetGroupIndex
+ @date Fri Jan 29 08:43:48 1999
+ @author Tom Goodale
+ @desc
+ Gets the index number for the specified group.
+ @enddesc
+ @calls CCTK_Equals
+ @calledby
+ @history
+
+ @endhistory
+
+@@*/
+
+int CCTK_GetGroupIndex(const char *fullgroupname)
+{
+ int group_num;
+ int retval=-1;
+ int ierr;
+ char *imp1 = NULL;
+ char *group1 = NULL;
+ const char *imp2 = NULL;
+ const char *group2 = NULL;
+
+ switch(CCTK_DecomposeName(fullgroupname,&imp1,&group1))
+ {
+ case 1:
+
+ CCTK_Warn(2,"Group name not in correct format implementation::group");
+ retval = -3;
+ break;
+
+ case 2:
+
+ CCTK_Warn(2,"Memory allocation failed");
+ retval = -4;
+ break;
+
+ default:
+
+ imp2 = (const char *)imp1;
+ group2 = (const char *)group1;
+
+ for(group_num = 0; group_num < n_groups; group_num++)
+ {
+ if(CCTK_Equals(imp2, groups[group_num].implementation) &&
+ CCTK_Equals(group2, groups[group_num].name)) break;
+ }
+
+ if (group_num < n_groups)
+ {
+ retval = group_num;
+ }
+ else
+ {
+ char *message;
+ message = (char *)malloc( (100+sizeof(fullgroupname))*sizeof(char) );
+ sprintf(message,"No group found with the name %s",fullgroupname);
+ CCTK_Warn(2,message);
+ if (message) free(message);
+ retval = -1;
+ }
+ }
+
+ /* Free memory from CCTK_DecomposeName */
+ if (imp1) free(imp1);
+ if (group1) free(group1);
+
+ return retval;
+
+}
+
+
+
+
/*@@
@routine CCTK_CreateGroup
@date Thu Jan 14 15:25:54 1999
@@ -126,10 +203,10 @@ int CCTK_CreateGroup(const char *gname, const char *thorn, const char *imp,
#ifdef DEBUG_GROUPS
printf("Created group %s\n",gname);
- printf(" CCTK_GetGroupNum(%s,%s) = %d\n",imp,gname,
- CCTK_GetGroupNum(imp,gname));
- printf(" CCTK_GetGroupName(%d) = %s\n",CCTK_GetGroupNum(imp,gname),
- CCTK_GetGroupName(CCTK_GetGroupNum(imp,gname)));
+ printf(" CCTK_GetGroupIndex(%s) = %d\n",groupname,
+ CCTK_GetGroupIndex(groupname));
+ printf(" CCTK_GetGroupName(%d) = %s\n",CCTK_GetGroupIndex(name),
+ CCTK_GetGroupName(CCTK_GetGroupIndex(groupname)));
#endif
return retval;
@@ -159,8 +236,15 @@ cGroupDefinition *CCTK_SetupGroup(const char *implementation,
cGroupDefinition *returndata;
int variable;
int group_num;
-
- if((group_num = CCTK_GetGroupNum(implementation, name)) == -1)
+ char *fullname1;
+ const char *fullname2;
+
+ fullname1 = (char *) malloc( (strlen(implementation)+strlen(name)+2)
+ *sizeof(const char *));
+ sprintf(fullname1,"%s::%s",implementation,name);
+ fullname2 = (const char *)fullname1;
+
+ if((group_num = CCTK_GetGroupIndex(fullname1)) == -1)
{
/* Resize the array of groups */
if(temp = (cGroupDefinition *)realloc(groups, (n_groups+1)*sizeof(cGroupDefinition)))
@@ -235,100 +319,16 @@ cGroupDefinition *CCTK_SetupGroup(const char *implementation,
returndata = &(groups[group_num]);
}
+ if (fullname1) free(fullname1);
+
return returndata;
}
- /*@@
- @routine CCTK_GetGroupNum
- @date Fri Jan 29 08:43:48 1999
- @author Tom Goodale
- @desc
- Gets the index number for the specified group.
- @enddesc
- @calls CCTK_Equals
- @calledby
- @history
-
- @endhistory
-
-@@*/
-int CCTK_GetGroupNum(const char *implementation,
- const char *group)
-{
- int group_num;
- int fullname=0;
- int retval=-1;
- int ierr;
- char *message;
- char *impname=NULL;
- char *groupname=NULL;
-
- if (!implementation)
- {
- if (group)
- {
- ierr = CCTK_DecomposeName(group,&impname,&groupname);
- if (ierr == 0)
- {
- fullname=1; /* Successful decomposition */
- }
- else if (ierr == 1)
- {
- CCTK_Warn(2,"Full name not in correct format");
- retval = -3;
- }
- else if (ierr == 2)
- {
- CCTK_Warn(2,"Memory allocation failed");
- retval = -4;
- }
- else
- {
- CCTK_Warn(1,"Error failed to be caught");
- }
- }
- else
- {
- CCTK_Warn(2,"Both implementation and group null in CCTK_GetGroupNum");
- retval = -2;
- }
- }
- else
- {
- impname = (char *)implementation;
- groupname = (char *)group;
- }
-
- for(group_num = 0; group_num < n_groups; group_num++)
- {
- if(CCTK_Equals(implementation, groups[group_num].implementation) &&
- CCTK_Equals(groupname, groups[group_num].name)) break;
- }
-
- if (fullname)
- {
- if (impname) free(impname);
- if (groupname) free(groupname);
- }
-
- if (group_num < n_groups)
- {
- return group_num;
- }
- else
- {
- message = (char *)malloc( (100+sizeof(group))*sizeof(char) );
- sprintf(message,"No group found with the name %s",groupname);
- CCTK_Warn(2,message);
- if (message) free(message);
- return -1;
- }
-}
/*@@
- @routine CCTK_GetVarNum
+ @routine CCTK_GetVarIndex
@date Mon Feb 8 12:03:22 1999
@author Tom Goodale
@desc
@@ -342,9 +342,7 @@ int CCTK_GetGroupNum(const char *implementation,
@@*/
-int CCTK_GetVarNum(const char *implementation,
- const char *group_name,
- const char *variable_name)
+int CCTK_GetVarIndex(const char *variable_name)
{
int retval;
int gnum,group_num;
@@ -359,65 +357,18 @@ int CCTK_GetVarNum(const char *implementation,
retval = -1;
- if (!implementation)
- {
- if (group_name)
- {
- message = (char *)malloc( (100+sizeof(group_name))*sizeof(char) );
- sprintf(message,"Ignoring group %s in CCTK_GetVarNum",group_name);
- CCTK_Warn(2,message);
- if (message) free(message);
- }
+ ierr = CCTK_DecomposeName(variable_name,&realimpname,&realvarname);
- /* variable_name must be of the form <implementation>::<variable> */
- ierr = CCTK_DecomposeName(variable_name,&realimpname,&realvarname);
- if (ierr == 0)
- {
- fullname = 1;
- /* Store the pointers to these strings in const char *s */
- impname = realimpname;
- varname = realvarname;
- }
- else if (ierr == 1)
- {
- message = (char *)malloc( (100+sizeof(variable_name))*sizeof(char) );
- sprintf(message,"Full name %s in wrong format in CCTK_GetVarNum",
- variable_name);
- CCTK_Warn(2,message);
- if (message) free(message);
- retval = -3;
- }
- else if (ierr == 2)
- {
- CCTK_Warn(2,"Memory allocation failed");
- retval = -4;
- }
- else
- {
- CCTK_Warn(1,"Error failed to be caught");
- }
-
- }
- else
+ if (ierr == 0)
{
-
- /* Can only assign a const char * to a const char * */
- impname = implementation;
- varname = variable_name;
- }
-#ifdef DEBUG_GROUPS
- printf(" In GetVarNum\n"," ------------\n");
- printf(" impname -%s-\n",impname);
- printf(" group_name -%s-\n",group_name);
- printf(" varname -%s-\n",varname);
-#endif
-
- if (group_name == NULL)
- {
+ /* Store the pointers to these strings in const char *s */
+ impname = realimpname;
+ varname = realvarname;
+
for (gnum = 0; gnum < n_groups; gnum++)
{
-
+
for(variable=0; variable<groups[gnum].n_variables;variable++)
{
if(CCTK_Equals(varname, groups[gnum].variables[variable].name)
@@ -428,34 +379,37 @@ int CCTK_GetVarNum(const char *implementation,
}
}
}
- }
- else
+
+ }
+ else if (ierr == 1)
{
- group_num = CCTK_GetGroupNum(impname, group_name);
-
- if(group_num > -1)
- {
- for(variable=0; variable<groups[group_num].n_variables;variable++)
- {
- if(CCTK_Equals(varname, groups[group_num].variables[variable].name))
- {
- retval = groups[group_num].variables[variable].number;
- break;
- }
- }
- }
- else
- {
- retval = -2;
- }
+ message = (char *)malloc( (100+sizeof(variable_name))*sizeof(char) );
+ sprintf(message,"Full name %s in wrong format in CCTK_GetVarNum",
+ variable_name);
+ CCTK_Warn(2,message);
+ if (message) free(message);
+ retval = -3;
}
-
- if (fullname)
+ else if (ierr == 2)
+ {
+ CCTK_Warn(2,"Memory allocation failed");
+ retval = -4;
+ }
+ else
{
- /* Had to allocate new strings, so free them. */
- free(realimpname);
- free(realvarname);
+ CCTK_Warn(1,"Error failed to be caught");
}
+
+#ifdef DEBUG_GROUPS
+ printf(" In GetVarIndex\n"," ------------\n");
+ printf(" impname -%s-\n",impname);
+ printf(" group_name -%s-\n",group_name);
+ printf(" varname -%s-\n",varname);
+#endif
+
+
+ if (realimpname) free(realimpname);
+ if (realvarname) free(realvarname);
return retval;
@@ -520,7 +474,7 @@ int CCTK_GetNumGroups(void)
}
/*@@
- @routine CCTK_GetGroupFromVar
+ @routine CCTK_GetGroupNameFromVar_ByIndex
@date Mon Feb 22
@author Gabrielle Allen
@desc
@@ -533,7 +487,7 @@ int CCTK_GetNumGroups(void)
@endhistory
@@*/
-char *CCTK_GetGroupFromVar(int var)
+char *CCTK_GetGroupNameFromVar_ByIndex(int var)
{
char *retval;
int group_num;
@@ -545,12 +499,39 @@ char *CCTK_GetGroupFromVar(int var)
else
{
group_num = group_of_variable[var];
- retval = groups[group_num].name;
+ retval = (char *)malloc( ( strlen(groups[group_num].name)
+ + strlen(groups[group_num].implementation) + 2)
+ * sizeof(char) );
+ sprintf(retval,"%s::%s",groups[group_num].implementation,
+ groups[group_num].name);
}
return retval;
}
+int CCTK_GetGroupIndexFromVar_ByIndex(int var)
+{
+
+ int retval;
+
+ if (var<0 || var>total_variables-1)
+ {
+ retval = -1;
+ }
+ else
+ {
+ retval = group_of_variable[var];
+ }
+
+ return retval;
+
+}
+
+int CCTK_GetGroupIndexFromVar(const char *var)
+{
+ return CCTK_GetGroupIndexFromVar_ByIndex(CCTK_GetVarIndex(var));
+}
+
/*@@
@routine CCTK_GetImplementationFromVar
@date Mon Feb 22
@@ -807,7 +788,7 @@ char *CCTK_GetGroupName(int group)
}
else
{
- name = malloc((strlen(groups[group].implementation)+strlen(groups[group].name)+3)*sizeof(char));
+ name = (char *)malloc((strlen(groups[group].implementation)+strlen(groups[group].name)+3)*sizeof(char));
if (name)
{
sprintf(name, "%s::%s",groups[group].implementation, groups[group].name);
@@ -817,10 +798,12 @@ char *CCTK_GetGroupName(int group)
name = NULL;
}
}
+
return name;
}
-int CCTK_GetFirstVarNum(int group)
+
+int CCTK_GetFirstVarIndex_ByIndex(int group)
{
if (0 <= group && group<n_groups)
{
@@ -832,8 +815,13 @@ int CCTK_GetFirstVarNum(int group)
}
}
+int CCTK_GetFirstVarIndex(const char *groupname)
+{
+ return CCTK_GetFirstVarIndex_ByIndex(CCTK_GetGroupIndex(groupname));
+}
+
-int CCTK_GetNumVarsInGroup(int group)
+int CCTK_GetNumVarsInGroup_ByIndex(int group)
{
if (0 <= group && group<n_groups)
{
@@ -845,6 +833,11 @@ int CCTK_GetNumVarsInGroup(int group)
}
}
+int CCTK_GetNumVarsInGroup(const char *groupname)
+{
+ return CCTK_GetNumVarsInGroup_ByIndex(CCTK_GetGroupIndex(groupname));
+}
+
int CCTK_GetVarGType(int var)
{
int gtype;
diff --git a/src/main/GroupsOnGH.c b/src/main/GroupsOnGH.c
index e0c2213a..980effde 100644
--- a/src/main/GroupsOnGH.c
+++ b/src/main/GroupsOnGH.c
@@ -40,7 +40,7 @@ void *CCTK_GetVarDataPtr_ByName(cGH *GH, char *fullvarname, int timelevel)
int index;
void *retval=NULL;
- index = CCTK_GetVarNum(NULL,NULL,fullvarname);
+ index = CCTK_GetVarIndex(fullvarname);
if (index >= 0)
{
retval = GH->data[index][timelevel];
@@ -91,24 +91,3 @@ void *CCTK_GetVarDataPtr(cGH *GH, int varindex, char *fullvarname, int timelevel
}
}
-
- /*@@
- @routine CCTK_QueryGroupStorage
- @date
- @author Tom Goodale
- @desc
-
- @enddesc
- @calls
- @calledby
- @history
-
- @endhistory
-
-@@*/
-int CCTK_QueryGroupStorage(cGH *GH, const char *group)
-{
- /* Quick fudge */
- return 1;
-}
-