summaryrefslogtreecommitdiff
path: root/autodoc/source
diff options
context:
space:
mode:
Diffstat (limited to 'autodoc/source')
-rw-r--r--autodoc/source/ary/idl/i2s_calculator.cxx4
-rw-r--r--autodoc/source/ary/idl/ia_type.cxx44
-rw-r--r--autodoc/source/ary/idl/ia_type.hxx6
-rw-r--r--autodoc/source/ary/idl/it_ce.cxx16
-rw-r--r--autodoc/source/ary/idl/it_ce.hxx13
-rw-r--r--autodoc/source/ary/idl/it_explicit.cxx13
-rw-r--r--autodoc/source/ary/idl/it_explicit.hxx11
-rw-r--r--autodoc/source/ary/idl/it_sequence.cxx5
-rw-r--r--autodoc/source/ary/idl/it_sequence.hxx3
-rw-r--r--autodoc/source/ary/idl/it_tplparam.cxx12
-rw-r--r--autodoc/source/display/idl/hfi_typetext.cxx64
-rw-r--r--autodoc/source/display/idl/hfi_typetext.hxx10
-rw-r--r--autodoc/source/parser_i/idl/pe_type2.cxx22
-rw-r--r--autodoc/source/parser_i/inc/s2_luidl/pe_type2.hxx2
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;
};