00001
00002 #ifdef IDLLIB
00003 #include "xassert.h"
00004 #include "jsoc.h"
00005 #include "inthandles.h"
00006 #include "hcontainer.h"
00007
00008 typedef const char *IDLHandleDRMS;
00009 typedef IDLHandleDRMS *pIDLHandleDRMS;
00010
00011 static HContainer_t *idlHandlesDRMS = NULL;
00012
00013
00014 void InthandlesInit()
00015 {
00016 if (!idlHandlesDRMS)
00017 {
00018 idlHandlesDRMS = hcon_create(sizeof(void *),
00019 kMaxIDLHandleKey,
00020 NULL,
00021
00022 NULL,
00023 NULL,
00024 NULL,
00025 0);
00026 XASSERT(idlHandlesDRMS);
00027 }
00028 }
00029
00030
00031
00032
00033 void InthandlesTerm()
00034 {
00035 if (idlHandlesDRMS)
00036 {
00037 hcon_destroy(&idlHandlesDRMS);
00038 }
00039 }
00040
00041
00042
00043
00044
00045
00046 void *GetJSOCStructure(void *handle, IDLHandleType_t t)
00047 {
00048 void *ret = NULL;
00049 char buf[kMaxIDLHandleKey];
00050
00051 if (handle != NULL)
00052 {
00053 switch(t)
00054 {
00055 case kIDLHandleTypeDRMS:
00056
00057 if (idlHandlesDRMS)
00058 {
00059 IDLHandleDRMS h = *((pIDLHandleDRMS)handle);
00060 snprintf(buf, sizeof(buf), "%s", (const char *)h);
00061 void **st = (void **)hcon_lookup(idlHandlesDRMS, buf);
00062 if (st)
00063 {
00064 ret = *st;
00065 }
00066 }
00067 break;
00068 default:
00069 fprintf(stderr, "Unknown IDL handle type.\n");
00070 }
00071 }
00072
00073 return ret;
00074 }
00075
00076 int InsertJSOCStructure(void *handle, void *structure, IDLHandleType_t t, const char **keyout)
00077 {
00078 int ret = 1;
00079 char buf[kMaxIDLHandleKey];
00080
00081 if (handle != NULL && structure != NULL)
00082 {
00083 switch(t)
00084 {
00085 case kIDLHandleTypeDRMS:
00086
00087 if (idlHandlesDRMS)
00088 {
00089 IDLHandleDRMS h = *((pIDLHandleDRMS)handle);
00090 snprintf(buf, sizeof(buf), "%s", (const char *)h);
00091 void **st = &structure;
00092 ret = hcon_insert(idlHandlesDRMS, buf, st);
00093 st = hcon_lookup_ext(idlHandlesDRMS, buf, keyout);
00094 }
00095 break;
00096 default:
00097 fprintf (stderr, "Unknown IDL handle type.\n");
00098 }
00099 }
00100
00101 return ret;
00102 }
00103
00104 int RemoveJSOCStructure(void *handle, IDLHandleType_t t)
00105 {
00106 int ret = 1;
00107 char buf[kMaxIDLHandleKey];
00108
00109 if (handle != NULL)
00110 {
00111 switch(t)
00112 {
00113 case kIDLHandleTypeDRMS:
00114 if (idlHandlesDRMS)
00115 {
00116
00117 IDLHandleDRMS h = *((pIDLHandleDRMS)handle);
00118 snprintf(buf, sizeof(buf), "%s", (const char *)h);
00119 hcon_remove(idlHandlesDRMS, buf);
00120 ret = (hcon_lookup(idlHandlesDRMS, buf) != NULL);
00121 }
00122 break;
00123 default:
00124 fprintf (stderr, "Unknown IDL handle type.\n");
00125 }
00126 }
00127 return ret;
00128 }
00129
00130 #endif //IDLLIB