00001
00002 #ifdef FLIB
00003 #include "xassert.h"
00004 #include "jsoc.h"
00005 #include "inthandles.h"
00006 #include "hcontainer.h"
00007
00008 typedef const char *FHandleDRMS;
00009 typedef FHandleDRMS *pFHandleDRMS;
00010
00011 static HContainer_t *fHandlesCmdParams = NULL;
00012 static HContainer_t *fHandlesDRMS = NULL;
00013
00014
00015 void InthandlesInit(int cpsize)
00016 {
00017 if (!fHandlesCmdParams)
00018 {
00019 fHandlesCmdParams = hcon_create(cpsize,
00020 kMaxFHandleKey,
00021 NULL,
00022 NULL,
00023 NULL,
00024 NULL,
00025 0);
00026 XASSERT(fHandlesCmdParams);
00027 }
00028
00029 if (!fHandlesDRMS)
00030 {
00031 fHandlesDRMS = hcon_create(sizeof(void *),
00032 kMaxFHandleKey,
00033 NULL,
00034
00035 NULL,
00036 NULL,
00037 NULL,
00038 0);
00039 XASSERT(fHandlesDRMS);
00040 }
00041 }
00042
00043 void InthandlesTerm()
00044 {
00045 if (fHandlesCmdParams)
00046 {
00047 hcon_destroy(&fHandlesCmdParams);
00048 }
00049
00050 if (fHandlesDRMS)
00051 {
00052 hcon_destroy(&fHandlesDRMS);
00053 }
00054 }
00055
00056
00057
00058
00059
00060 void *GetJSOCStructure(void *handle, FHandleType_t t)
00061 {
00062 void *ret = NULL;
00063 char buf[kMaxFHandleKey];
00064
00065 if (handle != NULL)
00066 {
00067 switch(t)
00068 {
00069 case kFHandleTypeCmdParams:
00070 if (fHandlesCmdParams)
00071 {
00072 FHandleCmdParams h = *((pFHandleCmdParams)handle);
00073 void **ppCP = NULL;
00074 snprintf(buf, sizeof(buf), "%lld", (long long)(h));
00075 ppCP = (void **)hcon_lookup(fHandlesCmdParams, buf);
00076 if (ppCP)
00077 {
00078 ret = (void *)*ppCP;
00079 }
00080 }
00081 break;
00082 case kFHandleTypeDRMS:
00083 if (fHandlesDRMS)
00084 {
00085 FHandleDRMS h = handle;
00086 snprintf(buf, sizeof(buf), "%s", (const char *)h);
00087 void **st = (void **)hcon_lookup(fHandlesDRMS, buf);
00088 if (st)
00089 {
00090 ret = *st;
00091 }
00092 }
00093 break;
00094 default:
00095 fprintf(stderr, "Unknown Fortran handle type.\n");
00096 }
00097 }
00098
00099 return ret;
00100 }
00101
00102 int InsertJSOCStructure(void *handle, void *structure, FHandleType_t t, const char **keyout)
00103 {
00104 int ret = 1;
00105 char buf[kMaxFHandleKey];
00106
00107 if (handle != NULL && structure != NULL)
00108 {
00109 switch(t)
00110 {
00111 case kFHandleTypeCmdParams:
00112 if (fHandlesCmdParams)
00113 {
00114 FHandleCmdParams h = *((pFHandleCmdParams)handle);
00115 snprintf(buf, sizeof(buf), "%lld", (long long)(h));
00116 void *pCP = structure;
00117 ret = hcon_insert(fHandlesCmdParams, buf, &pCP);
00118 hcon_lookup_ext(fHandlesCmdParams, buf, keyout);
00119 }
00120 break;
00121 case kFHandleTypeDRMS:
00122
00123 if (fHandlesDRMS)
00124 {
00125 FHandleDRMS h = handle;
00126 snprintf(buf, sizeof(buf), "%s", (const char *)h);
00127 void **st = &structure;
00128 ret = hcon_insert(fHandlesDRMS, buf, st);
00129 st = hcon_lookup_ext(fHandlesDRMS, buf, keyout);
00130 }
00131 break;
00132 default:
00133 fprintf (stderr, "Unknown Fortran handle type.\n");
00134 }
00135 }
00136
00137 return ret;
00138 }
00139
00140 int RemoveJSOCStructure(void *handle, FHandleType_t t)
00141 {
00142 int ret = 1;
00143 char buf[kMaxFHandleKey];
00144
00145 if (handle != NULL)
00146 {
00147 switch(t)
00148 {
00149 case kFHandleTypeCmdParams:
00150 if (fHandlesCmdParams)
00151 {
00152 FHandleCmdParams h = *((pFHandleCmdParams)handle);
00153 snprintf(buf, sizeof(buf), "%lld", (long long)(h));
00154 hcon_remove(fHandlesCmdParams, buf);
00155 ret = (hcon_lookup(fHandlesCmdParams, buf) != NULL);
00156 }
00157 break;
00158 case kFHandleTypeDRMS:
00159 if (fHandlesDRMS)
00160 {
00161 FHandleDRMS h = handle;
00162 snprintf(buf, sizeof(buf), "%s", (const char *)h);
00163 hcon_remove(fHandlesDRMS, buf);
00164 ret = (hcon_lookup(fHandlesDRMS, buf) != NULL);
00165 }
00166 break;
00167 default:
00168 fprintf (stderr, "Unknown Fortran handle type.\n");
00169 }
00170 }
00171 return ret;
00172 }
00173
00174 #endif // FLIB