aboutsummaryrefslogtreecommitdiff
path: root/xsde/cxx/hybrid/elements.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'xsde/cxx/hybrid/elements.hxx')
-rw-r--r--xsde/cxx/hybrid/elements.hxx353
1 files changed, 185 insertions, 168 deletions
diff --git a/xsde/cxx/hybrid/elements.hxx b/xsde/cxx/hybrid/elements.hxx
index 01030d5..60211e8 100644
--- a/xsde/cxx/hybrid/elements.hxx
+++ b/xsde/cxx/hybrid/elements.hxx
@@ -1611,76 +1611,63 @@ namespace CXX
String xs_ns_;
};
- struct TypeOps: Traversal::Type,
- Traversal::AnyType,
- Traversal::AnySimpleType,
-
- Traversal::Fundamental::Byte,
- Traversal::Fundamental::UnsignedByte,
- Traversal::Fundamental::Short,
- Traversal::Fundamental::UnsignedShort,
- Traversal::Fundamental::Int,
- Traversal::Fundamental::UnsignedInt,
- Traversal::Fundamental::Long,
- Traversal::Fundamental::UnsignedLong,
- Traversal::Fundamental::Integer,
- Traversal::Fundamental::NonPositiveInteger,
- Traversal::Fundamental::NonNegativeInteger,
- Traversal::Fundamental::PositiveInteger,
- Traversal::Fundamental::NegativeInteger,
-
- Traversal::Fundamental::Boolean,
-
- Traversal::Fundamental::Float,
- Traversal::Fundamental::Double,
- Traversal::Fundamental::Decimal,
-
- Traversal::Fundamental::String,
- Traversal::Fundamental::NormalizedString,
- Traversal::Fundamental::Token,
- Traversal::Fundamental::Name,
- Traversal::Fundamental::NameToken,
- Traversal::Fundamental::NameTokens,
- Traversal::Fundamental::NCName,
- Traversal::Fundamental::Language,
-
- Traversal::Fundamental::QName,
-
- Traversal::Fundamental::Id,
- Traversal::Fundamental::IdRef,
- Traversal::Fundamental::IdRefs,
-
- Traversal::Fundamental::AnyURI,
-
- Traversal::Fundamental::Base64Binary,
- Traversal::Fundamental::HexBinary,
-
- Traversal::Fundamental::Date,
- Traversal::Fundamental::DateTime,
- Traversal::Fundamental::Duration,
- Traversal::Fundamental::Day,
- Traversal::Fundamental::Month,
- Traversal::Fundamental::MonthDay,
- Traversal::Fundamental::Year,
- Traversal::Fundamental::YearMonth,
- Traversal::Fundamental::Time,
-
- Traversal::Fundamental::Entity,
- Traversal::Fundamental::Entities,
-
- Context
+ struct TypeOpsBase: Traversal::Type,
+ Traversal::AnyType,
+ Traversal::AnySimpleType,
+
+ Traversal::Fundamental::Byte,
+ Traversal::Fundamental::UnsignedByte,
+ Traversal::Fundamental::Short,
+ Traversal::Fundamental::UnsignedShort,
+ Traversal::Fundamental::Int,
+ Traversal::Fundamental::UnsignedInt,
+ Traversal::Fundamental::Long,
+ Traversal::Fundamental::UnsignedLong,
+ Traversal::Fundamental::Integer,
+ Traversal::Fundamental::NonPositiveInteger,
+ Traversal::Fundamental::NonNegativeInteger,
+ Traversal::Fundamental::PositiveInteger,
+ Traversal::Fundamental::NegativeInteger,
+
+ Traversal::Fundamental::Boolean,
+
+ Traversal::Fundamental::Float,
+ Traversal::Fundamental::Double,
+ Traversal::Fundamental::Decimal,
+
+ Traversal::Fundamental::String,
+ Traversal::Fundamental::NormalizedString,
+ Traversal::Fundamental::Token,
+ Traversal::Fundamental::Name,
+ Traversal::Fundamental::NameToken,
+ Traversal::Fundamental::NameTokens,
+ Traversal::Fundamental::NCName,
+ Traversal::Fundamental::Language,
+
+ Traversal::Fundamental::QName,
+
+ Traversal::Fundamental::Id,
+ Traversal::Fundamental::IdRef,
+ Traversal::Fundamental::IdRefs,
+
+ Traversal::Fundamental::AnyURI,
+
+ Traversal::Fundamental::Base64Binary,
+ Traversal::Fundamental::HexBinary,
+
+ Traversal::Fundamental::Date,
+ Traversal::Fundamental::DateTime,
+ Traversal::Fundamental::Duration,
+ Traversal::Fundamental::Day,
+ Traversal::Fundamental::Month,
+ Traversal::Fundamental::MonthDay,
+ Traversal::Fundamental::Year,
+ Traversal::Fundamental::YearMonth,
+ Traversal::Fundamental::Time,
+
+ Traversal::Fundamental::Entity,
+ Traversal::Fundamental::Entities
{
- enum Use
- {
- deref,
- delete_
- };
-
- TypeOps (Context& c, Use use)
- : Context (c), use_ (use)
- {
- }
-
virtual Void
traverse (SemanticGraph::Type& t)
{
@@ -1704,135 +1691,135 @@ namespace CXX
// Boolean.
//
virtual Void
- traverse (SemanticGraph::Fundamental::Boolean&)
+ traverse (SemanticGraph::Fundamental::Boolean& t)
{
- fund_type ();
+ fund_type (t);
}
// Integral types.
//
virtual Void
- traverse (SemanticGraph::Fundamental::Byte&)
+ traverse (SemanticGraph::Fundamental::Byte& t)
{
- fund_type ();
+ fund_type (t);
}
virtual Void
- traverse (SemanticGraph::Fundamental::UnsignedByte&)
+ traverse (SemanticGraph::Fundamental::UnsignedByte& t)
{
- fund_type ();
+ fund_type (t);
}
virtual Void
- traverse (SemanticGraph::Fundamental::Short&)
+ traverse (SemanticGraph::Fundamental::Short& t)
{
- fund_type ();
+ fund_type (t);
}
virtual Void
- traverse (SemanticGraph::Fundamental::UnsignedShort&)
+ traverse (SemanticGraph::Fundamental::UnsignedShort& t)
{
- fund_type ();
+ fund_type (t);
}
virtual Void
- traverse (SemanticGraph::Fundamental::Int&)
+ traverse (SemanticGraph::Fundamental::Int& t)
{
- fund_type ();
+ fund_type (t);
}
virtual Void
- traverse (SemanticGraph::Fundamental::UnsignedInt&)
+ traverse (SemanticGraph::Fundamental::UnsignedInt& t)
{
- fund_type ();
+ fund_type (t);
}
virtual Void
- traverse (SemanticGraph::Fundamental::Long&)
+ traverse (SemanticGraph::Fundamental::Long& t)
{
- fund_type ();
+ fund_type (t);
}
virtual Void
- traverse (SemanticGraph::Fundamental::UnsignedLong&)
+ traverse (SemanticGraph::Fundamental::UnsignedLong& t)
{
- fund_type ();
+ fund_type (t);
}
virtual Void
- traverse (SemanticGraph::Fundamental::Integer&)
+ traverse (SemanticGraph::Fundamental::Integer& t)
{
- fund_type ();
+ fund_type (t);
}
virtual Void
- traverse (SemanticGraph::Fundamental::NonPositiveInteger&)
+ traverse (SemanticGraph::Fundamental::NonPositiveInteger& t)
{
- fund_type ();
+ fund_type (t);
}
virtual Void
- traverse (SemanticGraph::Fundamental::NonNegativeInteger&)
+ traverse (SemanticGraph::Fundamental::NonNegativeInteger& t)
{
- fund_type ();
+ fund_type (t);
}
virtual Void
- traverse (SemanticGraph::Fundamental::PositiveInteger&)
+ traverse (SemanticGraph::Fundamental::PositiveInteger& t)
{
- fund_type ();
+ fund_type (t);
}
virtual Void
- traverse (SemanticGraph::Fundamental::NegativeInteger&)
+ traverse (SemanticGraph::Fundamental::NegativeInteger& t)
{
- fund_type ();
+ fund_type (t);
}
// Floats.
//
virtual Void
- traverse (SemanticGraph::Fundamental::Float&)
+ traverse (SemanticGraph::Fundamental::Float& t)
{
- fund_type ();
+ fund_type (t);
}
virtual Void
- traverse (SemanticGraph::Fundamental::Double&)
+ traverse (SemanticGraph::Fundamental::Double& t)
{
- fund_type ();
+ fund_type (t);
}
virtual Void
- traverse (SemanticGraph::Fundamental::Decimal&)
+ traverse (SemanticGraph::Fundamental::Decimal& t)
{
- fund_type ();
+ fund_type (t);
}
// Strings.
//
virtual Void
- traverse (SemanticGraph::Fundamental::String&)
+ traverse (SemanticGraph::Fundamental::String& t)
{
- string_type ();
+ string_type (t);
}
virtual Void
- traverse (SemanticGraph::Fundamental::NormalizedString&)
+ traverse (SemanticGraph::Fundamental::NormalizedString& t)
{
- string_type ();
+ string_type (t);
}
virtual Void
- traverse (SemanticGraph::Fundamental::Token&)
+ traverse (SemanticGraph::Fundamental::Token& t)
{
- string_type ();
+ string_type (t);
}
virtual Void
- traverse (SemanticGraph::Fundamental::NameToken&)
+ traverse (SemanticGraph::Fundamental::NameToken& t)
{
- string_type ();
+ string_type (t);
}
virtual Void
@@ -1842,21 +1829,21 @@ namespace CXX
}
virtual Void
- traverse (SemanticGraph::Fundamental::Name&)
+ traverse (SemanticGraph::Fundamental::Name& t)
{
- string_type ();
+ string_type (t);
}
virtual Void
- traverse (SemanticGraph::Fundamental::NCName&)
+ traverse (SemanticGraph::Fundamental::NCName& t)
{
- string_type ();
+ string_type (t);
}
virtual Void
- traverse (SemanticGraph::Fundamental::Language&)
+ traverse (SemanticGraph::Fundamental::Language& t)
{
- string_type ();
+ string_type (t);
}
// Qualified name.
@@ -1870,15 +1857,15 @@ namespace CXX
// ID/IDREF.
//
virtual Void
- traverse (SemanticGraph::Fundamental::Id&)
+ traverse (SemanticGraph::Fundamental::Id& t)
{
- string_type ();
+ string_type (t);
}
virtual Void
- traverse (SemanticGraph::Fundamental::IdRef&)
+ traverse (SemanticGraph::Fundamental::IdRef& t)
{
- string_type ();
+ string_type (t);
}
virtual Void
@@ -1890,9 +1877,9 @@ namespace CXX
// URI.
//
virtual Void
- traverse (SemanticGraph::Fundamental::AnyURI&)
+ traverse (SemanticGraph::Fundamental::AnyURI& t)
{
- string_type ();
+ string_type (t);
}
// Binary.
@@ -1968,9 +1955,9 @@ namespace CXX
// Entity.
//
virtual Void
- traverse (SemanticGraph::Fundamental::Entity&)
+ traverse (SemanticGraph::Fundamental::Entity& t)
{
- string_type ();
+ string_type (t);
}
virtual Void
@@ -1979,66 +1966,96 @@ namespace CXX
type (t);
}
- private:
- Void
+ protected:
+ virtual Void
+ type (SemanticGraph::Type&) = 0;
+
+ virtual Void
+ fund_type (SemanticGraph::Type&) = 0;
+
+ virtual Void
+ string_type (SemanticGraph::Type&) = 0;
+ };
+
+ struct TypeDeref: TypeOpsBase, Context
+ {
+ TypeDeref (Context& c)
+ : Context (c)
+ {
+ }
+
+ protected:
+ virtual Void
type (SemanticGraph::Type& t)
{
- switch (use_)
- {
- case deref:
- {
- if (!fixed_length (t))
- os << "*";
+ if (!fixed_length (t))
+ os << "*";
+ }
- break;
- }
- case delete_:
- {
- os << "delete";
- break;
- }
- }
+ virtual Void
+ fund_type (SemanticGraph::Type&)
+ {
+ }
+
+ virtual Void
+ string_type (SemanticGraph::Type&)
+ {
+ }
+ };
+
+ struct TypeDelete: TypeOpsBase, Context
+ {
+ TypeDelete (Context& c)
+ : Context (c)
+ {
}
Void
- fund_type ()
+ dispatch (SemanticGraph::Node& type, String const& var)
{
- switch (use_)
+ var_ = var;
+ Traversal::NodeBase::dispatch (type);
+ }
+
+ protected:
+ virtual Void
+ type (SemanticGraph::Type& t)
+ {
+ if (!custom_alloc)
+ os << "delete " << var_ << ";";
+ else
{
- case deref:
- {
- break;
- }
- case delete_:
- {
- os << "delete";
- break;
- }
+ os << "if (" << var_ << ")"
+ << "{"
+ << "typedef " << fq_name (t) << " _dtor;"
+ << var_ << "->~_dtor ();"
+ << "::xsde::cxx::free (" << var_ << ");"
+ << "}";
}
}
- Void
- string_type ()
+ virtual Void
+ fund_type (SemanticGraph::Type& t)
{
- switch (use_)
+ type (t);
+ }
+
+ virtual Void
+ string_type (SemanticGraph::Type& t)
+ {
+ if (stl)
+ type (t);
+ else
{
- case deref:
- {
- break;
- }
- case delete_:
- {
- if (stl)
- os << "delete";
- else
- os << "delete[]";
- break;
- }
+ if (!custom_alloc)
+ os << "delete[] " << var_ << ";";
+ else
+ os << "::xsde::cxx::free (" << var_ << ");";
}
}
private:
- Use use_;
+ String var_;
};
//