From: cas Date: Wed, 24 Nov 1999 18:03:07 +0000 (+0000) Subject: No comments X-Git-Url: http://git.dev.opencascade.org/gitweb/?a=commitdiff_plain;h=326ff35730c775447b651eac569e05d8f97a2bf3;p=occt-wok.git No comments --- diff --git a/src/CPPJini/CPPJini.cdl b/src/CPPJini/CPPJini.cdl index ef685d1..7598cd4 100755 --- a/src/CPPJini/CPPJini.cdl +++ b/src/CPPJini/CPPJini.cdl @@ -6,15 +6,34 @@ package CPPJini -uses TCollection + uses -is + MS, + WOKTools, + TCollection + is - class DataMapOfAsciiStringInteger - instantiates DataMap from TCollection(AsciiString from TCollection, - Integer, - AsciiString from TCollection); + private class ClientInfo; + + private class SequenceOfClientInfo instantiates + Sequence from TCollection ( ClientInfo ); + + + class DataMapOfAsciiStringInteger instantiates + DataMap from TCollection ( + AsciiString from TCollection, + Integer from Standard, + AsciiString from TCollection + ); + + enumeration ExtractionType is + + COMPLETE, + INCOMPLETE, + SEMICOMPLETE + + end ExtractionType; end CPPJini; diff --git a/src/CPPJini/CPPJini.cxx b/src/CPPJini/CPPJini.cxx index 08ba791..f53501a 100755 --- a/src/CPPJini/CPPJini.cxx +++ b/src/CPPJini/CPPJini.cxx @@ -14,6 +14,8 @@ #include #include #include +#include +#include #define CPPJINI_BOOLEAN 1 #define CPPJINI_CHARACTER 2 @@ -32,66 +34,8 @@ Handle(TCollection_HAsciiString) CPPJini_ErrorArgument = new TCollection_HAsciiS Handle( TCollection_HAsciiString ) CPPJini_DotReplace ( char*, char = '_' ); -class CPPJini_ClientInfo { - - public: - - CPPJini_ClientInfo ( - const Handle( MS_MetaSchema )&, - const Handle( TCollection_HAsciiString )& - ); - ~CPPJini_ClientInfo () {}; - - int HasComplete ( const Handle( TCollection_HAsciiString )& name ) const { - return myMaps[ 0 ].Contains ( name ); - } - - int HasIncomplete ( const Handle( TCollection_HAsciiString )& name ) const { - return myMaps[ 1 ].Contains ( name ); - } - - int HasSemicomplete ( const Handle( TCollection_HAsciiString )& name ) const { - return myMaps[ 2 ].Contains ( name ); - } - - const Handle( TCollection_HAsciiString )& Name () const { return myName; } - - private: - - Handle( TCollection_HAsciiString ) myName; - WOKTools_MapOfHAsciiString myMaps[ 3 ]; -}; - -CPPJini_ClientInfo :: CPPJini_ClientInfo ( - const Handle( MS_MetaSchema )& ms, - const Handle( TCollection_HAsciiString )& name - ) { - - Handle( MS_Client ) clt = ms -> GetClient ( name ); - - if ( clt.IsNull () ) - - ErrorMsg << "CPPJini" << "Client " << name << " was not found" << endm; - - else { - - Handle( MS_HSequenceOfExternMet ) xtern = new MS_HSequenceOfExternMet (); - Handle( MS_HSequenceOfMemberMet ) membr = new MS_HSequenceOfMemberMet (); - - clt -> ComputeTypes ( - xtern, membr, myMaps[ 0 ], myMaps[ 1 ], myMaps[ 2 ] - ); - - InfoMsg << "CPPJini" << "Using client: " << name << endm; - - } // end else - - myName = new TCollection_HAsciiString ( name ); - -} // end CPPJini_ClientInfo :: CPPJini_ClientInfo - -static Standard_Integer s_Length; -static CPPJini_ClientInfo** s_CltInfo; +static CPPJini_SequenceOfClientInfo s_CltInfo; +static WOKTools_MapOfHAsciiString s_CltMap; static Standard_Boolean CPPJini_CheckClients ( const Handle( TCollection_HAsciiString )& className, @@ -106,25 +50,25 @@ static Standard_Boolean CPPJini_CheckClients ( fDuplicate = Standard_False; - for ( i = 0; i < s_Length; ++i ) { + for ( i = 1; i <= s_CltInfo.Length (); ++i ) { switch ( idx ) { case 0: - fCond = s_CltInfo[ i ] -> HasComplete ( className ); + fCond = s_CltInfo.Value ( i ) -> HasComplete ( className ); break; case 1: - fCond = s_CltInfo[ i ] -> HasIncomplete ( className ); + fCond = s_CltInfo.Value ( i ) -> HasIncomplete ( className ); break; default: - fCond = s_CltInfo[ i ] -> HasSemicomplete ( className ); + fCond = s_CltInfo.Value ( i ) -> HasSemicomplete ( className ); } // end switch @@ -132,8 +76,8 @@ static Standard_Boolean CPPJini_CheckClients ( if ( !retVal ) { - cltName = new TCollection_HAsciiString ( s_CltInfo[ i ] -> Name () ); - retVal = Standard_True; + cltName = new TCollection_HAsciiString ( s_CltInfo.Value ( i ) -> Name () ); + retVal = Standard_True; } else { @@ -145,6 +89,7 @@ static Standard_Boolean CPPJini_CheckClients ( } // end if } // end for + return retVal; } // end CPPJini_CheckClients @@ -179,6 +124,78 @@ Standard_Boolean CPPJini_HasSemicomplete ( } // end CPPJini_HasIncomplete +Standard_Boolean CPPJini_Defined ( + const Handle( TCollection_HAsciiString )& aTypeName, + Handle( TCollection_HAsciiString )& cltName + ) { + + Standard_Boolean retVal = Standard_False; + CPPJini_ExtractionType type; + Standard_Integer i; + + for ( i = 1; i <= s_CltInfo.Length (); ++i ) { + + if ( s_CltInfo.Value ( i ) -> Defined ( aTypeName, type ) ) { + + cltName = new TCollection_HAsciiString ( s_CltInfo.Value ( i ) -> Name () ); + retVal = Standard_True; + break; + + } // end if + + } // end for + + return retVal; + +} // end CPPJini_Defined + +Standard_Boolean CPPJini_Defined ( + const Handle( MS_MetaSchema )& ms, + const Handle( TCollection_HAsciiString )& aTypeName, + Handle( TCollection_HAsciiString )& cltName, + Standard_Boolean& fDuplicate, + CPPJini_ExtractionType& aType + ) { + + Standard_Boolean retVal = Standard_False; + CPPJini_ExtractionType type; + Standard_Integer i; + + fDuplicate = Standard_False; + + for ( i = 1; i <= s_CltInfo.Length (); ++i ) { + + if ( s_CltInfo.Value ( i ) -> Defined ( aTypeName, type ) ) { + + if ( !retVal ) { + + cltName = new TCollection_HAsciiString ( s_CltInfo.Value ( i ) -> Name () ); + aType = type; + retVal = Standard_True; + + } else { + + Standard_Integer j; + const Handle( TColStd_HSequenceOfHAsciiString ) use = + ms -> GetClient ( s_CltInfo.Value ( i ) -> Name () ) -> Uses (); + + for ( j = 1; j <= use -> Length (); ++j ) + + if ( use -> Value ( j ) -> IsSameString ( cltName ) ) return retVal; + + fDuplicate = Standard_True; + break; + + } // end else + + } // end if + + } // end for + + return retVal; + +} // end CPPJini_Defined + // Standard Extractor API : list the EDL files used by this program // Handle(TColStd_HSequenceOfHAsciiString) CPPJini_TemplatesUsed() @@ -191,6 +208,28 @@ Handle(TColStd_HSequenceOfHAsciiString) CPPJini_TemplatesUsed() return result; } +static void _CPPJini_FillUses ( + const Handle( MS_MetaSchema )& ms, + const Handle( TColStd_HSequenceOfHAsciiString )& use + ) { + + Standard_Integer i; + + for ( i = 1; i <= use -> Length (); ++i ) + + if ( !s_CltMap.Contains ( use -> Value ( i ) ) ) { + + Handle( MS_Client ) clt = ms -> GetClient ( use -> Value ( i ) ); + + s_CltInfo.Prepend ( new CPPJini_ClientInfo ( ms, use -> Value ( i ) ) ); + s_CltMap.Add ( use -> Value ( i ) ); + + _CPPJini_FillUses ( ms, clt -> Uses () ); + + } // end if + +} // end _CPPJini_FillUses + void CPPJini_Init(const Handle(MS_MetaSchema)& aMeta, const Handle(TCollection_HAsciiString)& aName, const Handle(MS_HSequenceOfExternMet)& SeqOfEM, @@ -198,7 +237,7 @@ void CPPJini_Init(const Handle(MS_MetaSchema)& aMeta, const Handle(TColStd_HSequenceOfHAsciiString)& use ) { - Handle(MS_Client) client; + Handle( MS_Client ) client; SeqOfMemberMet = SeqOfMM; SeqOfExternMet = SeqOfEM; @@ -211,23 +250,10 @@ void CPPJini_Init(const Handle(MS_MetaSchema)& aMeta, Standard_NoSuchObject::Raise(); } - Standard_Integer i; - Standard_Integer useLen = use -> Length (); - - if ( s_Length ) { - - for ( i = 0; i < s_Length; ++i ) delete s_CltInfo[ i ]; - - delete [] s_CltInfo; - - } // end if - - s_Length = useLen; - s_CltInfo = new CPPJini_ClientInfo*[ s_Length ]; - - for ( i = 0; i < s_Length; ++i ) + s_CltInfo.Clear (); + s_CltMap.Clear (); - s_CltInfo[ i ] = new CPPJini_ClientInfo ( aMeta, use -> Value ( i + 1 ) ); + _CPPJini_FillUses ( aMeta, use ); } @@ -410,11 +436,15 @@ void CPPJini_MethodUsedTypes(const Handle(MS_MetaSchema)& aMeta, } } - Handle(MS_HArray1OfParam) seqparam = aMethod->Params(); + Standard_Boolean fEnum = Standard_False; + Handle(MS_HArray1OfParam) seqparam = aMethod->Params(); if(!seqparam.IsNull()) { for (i = 1; i <= seqparam->Length(); i++) { thetype = seqparam->Value(i)->Type(); + + if ( !fEnum && thetype -> IsKind ( STANDARD_TYPE( MS_Enum ) ) ) fEnum = Standard_True; + parname = seqparam->Value(i)->TypeName(); if (thetype->IsKind(STANDARD_TYPE(MS_Alias))) { @@ -435,6 +465,7 @@ void CPPJini_MethodUsedTypes(const Handle(MS_MetaSchema)& aMeta, CPPJini_DispatchUsedType(aMeta,thetype,List,Incp,Standard_False); } } + if ( fEnum ) List -> Append ( new TCollection_HAsciiString ( "Standard_Integer" ) ); } } @@ -784,7 +815,6 @@ void CPPJini_BuildMethod(const Handle(MS_MetaSchema)& aMeta, const Handle(TCollection_HAsciiString)& methodName, const Standard_Integer MethodNumber) { - Handle(MS_InstMet) im; Handle(MS_ClassMet) cm; Handle(MS_Construc) ct; @@ -1056,10 +1086,16 @@ void CPPJini_ArgumentBuilder(const Handle(MS_MetaSchema)& aMeta, ArgsInCall->AssignCat("the_"); ArgsInCall->AssignCat(aSeqP->Value(i)->Name()); if (aSeqP->Value(i)->IsOut()) { + + Handle( TCollection_HAsciiString ) cltName; + Handle( TCollection_HAsciiString ) iName = CPPJini_Defined ( + aClass -> FullName (), cltName + ) ? cltName : CPPJini_InterfaceName; + api -> AddVariable ( "%FromInterface", CPPJini_DotReplace ( - CPPJini_InterfaceName -> ToCString (), '/' + iName -> ToCString (), '/' ) -> ToCString () ); api->Apply("%MetOut","TransientSetValue"); @@ -1102,6 +1138,16 @@ void CPPJini_ArgumentBuilder(const Handle(MS_MetaSchema)& aMeta, } case CPPJINI_ENUMERATION : + { + ArgsInCall->AssignCat("the_"); + ArgsInCall->AssignCat(aSeqP->Value(i)->Name()); + api -> AddVariable ( "%EnumName", curtype -> FullName () -> ToCString () ); + api->Apply("%Method","IntegerGetEnumValue"); + ArgsRetrieve->AssignCat(api->GetVariableValue("%Method")); + api->Apply("%MetOut","IntegerSetValue"); + ArgsOut->AssignCat(api->GetVariableValue("%MetOut")); + break; + } case CPPJINI_INTEGER : { ArgsInCall->AssignCat("the_"); @@ -1309,13 +1355,19 @@ void CPPJini_ReturnBuilder(const Handle(MS_MetaSchema)& aMeta, api->AddVariable("%MethodCall",MethodCall->ToCString()); if (CPPJini_IsCasType(rtype->FullName())) { + api->AddVariable("%FromInterface","jcas"); } else { + + Handle( TCollection_HAsciiString ) cltName; + Handle( TCollection_HAsciiString ) iName = CPPJini_Defined ( + aClass -> FullName (), cltName + ) ? cltName : CPPJini_InterfaceName; api -> AddVariable ( "%FromInterface", CPPJini_DotReplace ( - CPPJini_InterfaceName -> ToCString (), '/' + iName -> ToCString (), '/' ) -> ToCString () ); } @@ -1347,10 +1399,15 @@ void CPPJini_ReturnBuilder(const Handle(MS_MetaSchema)& aMeta, api->AddVariable("%FromInterface","jcas"); } else { + + Handle( TCollection_HAsciiString ) cltName; + Handle( TCollection_HAsciiString ) iName = CPPJini_Defined ( + rtype -> FullName (), cltName + ) ? cltName : CPPJini_InterfaceName; api -> AddVariable ( "%FromInterface", CPPJini_DotReplace ( - CPPJini_InterfaceName -> ToCString (), '/' + iName -> ToCString (), '/' ) -> ToCString () ); } @@ -1560,7 +1617,7 @@ void CPPJini_TypeExtract(const Handle(MS_MetaSchema)& aMeta, const Handle(TColStd_HSequenceOfHAsciiString)& edlsfullpath, const Handle(TCollection_HAsciiString)& outdir, const Handle(TColStd_HSequenceOfHAsciiString)& outfile, - const ExtractionType MustBeComplete, + const CPPJini_ExtractionType MustBeComplete, const Standard_CString Mode) { @@ -1724,7 +1781,7 @@ void CPPJini_Extract(const Handle(MS_MetaSchema)& aMeta, const Standard_CString Mode) { if (aMeta->IsDefined(aTypeName) || aMeta->IsPackage(aTypeName)) { - ExtractionType theMode = CPPJini_COMPLETE; + CPPJini_ExtractionType theMode = CPPJini_COMPLETE; if (strcmp(Mode,"CPPJini_COMPLETE") == 0) { theMode = CPPJini_COMPLETE; @@ -1741,34 +1798,22 @@ void CPPJini_Extract(const Handle(MS_MetaSchema)& aMeta, } Standard_Boolean fDuplicate; + CPPJini_ExtractionType type; Handle( TCollection_HAsciiString ) cltName; - if ( theMode == CPPJini_INCOMPLETE ) { - - if ( CPPJini_HasIncomplete ( aTypeName, cltName, fDuplicate ) ) { - - InfoMsg << "CPPJini" << "Skipping " << aTypeName - << " (already defined in " << cltName << ")" << endm; - - if ( fDuplicate ) - - WarningMsg << "CPPJini" << cltName << " defined in more than one client declared in 'usues' statement" - << endm; - - return; - - } // end if - - } else if ( theMode == CPPJini_COMPLETE ) { + if ( CPPJini_Defined ( aMeta, aTypeName, cltName, fDuplicate, type ) ) { - if ( CPPJini_HasComplete ( aTypeName, cltName, fDuplicate ) ) { + if ( theMode == CPPJini_COMPLETE && type == CPPJini_COMPLETE || + theMode == CPPJini_INCOMPLETE || + theMode == CPPJini_SEMICOMPLETE && type == CPPJini_COMPLETE + ) { InfoMsg << "CPPJini" << "Skipping " << aTypeName << " (already defined in " << cltName << ")" << endm; if ( fDuplicate ) - WarningMsg << "CPPJini" << cltName << " defined in more than one client declared in 'uses' statement" + WarningMsg << "CPPJini" << aTypeName << " defined in more than one client declared in 'uses' statement" << endm; return; diff --git a/src/CPPJini/CPPJini.hxx b/src/CPPJini/CPPJini.hxx index 02f76cf..41c2252 100755 --- a/src/CPPJini/CPPJini.hxx +++ b/src/CPPJini/CPPJini.hxx @@ -40,6 +40,8 @@ #include +#include + extern "C" { Handle(TColStd_HSequenceOfHAsciiString) Standard_EXPORT CPPJini_TemplatesUsed(); @@ -59,8 +61,6 @@ extern "C" { const Standard_CString Mode); } -enum ExtractionType {CPPJini_COMPLETE,CPPJini_INCOMPLETE,CPPJini_SEMICOMPLETE}; - void CPPJini_TransientHandle(const Handle(EDL_API)&, const Handle(TCollection_HAsciiString)&, const Handle(TCollection_HAsciiString)&, @@ -71,14 +71,14 @@ void CPPJini_TransientClass(const Handle(MS_MetaSchema)&, const Handle(EDL_API)&, const Handle(MS_Class)&, const Handle(TColStd_HSequenceOfHAsciiString)&, - const ExtractionType, + const CPPJini_ExtractionType, const Handle(MS_HSequenceOfMemberMet)&); void CPPJini_MPVClass(const Handle(MS_MetaSchema)&, const Handle(EDL_API)&, const Handle(MS_Class)&, const Handle(TColStd_HSequenceOfHAsciiString)&, - const ExtractionType, + const CPPJini_ExtractionType, const Handle(MS_HSequenceOfMemberMet)&); void CPPJini_Alias(const Handle(MS_MetaSchema)&, @@ -90,7 +90,7 @@ void CPPJini_Package(const Handle(MS_MetaSchema)&, const Handle(EDL_API)&, const Handle(MS_Package)&, const Handle(TColStd_HSequenceOfHAsciiString)&, - const ExtractionType, + const CPPJini_ExtractionType, const Handle(MS_HSequenceOfExternMet)&); void CPPJini_BuildMethod(const Handle(MS_MetaSchema)& aMeta, diff --git a/src/CPPJini/CPPJini_Define.hxx b/src/CPPJini/CPPJini_Define.hxx index 5635bee..5b6cd19 100755 --- a/src/CPPJini/CPPJini_Define.hxx +++ b/src/CPPJini/CPPJini_Define.hxx @@ -94,5 +94,4 @@ Handle(TCollection_HAsciiString) CPPJini_UnderScoreReplace(const Handle(TCollect extern Handle(TCollection_HAsciiString) CPPJini_ErrorArgument; -enum ExtractionType {CPPJini_COMPLETE,CPPJini_INCOMPLETE,CPPJini_SEMICOMPLETE}; #endif diff --git a/src/CPPJini/CPPJini_MPV.cxx b/src/CPPJini/CPPJini_MPV.cxx index 8af4113..ccbfa4d 100755 --- a/src/CPPJini/CPPJini_MPV.cxx +++ b/src/CPPJini/CPPJini_MPV.cxx @@ -45,6 +45,7 @@ #include #include +#include extern Standard_Boolean CPPJini_HasComplete ( const Handle( TCollection_HAsciiString )&, @@ -64,6 +65,12 @@ extern Standard_Boolean CPPJini_HasSemicomplete ( Standard_Boolean& ); +extern Standard_Boolean CPPJini_Defined ( + const Handle( TCollection_HAsciiString )&, + Handle( TCollection_HAsciiString )& + ); + + Handle(TCollection_HAsciiString)& CPPJini_MPVRootName(); extern Handle( TCollection_HAsciiString ) CPPJini_DotReplace ( char*, char = '_' ); @@ -132,7 +139,7 @@ void CPPJini_MPVClass(const Handle(MS_MetaSchema)& aMeta, const Handle(EDL_API)& api, const Handle(MS_Class)& aClass, const Handle(TColStd_HSequenceOfHAsciiString)& outfile, - const ExtractionType MustBeComplete, + const CPPJini_ExtractionType MustBeComplete, const Handle(MS_HSequenceOfMemberMet)& theMetSeq) { Handle(MS_StdClass) theClass = Handle(MS_StdClass)::DownCast(aClass); @@ -236,19 +243,9 @@ void CPPJini_MPVClass(const Handle(MS_MetaSchema)& aMeta, else { Handle( TCollection_HAsciiString ) aClt; - Standard_Boolean fDup; Standard_Boolean fPush = Standard_False; - if ( CPPJini_HasComplete ( - List -> Value ( i ), aClt, fDup - ) || - CPPJini_HasIncomplete ( - List -> Value ( i ), aClt, fDup - ) || - CPPJini_HasSemicomplete ( - List -> Value ( i ), aClt, fDup - ) - ) { + if ( CPPJini_Defined ( List -> Value ( i ), aClt ) ) { fPush = Standard_True; api -> AddVariable ( "%Interface", aClt -> ToCString () ); @@ -277,19 +274,9 @@ void CPPJini_MPVClass(const Handle(MS_MetaSchema)& aMeta, } else { Handle( TCollection_HAsciiString ) aClt; - Standard_Boolean fDup; Standard_Boolean fPush = Standard_False; - if ( CPPJini_HasComplete ( - List -> Value ( i ), aClt, fDup - ) || - CPPJini_HasIncomplete ( - List -> Value ( i ), aClt, fDup - ) || - CPPJini_HasSemicomplete ( - List -> Value ( i ), aClt, fDup - ) - ) { + if ( CPPJini_Defined ( incp -> Value ( i ), aClt ) ) { fPush = Standard_True; api -> AddVariable ( "%Interface", aClt -> ToCString () ); @@ -315,21 +302,14 @@ void CPPJini_MPVClass(const Handle(MS_MetaSchema)& aMeta, // we create the inheritance // Handle( TCollection_HAsciiString ) aClt; - Standard_Boolean fDup; - - if ( CPPJini_HasComplete ( - theClass -> FullName (), aClt, fDup - ) || - CPPJini_HasIncomplete ( - theClass -> FullName (), aClt, fDup - ) || - CPPJini_HasSemicomplete ( - theClass -> FullName (), aClt, fDup - ) - ) { + Handle( TCollection_HAsciiString ) name = theClass -> GetInheritsNames () -> Length () ? + theClass -> GetInheritsNames () -> Value ( 1 ) : + theClass -> FullName (); + + if ( CPPJini_Defined ( name, aClt ) ) { aClt -> AssignCat ( "." ); - aClt -> AssignCat ( theClass -> FullName () ); + aClt -> AssignCat ( name ); api -> AddVariable ( "%Inherits", aClt -> ToCString () ); } else { diff --git a/src/CPPJini/CPPJini_Package.cxx b/src/CPPJini/CPPJini_Package.cxx index ad62b45..b56dd27 100755 --- a/src/CPPJini/CPPJini_Package.cxx +++ b/src/CPPJini/CPPJini_Package.cxx @@ -42,6 +42,7 @@ #include #include #include +#include void CPPJini_MethodUsedTypes(const Handle(MS_MetaSchema)& aMeta, const Handle(MS_Method)& aMethod, @@ -107,7 +108,7 @@ void CPPJini_Package(const Handle(MS_MetaSchema)& aMeta, const Handle(EDL_API)& api, const Handle(MS_Package)& aPackage, const Handle(TColStd_HSequenceOfHAsciiString)& outfile, - const ExtractionType mustBeComplete, + const CPPJini_ExtractionType mustBeComplete, const Handle(MS_HSequenceOfExternMet)& theMetSeq) { if (!aPackage.IsNull()) { diff --git a/src/CPPJini/CPPJini_Template.edl b/src/CPPJini/CPPJini_Template.edl index 6549923..221f14e 100755 --- a/src/CPPJini/CPPJini_Template.edl +++ b/src/CPPJini/CPPJini_Template.edl @@ -190,11 +190,11 @@ $ } $ $%Methods $ -$native static void FinalizeValue(long anHID); -$ -$public void finalize() { -$ FinalizeValue(HID); -$} +$//native static void FinalizeValue(long anHID); +$// +$//public void finalize() { +$// FinalizeValue(HID); +$//} $ $} @end; @@ -384,6 +384,10 @@ $Standard_Character the_%ArgName = jcas_GetCharacter(env,%ArgName); $Standard_Integer the_%ArgName = jcas_GetInteger(env,%ArgName); @end; +@template IntegerGetEnumValue(%ArgName,%EnumName) is +$%EnumName the_%ArgName = ( %EnumName )jcas_GetInteger ( env, %ArgName ); +@end; + @template ExtCharacterGetValue(%ArgName) is $Standard_ExtCharacter the_%ArgName = jcas_GetExtCharacter(env,%ArgName); @end; @@ -415,7 +419,7 @@ $%ClassName* the_this = (%ClassName*) jcas_GetHandle(env,theobj); $if ( !%ArgName ) %ArgName = jcas_CreateObject ( $ env, "%FromInterface/%ClassName", %ArgName $ ); -$jcas_SetHandle(env,%ArgName,thenew_%ArgName); +$jcas_SetHandle(env,%ArgName,the_%ArgName); @end; @template CStringSetValue(%ArgName) is @@ -528,7 +532,7 @@ $jstring thejret = jcas_ConvertTojstring(env,sret); @template FinalizeForValue(%Class,%MethodName) is $ -$ +$#if 0 $JNIEXPORT void JNICALL %MethodName(JNIEnv *, jclass, jlong theid) ${ $if (theid) { @@ -536,6 +540,6 @@ $ %Class* theobj = (%Class*) theid; $ delete theobj; $} $} -$ +$#endif @end; diff --git a/src/CPPJini/CPPJini_Transient.cxx b/src/CPPJini/CPPJini_Transient.cxx index 7909053..0d8f17a 100755 --- a/src/CPPJini/CPPJini_Transient.cxx +++ b/src/CPPJini/CPPJini_Transient.cxx @@ -44,6 +44,7 @@ #include #include #include +#include extern Standard_Boolean CPPJini_HasComplete ( const Handle( TCollection_HAsciiString )&, @@ -63,6 +64,11 @@ extern Standard_Boolean CPPJini_HasSemicomplete ( Standard_Boolean& ); +extern Standard_Boolean CPPJini_Defined ( + const Handle( TCollection_HAsciiString )&, + Handle( TCollection_HAsciiString )& + ); + void CPPJini_MethodUsedTypes(const Handle(MS_MetaSchema)& aMeta, const Handle(MS_Method)& aMethod, const Handle(TColStd_HSequenceOfHAsciiString)& List, @@ -79,7 +85,7 @@ void CPPJini_TransientDerivated(const Handle(MS_MetaSchema)& aMeta, const Handle(TColStd_HSequenceOfHAsciiString)& outfile, const Handle(TColStd_HSequenceOfHAsciiString)& inclist, const Handle(TColStd_HSequenceOfHAsciiString)& supplement, - const ExtractionType MustBeComplete) + const CPPJini_ExtractionType MustBeComplete) { Handle(TCollection_HAsciiString) publics = new TCollection_HAsciiString; Standard_Integer i; @@ -116,7 +122,22 @@ void CPPJini_TransientDerivated(const Handle(MS_MetaSchema)& aMeta, api->AddVariable("%Inherits",CPPJini_GetFullJavaType(CPPJini_TransientRootName())->ToCString()); } else { - api->AddVariable("%Inherits",CPPJini_GetFullJavaType(aClass->GetInheritsNames()->Value(1))->ToCString()); + + Handle( TCollection_HAsciiString ) aClt; + Handle( TCollection_HAsciiString ) name = aClass -> GetInheritsNames () -> Length () ? + aClass -> GetInheritsNames () -> Value ( 1 ) : + aClass -> FullName (); + + if ( CPPJini_Defined ( name, aClt ) ) { + + aClt -> AssignCat ( "." ); + aClt -> AssignCat ( name ); + api -> AddVariable ( "%Inherits", aClt -> ToCString () ); + + } else + + api->AddVariable("%Inherits",CPPJini_GetFullJavaType(aClass->GetInheritsNames()->Value(1))->ToCString()); + } api->AddVariable("%Class",aClass->FullName()->ToCString()); @@ -144,7 +165,7 @@ void CPPJini_TransientClass(const Handle(MS_MetaSchema)& aMeta, const Handle(EDL_API)& api, const Handle(MS_Class)& aClass, const Handle(TColStd_HSequenceOfHAsciiString)& outfile, - const ExtractionType MustBeComplete, + const CPPJini_ExtractionType MustBeComplete, const Handle(MS_HSequenceOfMemberMet)& theMetSeq) { Handle(MS_StdClass) theClass = Handle(MS_StdClass)::DownCast(aClass); @@ -224,19 +245,9 @@ void CPPJini_TransientClass(const Handle(MS_MetaSchema)& aMeta, } else { Handle( TCollection_HAsciiString ) aClt; - Standard_Boolean fDup; Standard_Boolean fPush = Standard_False; - if ( CPPJini_HasComplete ( - List -> Value ( i ), aClt, fDup - ) || - CPPJini_HasIncomplete ( - List -> Value ( i ), aClt, fDup - ) || - CPPJini_HasSemicomplete ( - List -> Value ( i ), aClt, fDup - ) - ) { + if ( CPPJini_Defined ( List -> Value ( i ), aClt ) ) { fPush = Standard_True; api -> AddVariable ( "%Interface", aClt -> ToCString () ); @@ -264,19 +275,9 @@ void CPPJini_TransientClass(const Handle(MS_MetaSchema)& aMeta, } else { Handle( TCollection_HAsciiString ) aClt; - Standard_Boolean fDup; Standard_Boolean fPush = Standard_False; - if ( CPPJini_HasComplete ( - List -> Value ( i ), aClt, fDup - ) || - CPPJini_HasIncomplete ( - List -> Value ( i ), aClt, fDup - ) || - CPPJini_HasSemicomplete ( - List -> Value ( i ), aClt, fDup - ) - ) { + if ( CPPJini_Defined ( incp -> Value ( i ), aClt ) ) { fPush = Standard_True; api -> AddVariable ( "%Interface", aClt -> ToCString () ); @@ -301,21 +302,14 @@ void CPPJini_TransientClass(const Handle(MS_MetaSchema)& aMeta, // we create the inheritance // Handle( TCollection_HAsciiString ) aClt; - Standard_Boolean fDup; - - if ( CPPJini_HasComplete ( - theClass -> GetInheritsNames ()-> Value ( 1 ), aClt, fDup - ) || - CPPJini_HasIncomplete ( - theClass -> GetInheritsNames ()-> Value ( 1 ), aClt, fDup - ) || - CPPJini_HasSemicomplete ( - theClass -> GetInheritsNames () -> Value ( 1 ), aClt, fDup - ) - ) { + Handle( TCollection_HAsciiString ) name = theClass -> GetInheritsNames () -> Length () ? + theClass -> GetInheritsNames () -> Value ( 1 ) : + theClass -> FullName (); + + if ( CPPJini_Defined ( name, aClt ) ) { aClt -> AssignCat ( "." ); - aClt -> AssignCat ( theClass -> GetInheritsNames () -> Value ( 1 ) ); + aClt -> AssignCat ( name ); api -> AddVariable ( "%Inherits", aClt -> ToCString () ); } else