static idl_action idl_unionOpen( idl_scope scope, const char *name, idl_typeUnion unionSpec, void *userData) { c_char spaces[20]; idl_tmplExp te; OS_UNUSED_ARG(unionSpec); OS_UNUSED_ARG(userData); /* QAC EXPECT 3416; No side effects here */ if (idl_streamsResolve(idl_streamsDefDefGet(), scope, name)) { /* keylist defined for this union */ te = idl_tmplExpNew(idlpp_macroSet); idl_macroSetAdd(idlpp_macroSet, idl_macroNew("namescope", idl_cxxId(idl_scopeElementName(idl_scopeCur(scope))))); idl_macroSetAdd(idlpp_macroSet, idl_macroNew("typename", idl_cxxId(name))); idl_macroSetAdd(idlpp_macroSet, idl_macroNew("scopedtypename", idl_scopeStack(scope, "::", name))); snprintf(spaces, sizeof(spaces), "%d", idlpp_indent_level*4); idl_macroSetAdd(idlpp_macroSet, idl_macroNew("spaces", spaces)); idlpp_inStream = idl_streamInNew(idlpp_template, idlpp_macroAttrib); idl_tmplExpProcessTmpl(te, idlpp_inStream, idl_fileCur()); idl_streamInFree(idlpp_inStream); idl_tmplExpFree(te); } return idl_abort; }
static void idl_typedefOpenClose( idl_scope scope, const char *name, idl_typeDef defSpec, void *userData) { c_char spaces[20]; idl_tmplExp te; OS_UNUSED_ARG(userData); if ((idl_typeSpecType(idl_typeDefRefered(defSpec)) == idl_tstruct || (idl_typeSpecType(idl_typeDefRefered(defSpec)) == idl_tunion)) && (idl_streamsResolve(idl_streamsDefDefGet(), scope, name))) { /* keylist defined for this typedef of struct or union */ te = idl_tmplExpNew(idlpp_macroSet); idl_macroSetAdd(idlpp_macroSet, idl_macroNew("namescope", idl_cxxId(idl_scopeElementName(idl_scopeCur(scope))))); idl_macroSetAdd(idlpp_macroSet, idl_macroNew("typename", idl_cxxId(name))); idl_macroSetAdd(idlpp_macroSet, idl_macroNew("scopedtypename", idl_scopeStack(scope, "::", name))); snprintf(spaces, sizeof(spaces), "%d", idlpp_indent_level*4); idl_macroSetAdd(idlpp_macroSet, idl_macroNew("spaces", spaces)); idlpp_inStream = idl_streamInNew(idlpp_template, idlpp_macroAttrib); idl_tmplExpProcessTmpl(te, idlpp_inStream, idl_fileCur()); idl_streamInFree(idlpp_inStream); idl_tmplExpFree(te); } }
static idl_action idl_structureOpen( idl_scope scope, const char *name, idl_typeStruct structSpec, void *userData) { c_char spaces[20]; idl_tmplExp te; /* QAC EXPECT 3416; No side effects here */ if (idl_keyResolve(idl_keyDefDefGet(), scope, name) != NULL) { /* keylist defined for this struct */ te = idl_tmplExpNew(idlpp_macroSet); idl_macroSetAdd(idlpp_macroSet, idl_macroNew("namescope", idl_cxxId(idl_scopeElementName(idl_scopeCur(scope))))); idl_macroSetAdd(idlpp_macroSet, idl_macroNew("typename", idl_cxxId(name))); snprintf(spaces, (size_t)sizeof(spaces), "%d", idlpp_indent_level*4); idl_macroSetAdd(idlpp_macroSet, idl_macroNew("spaces", spaces)); idlpp_inStream = idl_streamInNew(idlpp_template, idlpp_macroAttrib); idl_tmplExpProcessTmpl(te, idlpp_inStream, idl_fileCur()); idl_streamInFree(idlpp_inStream); idl_tmplExpFree(te); } return idl_abort; }
static idl_action idl_structureOpen( idl_scope scope, const char *name, idl_typeStruct structSpec, void *userData) { c_char spaces[20]; idl_tmplExp te; CxxTypeUserData *cxxUserData = (CxxTypeUserData *)userData; /* QAC EXPECT 3416; No side effects here */ if (idl_keyResolve(idl_keyDefDefGet(), scope, name) != NULL) { /* keylist defined for this struct */ te = idl_tmplExpNew(idlpp_macroSet); idl_macroSetAdd(idlpp_macroSet, idl_macroNew("namescope", idl_cxxId(idl_scopeElementName(idl_scopeCur(scope))))); idl_macroSetAdd(idlpp_macroSet, idl_macroNew("cnamescope", idl_scopeStack(scope, "_", ""))); idl_macroSetAdd(idlpp_macroSet, idl_macroNew("typename", idl_cxxId(name))); snprintf(spaces, sizeof(spaces), "%d", idlpp_indent_level*4); idl_macroSetAdd(idlpp_macroSet, idl_macroNew("spaces", spaces)); idlpp_inStream = idl_streamInNew(idlpp_template, idlpp_macroAttrib); idl_tmplExpProcessTmpl(te, idlpp_inStream, idl_fileCur()); idl_streamInFree(idlpp_inStream); idl_tmplExpFree(te); /* Store data-type in iterator for future generation of type descriptor. */ idl_metaCxxAddType(scope, name, idl_typeSpec(structSpec), &cxxUserData->idlpp_metaList); } return idl_abort; }
/* Translate an IDL identifier into a language specific identifier. The IDL specification states that all identifiers that match a language keyword must be prepended by a language specific prefix. */ c_char * idl_languageId( const char *identifier) { c_char *id = NULL; switch (lang) { case IDL_LANG_C: id = idl_cId (identifier); break; case IDL_LANG_CXX: id = idl_cxxId (identifier); break; case IDL_LANG_CS: id = idl_CsharpId (identifier, FALSE, FALSE); break; case IDL_LANG_JAVA: id = idl_javaId (identifier); break; case IDL_LANG_UNKNOWN: default: break; } return id; }
static void idl_typedefOpenClose( idl_scope scope, const char *name, idl_typeDef defSpec, void *userData) { c_char spaces[20]; idl_tmplExp te; if ((idl_typeSpecType(idl_typeDefRefered(defSpec)) == idl_tstruct || idl_typeSpecType(idl_typeDefRefered(defSpec)) == idl_tunion) && idl_keyResolve(idl_keyDefDefGet(), scope, name) != NULL) { /* keylist defined for this typedef of struct or union */ te = idl_tmplExpNew(idlpp_macroSet); idl_macroSetAdd(idlpp_macroSet, idl_macroNew("scope", idl_scopeStackCxx(scope, "::", NULL))); idl_macroSetAdd(idlpp_macroSet, idl_macroNew("typename", idl_cxxId(name))); idl_macroSetAdd(idlpp_macroSet, idl_macroNew("scopedtypename", idl_scopeStack(scope, "::", name))); //idl_macroSetAdd(idlpp_macroSet, idl_macroNew("uniquetypename", idl_scopeStack(scope, "_", name))); //snprintf(spaces, (size_t)sizeof(spaces), "%d", idlpp_indent_level*4); //idl_macroSetAdd(idlpp_macroSet, idl_macroNew("spaces", spaces)); idlpp_inStream = idl_streamInNew(idlpp_template, idlpp_macroAttrib); idl_tmplExpProcessTmpl(te, idlpp_inStream, idl_fileCur()); idl_streamInFree(idlpp_inStream); idl_tmplExpFree(te); } }
static idl_action idl_unionOpen( idl_scope scope, const char *name, idl_typeUnion unionSpec, void *userData) { c_char spaces[20]; idl_tmplExp te; /* QAC EXPECT 3416; No unexpected side effects here */ if (idl_keyResolve(idl_keyDefDefGet(), scope, name) != NULL) { /* keylist defined for this union */ te = idl_tmplExpNew(idlpp_macroSet); idl_macroSetAdd(idlpp_macroSet, idl_macroNew("scope", idl_scopeStackCxx(scope, "::", NULL))); idl_macroSetAdd(idlpp_macroSet, idl_macroNew("typename", idl_cxxId(name))); idl_macroSetAdd(idlpp_macroSet, idl_macroNew("scopedtypename", idl_scopeStack(scope, "::", name))); //idl_macroSetAdd(idlpp_macroSet, idl_macroNew("uniquetypename", idl_scopeStack(scope, "_", name))); //snprintf(spaces, (size_t)sizeof(spaces), "%d", idlpp_indent_level*4); //idl_macroSetAdd(idlpp_macroSet, idl_macroNew("spaces", spaces)); idlpp_inStream = idl_streamInNew(idlpp_template, idlpp_macroAttrib); idl_tmplExpProcessTmpl(te, idlpp_inStream, idl_fileCur()); idl_streamInFree(idlpp_inStream); idl_tmplExpFree(te); } return idl_abort; }
static idl_action idl_moduleOpen ( idl_scope scope, const char *name, void *userData) { c_ulong streamsIndex, streamsCount; idl_action result; OS_UNUSED_ARG(userData); OS_UNUSED_ARG(userData); /* Test whether the module contains a component within the pragma streams. * If it does not, then the module should not be generated since it will * contain no items (which is itself illegal idl syntax). * * Note that we are comparing against only the streams existing within this idl * file (idl_idlScopeStreamsList). We do not use the result of idl_keyDefDefGet() * since this is a list of streams resulting from the preprocessed idl (which * will include streams from other idl files that this may include). */ result = idl_abort; streamsCount = os_iterLength(idl_idlScopeStreamsList); if (streamsCount != 0) { idl_scope moduleScope; idl_scopeElement newElement; /* the idl_scope parameter to this function does not yet include the scoping * for this module itself, so create a duplicate and add this scoping to it, * before testing whether this module contains one of the streams in this file. */ moduleScope = idl_scopeDup(scope); newElement = idl_scopeElementNew(name, idl_tModule); idl_scopePush(moduleScope, newElement); /* Loop through the list of keys applying to this idl file and test whether * this particular module contains one of these keys. If it does, generate * code for the module. */ for (streamsIndex = 0; (streamsIndex < streamsCount) && (result == idl_abort); streamsIndex++) { idl_scope streamsScope = os_iterObject(idl_idlScopeStreamsList, streamsIndex); if (idl_scopeSub(moduleScope, streamsScope)) { /* Scopes match */ result = idl_explore; } } } if (result == idl_explore) { idl_printIndent(idlpp_indent_level); idl_fileOutPrintf(idl_fileCur(), "module %s {\n", idl_cxxId(name)); idl_fileOutPrintf(idl_fileCur(), "\n"); idlpp_indent_level++; } return result; }
static idl_action idl_moduleOpen ( idl_scope scope, const char *name, void *userData) { /* Test whether the module contains a component within the pragma keylist. * If it does not, then the module should not be generated since it will * contain no items (which is itself illegal idl syntax). * * Note that we are comparing against only the keys existing within this idl * file (idl_idlScopeKeyList). We do not use the result of idl_keyDefDefGet() * since this is a list of keys resulting from the preprocessed idl (which * will include keys from other idl files that this may include). */ if (os_iterLength (idl_idlScopeKeyList) == 0) { return idl_abort; } else { c_long li = 0; c_bool scopesMatch = FALSE; idl_scope moduleScope; idl_scopeElement newElement; /* the idl_scope parameter to this function does not yet include the scoping * for this module itself, so create a duplicate and add this scoping to it, * before testing whether this module contains one of the keys in this file. */ moduleScope = idl_scopeDup(scope); newElement = idl_scopeElementNew (name, idl_tModule); idl_scopePush (moduleScope, newElement); /* Loop through the list of keys applying to this idl file and test whether * this particular module contains one of these keys. If it does, generate * code for the module in the Dcps.idl file. */ while (li < os_iterLength (idl_idlScopeKeyList)) { idl_scope keyscope = os_iterObject (idl_idlScopeKeyList, li); scopesMatch = idl_scopeSub (moduleScope, keyscope); if (scopesMatch) { break; } li++; } if (scopesMatch == FALSE) { return idl_abort; } } idl_printIndent(idlpp_indent_level); idl_fileOutPrintf(idl_fileCur(), "module %s {\n", idl_cxxId(name)); idl_fileOutPrintf(idl_fileCur(), "\n"); idlpp_indent_level++; return idl_explore; }
static idl_action idl_moduleOpen( idl_scope scope, const char *name, void *userData) { idl_printIndent(idlpp_indent_level); idl_fileOutPrintf(idl_fileCur(), "namespace %s {\n", idl_cxxId(name)); idl_fileOutPrintf(idl_fileCur(), "\n"); idlpp_indent_level++; return idl_explore; }
/** @brief callback function called on definition of a structure member in the IDL input file. * * Generate code for the following IDL construct: * @verbatim struct <structure-name> { => <structure-member-1>; => ... ... => <structure-member-n>; }; @endverbatim * * @param scope Current scope * @param name Name of the structure member * @param typeSpec Type specification of the structure member */ static void idl_structureMemberOpenClose ( idl_scope scope, const char *name, idl_typeSpec typeSpec, void *userData) { struct idl_genSACPPData *arg = (struct idl_genSACPPData *)userData; char *memberName; char *scopedName; char *seqName; switch (idl_typeSpecType(typeSpec)) { case idl_tbasic: case idl_tenum: case idl_ttypedef: case idl_tstruct: case idl_tunion: case idl_tseq: /* nothing todo */ break; case idl_tarray: /* generate implementation code for the array mapping */ memberName = idl_cxxId(name); snprintf(arg->buffer,MAX_BUFFER,"_%s_array",memberName); seqName = os_strdup(arg->buffer); scopedName = idl_scopeStackCxx(scope, "::", seqName); idl_arrayTypeImpl(idl_typeArray(typeSpec), scopedName,arg); snprintf(arg->buffer, MAX_BUFFER, "_%s_array %s;\n", memberName, memberName); os_free(seqName); os_free(scopedName); os_free(memberName); break; default: printf("idl_structureMemberOpenClose: Unsupported structure member type (member name = %s, type name = %s)\n", name, idl_scopedTypeName(typeSpec)); } }
static idl_action idl_structureOpen( idl_scope scope, const char *name, idl_typeStruct structSpec, void *userData) { idl_tmplExp te; /* QAC EXPECT 3416; No unexpected side effects here */ if (idl_keyResolve(idl_keyDefDefGet(), scope, name) != NULL) { /* keylist defined for this struct */ te = idl_tmplExpNew(idlpp_macroSet); idl_macroSetAdd(idlpp_macroSet, idl_macroNew("scope", idl_scopeStackCxx(scope, "::", NULL))); idl_macroSetAdd(idlpp_macroSet, idl_macroNew("typename", idl_cxxId(name))); idl_macroSetAdd(idlpp_macroSet, idl_macroNew("scopedtypename", idl_scopeStack(scope, "::", name))); idlpp_inStream = idl_streamInNew(idlpp_template, idlpp_macroAttrib); idl_tmplExpProcessTmpl(te, idlpp_inStream, idl_fileCur()); idl_streamInFree(idlpp_inStream); idl_tmplExpFree(te); } return idl_abort; }
/* Build a textual presenation of the provided scope stack taking the C++ keyword identifier translation into account. Further the function equals "idl_scopeStack". */ c_char * idl_scopeStackCxx( idl_scope scope, const char *scopeSepp, const char *name) { c_long si; c_long sz; c_char *scopeStack; c_char *Id; si = 0; sz = idl_scopeStackSize(scope); if (si < sz) { /* The scope stack is not empty */ /* Copy the first scope element name */ scopeStack = os_strdup(scopeSepp);/* start with the seperator */ Id = idl_cxxId(idl_scopeElementName(idl_scopeIndexed(scope, si))); scopeStack = os_realloc(scopeStack, (size_t)( (int)strlen(scopeStack)+ (int)strlen(scopeSepp)+ (int)strlen(Id)+1)); os_strcat(scopeStack, Id); si++; while (si < sz) { /* Translate the scope name to a C++ identifier */ Id = idl_cxxId(idl_scopeElementName(idl_scopeIndexed(scope, si))); /* allocate space for the current scope stack + the separator and the next scope name */ /* QAC EXPECT 5007; will not use wrapper */ scopeStack = os_realloc(scopeStack, (size_t)( (int)strlen(scopeStack)+ (int)strlen(scopeSepp)+ (int)strlen(Id)+1)); /* Concatenate the separator */ /* QAC EXPECT 5007; will not use wrapper */ os_strcat(scopeStack, scopeSepp); /* Concatenate the scope name */ /* QAC EXPECT 5007; will not use wrapper */ os_strcat(scopeStack, Id); si++; } if (name) { /* A user identifier is specified */ /* Translate the user identifier to a C++ identifier */ Id = idl_cxxId(name); /* allocate space for the current scope stack + the separator and the user identifier */ /* QAC EXPECT 5007; will not use wrapper */ scopeStack = os_realloc(scopeStack, (size_t)( (int)strlen(scopeStack)+ (int)strlen(scopeSepp)+ (int)strlen(Id)+1)); /* Concatenate the separator */ /* QAC EXPECT 5007; will not use wrapper */ os_strcat(scopeStack, scopeSepp); /* Concatenate the user identifier */ /* QAC EXPECT 5007; will not use wrapper */ os_strcat(scopeStack, Id); } } else { /* The stack is empty */ if (name) { /* A user identifier is specified */ scopeStack = os_strdup(idl_cxxId(name)); } else { /* make the stack represenation empty */ scopeStack = os_strdup(""); } } /* return the scope stack representation */ return scopeStack; }