diff options
Diffstat (limited to 'autodoc/source')
-rw-r--r-- | autodoc/source/ary/idl/i2s_calculator.cxx | 4 | ||||
-rw-r--r-- | autodoc/source/ary/idl/ia_type.cxx | 44 | ||||
-rw-r--r-- | autodoc/source/ary/idl/ia_type.hxx | 6 | ||||
-rw-r--r-- | autodoc/source/ary/idl/it_ce.cxx | 16 | ||||
-rw-r--r-- | autodoc/source/ary/idl/it_ce.hxx | 13 | ||||
-rw-r--r-- | autodoc/source/ary/idl/it_explicit.cxx | 13 | ||||
-rw-r--r-- | autodoc/source/ary/idl/it_explicit.hxx | 11 | ||||
-rw-r--r-- | autodoc/source/ary/idl/it_sequence.cxx | 5 | ||||
-rw-r--r-- | autodoc/source/ary/idl/it_sequence.hxx | 3 | ||||
-rw-r--r-- | autodoc/source/ary/idl/it_tplparam.cxx | 12 | ||||
-rw-r--r-- | autodoc/source/display/idl/hfi_typetext.cxx | 64 | ||||
-rw-r--r-- | autodoc/source/display/idl/hfi_typetext.hxx | 10 | ||||
-rw-r--r-- | autodoc/source/parser_i/idl/pe_type2.cxx | 22 | ||||
-rw-r--r-- | autodoc/source/parser_i/inc/s2_luidl/pe_type2.hxx | 2 |
14 files changed, 151 insertions, 74 deletions
diff --git a/autodoc/source/ary/idl/i2s_calculator.cxx b/autodoc/source/ary/idl/i2s_calculator.cxx index e04059309136..f300c2da2f90 100644 --- a/autodoc/source/ary/idl/i2s_calculator.cxx +++ b/autodoc/source/ary/idl/i2s_calculator.cxx @@ -183,7 +183,7 @@ SecondariesCalculator::CheckAllInterfaceBases() rType = pTypes->CheckIn_Type( aXInterface, 0, rGlobalNamespace.CeId(), - Type_id( 0 ) ); + 0 ); Type_id nTypeXInterface = rType.TypeId(); const ExplicitType & @@ -227,7 +227,7 @@ SecondariesCalculator::Connect_Types2Ces() if (nRelatedCe.IsValid()) { Ce_Type * - pNew = new Ce_Type(nRelatedCe, rType.TemplateType()); + pNew = new Ce_Type(nRelatedCe, rType.TemplateParameters()); my_TypeStorage().Replace_Entity( rType.TypeId(), *pNew ); } diff --git a/autodoc/source/ary/idl/ia_type.cxx b/autodoc/source/ary/idl/ia_type.cxx index f812296534a1..853d51d4d201 100644 --- a/autodoc/source/ary/idl/ia_type.cxx +++ b/autodoc/source/ary/idl/ia_type.cxx @@ -53,6 +53,12 @@ namespace ary namespace idl { +String MakeTemplateName( + const String & i_localName, + const std::vector<Type_id> & + i_templateParameters ); + + inline CeAdmin & TypeAdmin::my_Ces() const @@ -119,17 +125,16 @@ Type_id TypeAdmin::lhf_CheckIn_TypeName( const String & i_sLocalName, ExplicitNameRoom & io_rXNameRoom, Ce_id i_nModuleOfOccurrence, - Type_id i_nTemplateType ) + const std::vector<Type_id> * i_templateParameters ) { String sSearchLocalName( i_sLocalName ); - if ( i_nTemplateType.IsValid() ) + if ( i_templateParameters != 0 + ? i_templateParameters->size() > 0 + : false ) { - sSearchLocalName = - StreamLock(200)() - << i_sLocalName - << C_cTemplateDelimiter - << i_nTemplateType.Value() - << c_str; + sSearchLocalName = MakeTemplateName( + i_sLocalName, + *i_templateParameters); } Type_id @@ -140,7 +145,7 @@ TypeAdmin::lhf_CheckIn_TypeName( const String & i_sLocalName, rNewType = *new ExplicitType( i_sLocalName, io_rXNameRoom.TypeId(), i_nModuleOfOccurrence, - i_nTemplateType ); + i_templateParameters ); lhf_Put2Storage_and_AssignId(rNewType); ret = rNewType.TypeId(); io_rXNameRoom.Add_Name( sSearchLocalName, ret ); @@ -244,7 +249,7 @@ const Type & TypeAdmin::CheckIn_Type( QualifiedName & i_rFullName, uintt i_nSequenceCount, Ce_id i_nModuleOfOccurrence, - Type_id i_nTemplateType ) + const std::vector<Type_id> * i_templateParameters ) { // Look in built-in types: Type_id @@ -256,7 +261,7 @@ TypeAdmin::CheckIn_Type( QualifiedName & i_rFullName, nType = lhf_CheckIn_TypeName( i_rFullName.LocalName(), rNameRoom, i_nModuleOfOccurrence, - i_nTemplateType ); + i_templateParameters ); } // endif for ( uintt s = 0; s < i_nSequenceCount; ++s ) @@ -340,6 +345,23 @@ TypeAdmin::IsBuiltInOrRelated( const Type & i_rType ) const } +String +MakeTemplateName( const String & i_localName, + const std::vector<Type_id> & ) +{ + StreamLock + sl(200); + + // This is the simple solution, assuming that there is only + // one version of templatisation allowed with a given name. + return + sl() + << i_localName + << C_cTemplateDelimiter + << c_str; +} + + } // namespace idl } // namespace ary diff --git a/autodoc/source/ary/idl/ia_type.hxx b/autodoc/source/ary/idl/ia_type.hxx index dbc3fcf59301..6b80be2cdc52 100644 --- a/autodoc/source/ary/idl/ia_type.hxx +++ b/autodoc/source/ary/idl/ia_type.hxx @@ -77,7 +77,8 @@ class TypeAdmin : public TypePilot QualifiedName & i_rFullName, uintt i_nSequenceCount, Ce_id i_nModuleOfOccurrence, - Type_id i_nTemplateType ); + const std::vector<Type_id> * + i_templateParameters ); virtual const Type & Find_Type( Type_id i_nType ) const; @@ -105,7 +106,8 @@ class TypeAdmin : public TypePilot const String & i_sLocalName, ExplicitNameRoom & io_rExplicitNameRoom, Ce_id i_nModuleOfOccurrence, - Type_id i_nTemplateType ); + const std::vector<Type_id> * + i_templateParameters ); Type_id lhf_CheckIn_Sequence( Type_id i_nType ); void lhf_CheckIn_BuiltInType( diff --git a/autodoc/source/ary/idl/it_ce.cxx b/autodoc/source/ary/idl/it_ce.cxx index 1beff469df0a..c01026c5940f 100644 --- a/autodoc/source/ary/idl/it_ce.cxx +++ b/autodoc/source/ary/idl/it_ce.cxx @@ -47,11 +47,13 @@ namespace idl { -Ce_Type::Ce_Type( Ce_id i_nRelatedCe, - Type_id i_nTemplateType ) - : nRelatedCe(i_nRelatedCe), - nTemplateType(i_nTemplateType) +Ce_Type::Ce_Type( Ce_id i_relatedCe, + const std::vector<Type_id> * i_templateParameters ) + : nRelatedCe(i_relatedCe), + pTemplateParameters(0) { + if (i_templateParameters != 0) + pTemplateParameters = new std::vector<Type_id>(*i_templateParameters); } Ce_Type::~Ce_Type() @@ -88,10 +90,10 @@ Ce_Type::inq_Get_Text( StringVector & o_module, o_nRelatedCe = nRelatedCe; } -Type_id -Ce_Type::inq_TemplateParameterType() const +const std::vector<Type_id> * +Ce_Type::inq_TemplateParameters() const { - return nTemplateType; + return pTemplateParameters.Ptr(); } diff --git a/autodoc/source/ary/idl/it_ce.hxx b/autodoc/source/ary/idl/it_ce.hxx index 86a8182cc7f7..44258a584094 100644 --- a/autodoc/source/ary/idl/it_ce.hxx +++ b/autodoc/source/ary/idl/it_ce.hxx @@ -53,13 +53,13 @@ class Ce_Type : public Type // LIFECYCLE Ce_Type( - Ce_id i_nRelatedCe, - Type_id i_nTemplateType = Type_id(0) ); + Ce_id i_relatedCe, + const std::vector<Type_id> * + i_templateParameters ); virtual ~Ce_Type(); // INQUIRY Ce_id RelatedCe() const { return nRelatedCe; } - Type_id TemplateType() const { return nTemplateType; } private: // Interface csv::ConstProcessorClient: @@ -75,11 +75,12 @@ class Ce_Type : public Type Ce_id & o_nRelatedCe, int & o_nSequemceCount, const Gate & i_rGate ) const; - virtual Type_id inq_TemplateParameterType() const; - + virtual const std::vector<Type_id> * + inq_TemplateParameters() const; // DATA Ce_id nRelatedCe; - Type_id nTemplateType; + Dyn< std::vector<Type_id> > + pTemplateParameters; }; diff --git a/autodoc/source/ary/idl/it_explicit.cxx b/autodoc/source/ary/idl/it_explicit.cxx index 47a5661d7148..da711a56cfa9 100644 --- a/autodoc/source/ary/idl/it_explicit.cxx +++ b/autodoc/source/ary/idl/it_explicit.cxx @@ -51,12 +51,15 @@ namespace idl ExplicitType::ExplicitType( const String & i_sName, Type_id i_nXNameRoom, Ce_id i_nModuleOfOccurrence, - Type_id i_nTemplateType ) + const std::vector<Type_id> * + i_templateParameters ) : Named_Type(i_sName), nXNameRoom(i_nXNameRoom), nModuleOfOccurrence(i_nModuleOfOccurrence), - nTemplateType(i_nTemplateType) + pTemplateParameters(0) { + if (i_templateParameters != 0) + pTemplateParameters = new std::vector<Type_id>(*i_templateParameters); } ExplicitType::~ExplicitType() @@ -89,10 +92,10 @@ ExplicitType::inq_Get_Text( StringVector & o_module, o_name = Name(); } -Type_id -ExplicitType::inq_TemplateParameterType() const +const std::vector<Type_id> * +ExplicitType::inq_TemplateParameters() const { - return nTemplateType; + return pTemplateParameters.Ptr(); } diff --git a/autodoc/source/ary/idl/it_explicit.hxx b/autodoc/source/ary/idl/it_explicit.hxx index 446307f7e4c0..9db991c012c7 100644 --- a/autodoc/source/ary/idl/it_explicit.hxx +++ b/autodoc/source/ary/idl/it_explicit.hxx @@ -56,14 +56,14 @@ class ExplicitType : public Named_Type const String & i_sName, Type_id i_nXNameRoom, Ce_id i_nModuleOfOccurrence, - Type_id i_nTemplateType ); + const std::vector<Type_id> * + i_templateParameters ); virtual ~ExplicitType(); // INQUIRY Ce_id ModuleOfOccurrence() const { return nModuleOfOccurrence; } Type_id NameRoom() const { return nXNameRoom; } - Type_id TemplateType() const { return nTemplateType; } private: // Interface csv::ConstProcessorClient: @@ -79,12 +79,13 @@ class ExplicitType : public Named_Type Ce_id & o_nRelatedCe, int & o_nSequemceCount, const Gate & i_rGate ) const; - virtual Type_id inq_TemplateParameterType() const; - + virtual const std::vector<Type_id> * + inq_TemplateParameters() const; // DATA Type_id nXNameRoom; // As written in code. Ce_id nModuleOfOccurrence; - Type_id nTemplateType; + Dyn< const std::vector<Type_id> > + pTemplateParameters; }; diff --git a/autodoc/source/ary/idl/it_sequence.cxx b/autodoc/source/ary/idl/it_sequence.cxx index f30e6c289377..cba5c4dc82e3 100644 --- a/autodoc/source/ary/idl/it_sequence.cxx +++ b/autodoc/source/ary/idl/it_sequence.cxx @@ -83,6 +83,11 @@ Sequence::inq_Get_Text( StringVector & o_module, i_rGate ); } +const Type & +Sequence::inq_FirstEnclosedNonSequenceType(const Gate & i_rGate) const +{ + return i_rGate.Types().Find_Type(nRelatedType).FirstEnclosedNonSequenceType(i_rGate); +} } // namespace idl diff --git a/autodoc/source/ary/idl/it_sequence.hxx b/autodoc/source/ary/idl/it_sequence.hxx index dc31f38d5756..3fc96de83ca2 100644 --- a/autodoc/source/ary/idl/it_sequence.hxx +++ b/autodoc/source/ary/idl/it_sequence.hxx @@ -72,6 +72,9 @@ class Sequence : public Type Ce_id & o_nRelatedCe, int & o_nSequemceCount, const Gate & i_rGate ) const; + virtual const Type & + inq_FirstEnclosedNonSequenceType( + const Gate & i_rGate ) const; // DATA Type_id nRelatedType; }; diff --git a/autodoc/source/ary/idl/it_tplparam.cxx b/autodoc/source/ary/idl/it_tplparam.cxx index d3f37e76b193..7ddf5973e6d5 100644 --- a/autodoc/source/ary/idl/it_tplparam.cxx +++ b/autodoc/source/ary/idl/it_tplparam.cxx @@ -78,10 +78,16 @@ TemplateParamType::inq_Get_Text( StringVector & , // o_module //************* Implemented default function for idl::Type ********// -Type_id -Type::inq_TemplateParameterType() const +const std::vector<Type_id> * +Type::inq_TemplateParameters() const { - return Type_id::Null_(); + return 0; +} + +const Type & +Type::inq_FirstEnclosedNonSequenceType(const Gate & ) const +{ + return *this; } diff --git a/autodoc/source/display/idl/hfi_typetext.cxx b/autodoc/source/display/idl/hfi_typetext.cxx index 1d4b720e7d1e..1cb26e5af3a7 100644 --- a/autodoc/source/display/idl/hfi_typetext.cxx +++ b/autodoc/source/display/idl/hfi_typetext.cxx @@ -37,12 +37,17 @@ #include <ary/idl/i_type.hxx> #include <ary/idl/i_ce.hxx> #include <ary/idl/i_module.hxx> +#include <ary/idl/i_module.hxx> #include <ary/idl/ik_ce.hxx> #include <adc_cl.hxx> #include <adc_msg.hxx> #include "hi_linkhelper.hxx" + + + + inline const ary::idl::Module * HF_IdlTypeText::referingModule() const { @@ -82,7 +87,7 @@ HF_IdlTypeText::~HF_IdlTypeText() } void -HF_IdlTypeText::Produce_byData( ary::idl::Type_id i_idType ) const +HF_IdlTypeText::Produce_byData(ary::idl::Type_id i_idType) const { StringVector aModule_; String sName; @@ -93,8 +98,6 @@ HF_IdlTypeText::Produce_byData( ary::idl::Type_id i_idType ) const const ary::idl::Type & rType = Env().Data().Find_Type(i_idType); Env().Data().Get_TypeText(aModule_, sName, nCe, nSequenceCount, rType); - ary::idl::Type_id - nTemplateType = rType.TemplateParameterType(); if ( Env().Data().IsBuiltInOrRelated(rType) ) { @@ -107,7 +110,7 @@ HF_IdlTypeText::Produce_byData( ary::idl::Type_id i_idType ) const String::Null_(), nSequenceCount, (nCe.IsValid() ? exists_yes : exists_no), - nTemplateType ); + rType.FirstEnclosedNonSequenceType(Env().Gate()).TemplateParameters() ); } } @@ -338,13 +341,14 @@ HF_IdlTypeText::produce_FromStd( const StringVector & i_module, const String & i_member, int i_sequenceCount, E_Existence i_ceExists, - ary::idl::Type_id i_nTemplateType ) const + const std::vector<ary::idl::Type_id> * + i_templateParameters ) const { if (i_ceExists == exists_no) { if ( is_ExternLink(i_module) ) { - produce_ExternLink(i_module,i_ce,i_member,i_sequenceCount,i_nTemplateType); + produce_ExternLink(i_module,i_ce,i_member,i_sequenceCount,i_templateParameters); return; } errorOut_UnresolvedLink(i_module, i_ce, i_member); @@ -428,16 +432,8 @@ HF_IdlTypeText::produce_FromStd( const StringVector & i_module, CurOut() << i_ce; } - if (i_nTemplateType.IsValid()) - { - CurOut() << "< "; - - HF_IdlTypeText - aTemplateParamWriter(Env(), CurOut(), true, pReferingCe); - aTemplateParamWriter.Produce_byData(i_nTemplateType); - - CurOut() << " >"; - } + if (i_templateParameters != 0) + write_TemplateParameterList(*i_templateParameters); if (bUseMember) { @@ -678,7 +674,8 @@ HF_IdlTypeText::produce_ExternLink( const StringVector & i_module, const String & i_ce, const String & i_member, int i_sequenceCount, - ary::idl::Type_id i_nTemplateType ) const + const std::vector<ary::idl::Type_id> * + i_templateParameters ) const { // KORR // Look again at this code and take some time. @@ -726,16 +723,8 @@ HF_IdlTypeText::produce_ExternLink( const StringVector & i_module, << i_ce; } - if (i_nTemplateType.IsValid()) - { - CurOut() << "< "; - - HF_IdlTypeText - aTemplateParamWriter(Env(), CurOut(), true, pReferingCe); - aTemplateParamWriter.Produce_byData(i_nTemplateType); - - CurOut() << " >"; - } + if (i_templateParameters != 0) + write_TemplateParameterList(*i_templateParameters); // Member if (i_member.length() > 0) @@ -748,3 +737,24 @@ HF_IdlTypeText::produce_ExternLink( const StringVector & i_module, if (i_sequenceCount > 0) finish_Sequence(i_sequenceCount); } + +void +HF_IdlTypeText::write_TemplateParameterList( + const std::vector<ary::idl::Type_id> & i_templateParameters ) const +{ + if (i_templateParameters.size() == 0) + return; + + HF_IdlTypeText + aTemplateParamWriter(Env(), CurOut(), true, pReferingCe); + CurOut() << "< "; + std::vector<ary::idl::Type_id>::const_iterator + it = i_templateParameters.begin(); + aTemplateParamWriter.Produce_byData(*it); + for ( ++it; it != i_templateParameters.end(); ++it ) + { + CurOut() << ", "; + aTemplateParamWriter.Produce_byData(*it); + } + CurOut() << " >"; +} diff --git a/autodoc/source/display/idl/hfi_typetext.hxx b/autodoc/source/display/idl/hfi_typetext.hxx index 98296e12f20c..028468238a50 100644 --- a/autodoc/source/display/idl/hfi_typetext.hxx +++ b/autodoc/source/display/idl/hfi_typetext.hxx @@ -102,7 +102,8 @@ class HF_IdlTypeText : public HtmlFactory_Idl const String & i_member, int i_sequenceCount, E_Existence i_ceExists, - ary::idl::Type_id i_nTemplateType = ary::idl::Type_id::Null_() ) const; + const std::vector<ary::idl::Type_id> * + i_templateParameters = 0 ) const; void produce_BuiltIn( const String & i_type, int i_sequenceCount ) const; @@ -134,8 +135,11 @@ class HF_IdlTypeText : public HtmlFactory_Idl const String & i_ce, const String & i_member, int i_sequenceCount, - ary::idl::Type_id i_nTemplateType ) const; - + const std::vector<ary::idl::Type_id> * + i_templateParameters ) const; + void write_TemplateParameterList( + const std::vector<ary::idl::Type_id> & + i_templateParameters ) const; const ary::idl::Module * referingModule() const; const client * referingCe() const; diff --git a/autodoc/source/parser_i/idl/pe_type2.cxx b/autodoc/source/parser_i/idl/pe_type2.cxx index 64500e2d95b0..1752a45d2b59 100644 --- a/autodoc/source/parser_i/idl/pe_type2.cxx +++ b/autodoc/source/parser_i/idl/pe_type2.cxx @@ -85,7 +85,8 @@ PE_Type::PE_Type( ary::idl::Type_id & o_rResult ) eState(e_none), sLastPart(), pPE_TemplateType(0), // @attention Recursion, only initiate, if needed! - nTemplateType(0) + nTemplateType(0), + aTemplateParameters() { } @@ -172,10 +173,24 @@ PE_Type::Process_Punctuation( const TokPunctuation & i_rToken ) } else if (eState == in_template_type) { - csv_assert( i_rToken.Id() == TokPunctuation::Greater ); + aTemplateParameters.push_back(nTemplateType); + nTemplateType = 0; + + if (i_rToken.Id() == TokPunctuation::Greater) + { eState = expect_quname_separator; SetResult(done, stay); } + else if (i_rToken.Id() == TokPunctuation::Comma) + { + SetResult(done, push_sure, &MyTemplateType()); + } + else + { + csv_assert(false); + Finish(); + } + } } void @@ -269,6 +284,7 @@ PE_Type::InitData() sFullType.Empty(); sLastPart.clear(); nTemplateType = 0; + csv::erase_container(aTemplateParameters); } void @@ -285,7 +301,7 @@ PE_Type::TransferData() result = Gate().Types().CheckIn_Type( sFullType, nIsSequenceCounter, CurNamespace().CeId(), - nTemplateType ); + &aTemplateParameters ); *pResult = result.TypeId(); eState = e_none; } diff --git a/autodoc/source/parser_i/inc/s2_luidl/pe_type2.hxx b/autodoc/source/parser_i/inc/s2_luidl/pe_type2.hxx index 5dae17b693a7..4880395ea979 100644 --- a/autodoc/source/parser_i/inc/s2_luidl/pe_type2.hxx +++ b/autodoc/source/parser_i/inc/s2_luidl/pe_type2.hxx @@ -104,6 +104,8 @@ class PE_Type : public UnoIDL_PE, Dyn<PE_Type> pPE_TemplateType; /// @attention Recursion, only initiate, if needed! ary::idl::Type_id nTemplateType; + std::vector<ary::idl::Type_id> + aTemplateParameters; }; |