aboutsummaryrefslogtreecommitdiff
path: root/libxsde/xsde
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2010-10-14 12:21:35 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2010-10-14 12:21:35 +0200
commitb7197929af1cca15e490703ba3632ae52a348b60 (patch)
treee4ed9dc7cf2021d6ad398fade7fc8148ff982b16 /libxsde/xsde
parent6f395f9f769866a04f6949cb7ed14f93d90cf728 (diff)
New mapping for anyType with support for polymorphism
Diffstat (limited to 'libxsde/xsde')
-rw-r--r--libxsde/xsde/cxx/hybrid/any-type-pimpl.cxx102
-rw-r--r--libxsde/xsde/cxx/hybrid/any-type-pimpl.hxx48
-rw-r--r--libxsde/xsde/cxx/hybrid/any-type-pskel.cxx104
-rw-r--r--libxsde/xsde/cxx/hybrid/any-type-pskel.hxx84
-rw-r--r--libxsde/xsde/cxx/hybrid/any-type-pskel.ixx29
-rw-r--r--libxsde/xsde/cxx/hybrid/any-type-simpl.cxx20
-rw-r--r--libxsde/xsde/cxx/hybrid/any-type-simpl.hxx32
-rw-r--r--libxsde/xsde/cxx/hybrid/any-type-sskel.cxx29
-rw-r--r--libxsde/xsde/cxx/hybrid/any-type-sskel.hxx66
-rw-r--r--libxsde/xsde/cxx/hybrid/any-type-sskel.ixx27
-rw-r--r--libxsde/xsde/cxx/hybrid/any-type.cxx151
-rw-r--r--libxsde/xsde/cxx/hybrid/any-type.hxx56
-rw-r--r--libxsde/xsde/makefile8
13 files changed, 749 insertions, 7 deletions
diff --git a/libxsde/xsde/cxx/hybrid/any-type-pimpl.cxx b/libxsde/xsde/cxx/hybrid/any-type-pimpl.cxx
new file mode 100644
index 0000000..30ec8f6
--- /dev/null
+++ b/libxsde/xsde/cxx/hybrid/any-type-pimpl.cxx
@@ -0,0 +1,102 @@
+// file : xsde/cxx/hybrid/any-type-pimpl.cxx
+// author : Boris Kolpackov <boris@codesynthesis.com>
+// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC
+// license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+#include <xsde/cxx/config.hxx>
+
+#ifdef XSDE_CUSTOM_ALLOCATOR
+# include <xsde/cxx/allocator.hxx>
+#endif
+
+#include <xsde/cxx/hybrid/any-type-pimpl.hxx>
+
+namespace xsde
+{
+ namespace cxx
+ {
+ namespace hybrid
+ {
+ any_type_pimpl::
+ ~any_type_pimpl ()
+ {
+ if (!base_ && val_)
+ {
+#ifndef XSDE_CUSTOM_ALLOCATOR
+ delete val_;
+#else
+ val_->~any_type ();
+ cxx::free (val_);
+#endif
+ }
+ }
+
+ void any_type_pimpl::
+ _reset ()
+ {
+ any_type_pskel::_reset ();
+
+ if (!base_ && val_)
+ {
+#ifndef XSDE_CUSTOM_ALLOCATOR
+ delete val_;
+#else
+ val_->~any_type ();
+ cxx::free (val_);
+#endif
+ val_ = 0;
+ }
+ }
+
+ any_type_pimpl::
+ any_type_pimpl (bool base)
+ : base_ (base), val_ (0)
+ {
+ }
+
+ void any_type_pimpl::
+ pre_impl (any_type* qn)
+ {
+ val_ = qn;
+ }
+
+ void any_type_pimpl::
+ _pre ()
+ {
+ if (val_ == 0)
+ {
+#ifndef XSDE_CUSTOM_ALLOCATOR
+ val_ = new any_type ();
+#else
+ val_ = static_cast<any_type*> (alloc (sizeof (any_type)));
+
+#ifdef XSDE_EXCEPTIONS
+ alloc_guard ag (val_);
+ new (val_) any_type ();
+ ag.release ();
+#else
+ if (val_)
+ new (val_) any_type ();
+#endif
+#endif
+
+#ifndef XSDE_EXCEPTIONS
+ if (val_ == 0)
+ {
+ _sys_error (sys_error::no_memory);
+ return;
+ }
+#endif
+ }
+ }
+
+ any_type* any_type_pimpl::
+ post_any_type ()
+ {
+ any_type* r = val_;
+ val_ = 0;
+ return r;
+ }
+ }
+ }
+}
diff --git a/libxsde/xsde/cxx/hybrid/any-type-pimpl.hxx b/libxsde/xsde/cxx/hybrid/any-type-pimpl.hxx
new file mode 100644
index 0000000..4e799a6
--- /dev/null
+++ b/libxsde/xsde/cxx/hybrid/any-type-pimpl.hxx
@@ -0,0 +1,48 @@
+// file : xsde/cxx/hybrid/any-type-pimpl.hxx
+// author : Boris Kolpackov <boris@codesynthesis.com>
+// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC
+// license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+#ifndef XSDE_CXX_HYBRID_ANY_TYPE_PIMPL_HXX
+#define XSDE_CXX_HYBRID_ANY_TYPE_PIMPL_HXX
+
+#include <xsde/cxx/config.hxx>
+
+#include <xsde/cxx/hybrid/any-type-pskel.hxx>
+
+namespace xsde
+{
+ namespace cxx
+ {
+ namespace hybrid
+ {
+#ifdef XSDE_REUSE_STYLE_MIXIN
+ struct any_type_pimpl: virtual any_type_pskel
+#else
+ struct any_type_pimpl: any_type_pskel
+#endif
+ {
+ ~any_type_pimpl ();
+ any_type_pimpl (bool base = false);
+
+ void
+ pre_impl (any_type*);
+
+ virtual void
+ _pre ();
+
+ virtual any_type*
+ post_any_type ();
+
+ virtual void
+ _reset ();
+
+ protected:
+ bool base_;
+ any_type* val_;
+ };
+ }
+ }
+}
+
+#endif // XSDE_CXX_HYBRID_ANY_TYPE_PIMPL_HXX
diff --git a/libxsde/xsde/cxx/hybrid/any-type-pskel.cxx b/libxsde/xsde/cxx/hybrid/any-type-pskel.cxx
new file mode 100644
index 0000000..d8434b2
--- /dev/null
+++ b/libxsde/xsde/cxx/hybrid/any-type-pskel.cxx
@@ -0,0 +1,104 @@
+// file : xsde/cxx/hybrid/any-type-pskel.cxx
+// author : Boris Kolpackov <boris@codesynthesis.com>
+// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC
+// license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+#include <xsde/cxx/hybrid/any-type-pskel.hxx>
+
+namespace xsde
+{
+ namespace cxx
+ {
+ namespace hybrid
+ {
+#ifdef XSDE_POLYMORPHIC
+ bool any_type_pskel::
+ _start_element_impl (const ro_string& ns,
+ const ro_string& name,
+ const char* type)
+ {
+#ifdef XSDE_PARSER_VALIDATION
+ parser::context& ctx = _context ();
+ ctx.current_.any_ = true;
+ ctx.current_.depth_++;
+
+ _start_any_element (ns, name, type);
+ return true;
+#else
+ return false;
+#endif
+ }
+#else
+ bool any_type_pskel::
+ _start_element_impl (const ro_string& ns, const ro_string& name)
+ {
+#ifdef XSDE_PARSER_VALIDATION
+ parser::context& ctx = _context ();
+ ctx.current_.any_ = true;
+ ctx.current_.depth_++;
+
+ _start_any_element (ns, name);
+ return true;
+#else
+ return false;
+#endif
+ }
+#endif
+
+ bool any_type_pskel::
+ _end_element_impl (const ro_string& ns, const ro_string& name)
+ {
+#ifdef XSDE_PARSER_VALIDATION
+ _end_any_element (ns, name);
+ return true;
+#else
+ return false;
+#endif
+ }
+
+#ifdef XSDE_PARSER_VALIDATION
+ bool any_type_pskel::
+ _attribute_impl_phase_two (const ro_string& ns,
+ const ro_string& name,
+ const ro_string& value)
+ {
+ _any_attribute (ns, name, value);
+ return true;
+ }
+#else
+ bool any_type_pskel::
+ _attribute_impl (const ro_string&,
+ const ro_string&,
+ const ro_string&)
+ {
+ return false;
+ }
+#endif
+
+ bool any_type_pskel::
+ _characters_impl (const ro_string& s)
+ {
+#ifdef XSDE_PARSER_VALIDATION
+ _any_characters (s);
+ return true;
+#else
+ return false;
+#endif
+ }
+
+#ifdef XSDE_POLYMORPHIC
+ const char* any_type_pskel::
+ _static_type ()
+ {
+ return "anyType http://www.w3.org/2001/XMLSchema";
+ }
+
+ const char* any_type_pskel::
+ _dynamic_type () const
+ {
+ return _static_type ();
+ }
+#endif
+ }
+ }
+}
diff --git a/libxsde/xsde/cxx/hybrid/any-type-pskel.hxx b/libxsde/xsde/cxx/hybrid/any-type-pskel.hxx
new file mode 100644
index 0000000..6751120
--- /dev/null
+++ b/libxsde/xsde/cxx/hybrid/any-type-pskel.hxx
@@ -0,0 +1,84 @@
+// file : xsde/cxx/hybrid/any-type-pskel.hxx
+// author : Boris Kolpackov <boris@codesynthesis.com>
+// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC
+// license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+#ifndef XSDE_CXX_HYBRID_ANY_TYPE_PSKEL_HXX
+#define XSDE_CXX_HYBRID_ANY_TYPE_PSKEL_HXX
+
+#include <xsde/cxx/config.hxx>
+
+#ifdef XSDE_PARSER_VALIDATION
+# include <xsde/cxx/parser/validating/parser.hxx>
+#else
+# include <xsde/cxx/parser/non-validating/parser.hxx>
+#endif
+
+#include <xsde/cxx/hybrid/any-type.hxx>
+
+namespace xsde
+{
+ namespace cxx
+ {
+ namespace hybrid
+ {
+#ifdef XSDE_PARSER_VALIDATION
+ struct any_type_pskel: parser::validating::complex_content
+#else
+ struct any_type_pskel: parser::non_validating::complex_content
+#endif
+ {
+#ifdef XSDE_POLYMORPHIC
+ virtual bool
+ _start_element_impl (const ro_string&,
+ const ro_string&,
+ const char*);
+#else
+ virtual bool
+ _start_element_impl (const ro_string&, const ro_string&);
+#endif
+
+ virtual bool
+ _end_element_impl (const ro_string&, const ro_string&);
+
+#ifdef XSDE_PARSER_VALIDATION
+ virtual bool
+ _attribute_impl_phase_two (const ro_string&,
+ const ro_string&,
+ const ro_string&);
+#else
+ virtual bool
+ _attribute_impl (const ro_string&,
+ const ro_string&,
+ const ro_string&);
+#endif
+
+ virtual bool
+ _characters_impl (const ro_string&);
+
+ virtual any_type*
+ post_any_type () = 0;
+
+#ifdef XSDE_POLYMORPHIC
+ static const char*
+ _static_type ();
+
+ virtual const char*
+ _dynamic_type () const;
+#endif
+
+#ifdef XSDE_REUSE_STYLE_TIEIN
+ any_type_pskel ();
+ any_type_pskel (any_type_pskel* impl, void*);
+
+ protected:
+ any_type_pskel* any_type_impl_;
+#endif
+ };
+ }
+ }
+}
+
+#include <xsde/cxx/hybrid/any-type-pskel.ixx>
+
+#endif // XSDE_CXX_HYBRID_ANY_TYPE_PSKEL_HXX
diff --git a/libxsde/xsde/cxx/hybrid/any-type-pskel.ixx b/libxsde/xsde/cxx/hybrid/any-type-pskel.ixx
new file mode 100644
index 0000000..b63ec72
--- /dev/null
+++ b/libxsde/xsde/cxx/hybrid/any-type-pskel.ixx
@@ -0,0 +1,29 @@
+// file : xsde/cxx/hybrid/any-type-pskel.ixx
+// author : Boris Kolpackov <boris@codesynthesis.com>
+// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC
+// license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+namespace xsde
+{
+ namespace cxx
+ {
+ namespace hybrid
+ {
+ // any_type_pskel
+ //
+#ifdef XSDE_REUSE_STYLE_TIEIN
+ inline any_type_pskel::
+ any_type_pskel ()
+ : any_type_impl_ (0)
+ {
+ }
+
+ inline any_type_pskel::
+ any_type_pskel (any_type_pskel* impl, void*)
+ : complex_content (impl, 0), any_type_impl_ (impl)
+ {
+ }
+#endif
+ }
+ }
+}
diff --git a/libxsde/xsde/cxx/hybrid/any-type-simpl.cxx b/libxsde/xsde/cxx/hybrid/any-type-simpl.cxx
new file mode 100644
index 0000000..fd65e92
--- /dev/null
+++ b/libxsde/xsde/cxx/hybrid/any-type-simpl.cxx
@@ -0,0 +1,20 @@
+// file : xsde/cxx/hybrid/any-type-simpl.cxx
+// author : Boris Kolpackov <boris@codesynthesis.com>
+// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC
+// license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+#include <xsde/cxx/hybrid/any-type-simpl.hxx>
+
+namespace xsde
+{
+ namespace cxx
+ {
+ namespace hybrid
+ {
+ void any_type_simpl::
+ pre (const any_type&)
+ {
+ }
+ }
+ }
+}
diff --git a/libxsde/xsde/cxx/hybrid/any-type-simpl.hxx b/libxsde/xsde/cxx/hybrid/any-type-simpl.hxx
new file mode 100644
index 0000000..a6ef220
--- /dev/null
+++ b/libxsde/xsde/cxx/hybrid/any-type-simpl.hxx
@@ -0,0 +1,32 @@
+// file : xsde/cxx/hybrid/any-type-simpl.hxx
+// author : Boris Kolpackov <boris@codesynthesis.com>
+// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC
+// license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+#ifndef XSDE_CXX_HYBRID_ANY_TYPE_SIMPL_HXX
+#define XSDE_CXX_HYBRID_ANY_TYPE_SIMPL_HXX
+
+#include <xsde/cxx/config.hxx>
+
+#include <xsde/cxx/hybrid/any-type-sskel.hxx>
+
+namespace xsde
+{
+ namespace cxx
+ {
+ namespace hybrid
+ {
+#ifdef XSDE_REUSE_STYLE_MIXIN
+ struct any_type_simpl: virtual any_type_sskel
+#else
+ struct any_type_simpl: any_type_sskel
+#endif
+ {
+ virtual void
+ pre (const any_type&);
+ };
+ }
+ }
+}
+
+#endif // XSDE_CXX_HYBRID_ANY_TYPE_SIMPL_HXX
diff --git a/libxsde/xsde/cxx/hybrid/any-type-sskel.cxx b/libxsde/xsde/cxx/hybrid/any-type-sskel.cxx
new file mode 100644
index 0000000..7c6c1c1
--- /dev/null
+++ b/libxsde/xsde/cxx/hybrid/any-type-sskel.cxx
@@ -0,0 +1,29 @@
+// file : xsde/cxx/hybrid/any-type-sskel.cxx
+// author : Boris Kolpackov <boris@codesynthesis.com>
+// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC
+// license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+#include <xsde/cxx/hybrid/any-type-sskel.hxx>
+
+namespace xsde
+{
+ namespace cxx
+ {
+ namespace hybrid
+ {
+#ifdef XSDE_POLYMORPHIC
+ const char* any_type_sskel::
+ _static_type ()
+ {
+ return "anyType http://www.w3.org/2001/XMLSchema";
+ }
+
+ const char* any_type_sskel::
+ _dynamic_type () const
+ {
+ return _static_type ();
+ }
+#endif
+ }
+ }
+}
diff --git a/libxsde/xsde/cxx/hybrid/any-type-sskel.hxx b/libxsde/xsde/cxx/hybrid/any-type-sskel.hxx
new file mode 100644
index 0000000..29663be
--- /dev/null
+++ b/libxsde/xsde/cxx/hybrid/any-type-sskel.hxx
@@ -0,0 +1,66 @@
+// file : xsde/cxx/hybrid/any-type-sskel.hxx
+// author : Boris Kolpackov <boris@codesynthesis.com>
+// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC
+// license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+#ifndef XSDE_CXX_HYBRID_ANY_TYPE_SSKEL_HXX
+#define XSDE_CXX_HYBRID_ANY_TYPE_SSKEL_HXX
+
+#include <xsde/cxx/config.hxx>
+
+#ifdef XSDE_SERIALIZER_VALIDATION
+# include <xsde/cxx/serializer/validating/serializer.hxx>
+#else
+# include <xsde/cxx/serializer/non-validating/serializer.hxx>
+#endif
+
+#include <xsde/cxx/hybrid/any-type.hxx>
+
+namespace xsde
+{
+ namespace cxx
+ {
+ namespace hybrid
+ {
+#ifdef XSDE_SERIALIZER_VALIDATION
+ struct any_type_sskel: serializer::validating::complex_content
+#else
+ struct any_type_sskel: serializer::non_validating::complex_content
+#endif
+ {
+ virtual void
+ pre (const any_type&) = 0;
+
+ // Override the following two functions to implement
+ // your logic.
+ //
+
+ // virtual void
+ // _serialize_attributes ();
+
+ // virtual void
+ // _serialize_content ();
+
+#ifdef XSDE_POLYMORPHIC
+ static const char*
+ _static_type ();
+
+ virtual const char*
+ _dynamic_type () const;
+#endif
+
+#ifdef XSDE_REUSE_STYLE_TIEIN
+ any_type_sskel ();
+ any_type_sskel (any_type_sskel* impl, void*);
+
+ protected:
+ any_type_sskel* any_type_impl_;
+#endif
+ };
+ }
+ }
+}
+
+#include <xsde/cxx/hybrid/any-type-sskel.ixx>
+
+#endif // XSDE_CXX_HYBRID_ANY_TYPE_SSKEL_HXX
diff --git a/libxsde/xsde/cxx/hybrid/any-type-sskel.ixx b/libxsde/xsde/cxx/hybrid/any-type-sskel.ixx
new file mode 100644
index 0000000..341a340
--- /dev/null
+++ b/libxsde/xsde/cxx/hybrid/any-type-sskel.ixx
@@ -0,0 +1,27 @@
+// file : xsde/cxx/hybrid/any-type-sskel.ixx
+// author : Boris Kolpackov <boris@codesynthesis.com>
+// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC
+// license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+namespace xsde
+{
+ namespace cxx
+ {
+ namespace hybrid
+ {
+#ifdef XSDE_REUSE_STYLE_TIEIN
+ inline any_type_sskel::
+ any_type_sskel ()
+ : any_type_impl_ (0)
+ {
+ }
+
+ inline any_type_sskel::
+ any_type_sskel (any_type_sskel* impl, void*)
+ : complex_content (impl, 0), any_type_impl_ (impl)
+ {
+ }
+#endif
+ }
+ }
+}
diff --git a/libxsde/xsde/cxx/hybrid/any-type.cxx b/libxsde/xsde/cxx/hybrid/any-type.cxx
index d4f257d..544e11b 100644
--- a/libxsde/xsde/cxx/hybrid/any-type.cxx
+++ b/libxsde/xsde/cxx/hybrid/any-type.cxx
@@ -3,6 +3,12 @@
// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC
// license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+#include <xsde/cxx/config.hxx>
+
+#ifdef XSDE_CUSTOM_ALLOCATOR
+# include <xsde/cxx/allocator.hxx>
+#endif
+
#include <xsde/cxx/hybrid/any-type.hxx>
namespace xsde
@@ -13,12 +19,155 @@ namespace xsde
{
// any_type
//
-#ifdef XSDE_POLYMORPHIC
any_type::
~any_type ()
{
+#ifndef XSDE_CUSTOM_ALLOCATOR
+ delete data_;
+#else
+ if (data_ != 0)
+ {
+ data_->~data_sequence ();
+ cxx::free (data_);
+ }
+#endif
+ }
+
+#ifdef XSDE_EXCEPTIONS
+ void any_type::
+ allocate_custom_data ()
+ {
+ if (data_ != 0)
+ return;
+
+#ifndef XSDE_CUSTOM_ALLOCATOR
+ data_ = new data_sequence;
+#else
+ // Default data_sequence c-tor cannot throw so we don't need a guard.
+ //
+ data_ = static_cast<data_sequence*> (
+ cxx::alloc (sizeof (data_sequence)));
+ new (data_) data_sequence;
+#endif
}
+ void any_type::
+ _copy (any_type& c) const
+ {
+ if (data_ != 0)
+ {
+ c.allocate_custom_data ();
+ data_->copy (c.custom_data ());
+ }
+ }
+
+ struct any_type_guard
+ {
+ any_type_guard (any_type* p) : p_ (p) {}
+
+ ~any_type_guard ()
+ {
+#ifndef XSDE_CUSTOM_ALLOCATOR
+ delete p_;
+#else
+ if (p_ != 0)
+ {
+ p_->~any_type ();
+ cxx::free (p_);
+ }
+#endif
+ }
+
+ void
+ release () { p_ = 0; }
+
+ private:
+ any_type* p_;
+ };
+
+ any_type* any_type::
+ _clone () const
+ {
+#ifndef XSDE_CUSTOM_ALLOCATOR
+ any_type* c = new any_type;
+#else
+ // Default any_type c-tor cannot throw so we don't need alloc_guard.
+ //
+ any_type* c = static_cast<any_type*> (cxx::alloc (sizeof (any_type)));
+ new (c) any_type;
+#endif
+ any_type_guard g (c);
+ _copy (*c);
+ g.release ();
+ return c;
+ }
+#else
+ bool any_type::
+ allocate_custom_data ()
+ {
+ if (data_ != 0)
+ return true;
+
+#ifndef XSDE_CUSTOM_ALLOCATOR
+ data_ = new data_sequence;
+#else
+ data_ = static_cast<data_sequence*> (
+ cxx::alloc (sizeof (data_sequence)));
+#endif
+ if (data_ == 0)
+ return false;
+
+#ifdef XSDE_CUSTOM_ALLOCATOR
+ new (data_) data_sequence;
+#endif
+ return true;
+ }
+
+ bool
+ _copy (any_type&) const
+ {
+ if (data_ != 0)
+ {
+ if (!c.allocate_custom_data () ||
+ !data_.copy (c.custom_data ()))
+ return false;
+ }
+
+ return true;
+ }
+
+ any_type* any_type::
+ _clone () const
+ {
+#ifndef XSDE_CUSTOM_ALLOCATOR
+ any_type* c = new any_type;
+#else
+ any_type* c = static_cast<any_type*> (cxx::alloc (sizeof (any_type)));
+#endif
+
+ if (c == 0)
+ return 0;
+
+#ifdef XSDE_CUSTOM_ALLOCATOR
+ new (c) any_type;
+#endif
+
+ if (!_copy (*c))
+ {
+#ifndef XSDE_CUSTOM_ALLOCATOR
+ delete c;
+#else
+ c->~any_type ();
+ cxx::free (c);
+#endif
+ return 0;
+ }
+
+ return c;
+ }
+#endif
+
+#ifdef XSDE_POLYMORPHIC
#ifdef XSDE_STL
const std::string& any_type::
_dynamic_type () const
diff --git a/libxsde/xsde/cxx/hybrid/any-type.hxx b/libxsde/xsde/cxx/hybrid/any-type.hxx
index a356564..48b0e22 100644
--- a/libxsde/xsde/cxx/hybrid/any-type.hxx
+++ b/libxsde/xsde/cxx/hybrid/any-type.hxx
@@ -8,11 +8,11 @@
#include <xsde/cxx/config.hxx>
-/*
#ifdef XSDE_STL
# include <string>
#endif
-*/
+
+#include <xsde/cxx/hybrid/sequence.hxx>
namespace xsde
{
@@ -22,11 +22,55 @@ namespace xsde
{
struct any_type
{
- /*
-#ifdef XSDE_POLYMORPHIC
+ any_type ()
+ : data_ (0)
+ {
+ }
+
+ // Custom data.
+ //
+ typedef data_sequence custom_data_sequence;
+ typedef custom_data_sequence::iterator custom_data_iterator;
+ typedef custom_data_sequence::const_iterator custom_data_const_iterator;
+
+#ifndef XSDE_EXCEPTIONS
+ bool
+#else
+ void
+#endif
+ allocate_custom_data ();
+
+ const custom_data_sequence&
+ custom_data () const
+ {
+ return *data_;
+ }
+
+ custom_data_sequence&
+ custom_data ()
+ {
+ return *data_;
+ }
+
+#ifndef XSDE_EXCEPTIONS
+ bool
+#else
+ void
+#endif
+ _copy (any_type&) const;
+
+#ifndef XSDE_POLYMORPHIC
+ ~any_type ();
+
+ any_type*
+ _clone () const;
+#else
virtual
~any_type ();
+ virtual any_type*
+ _clone () const;
+
#ifdef XSDE_STL
virtual const std::string&
_dynamic_type () const;
@@ -41,7 +85,9 @@ namespace xsde
_static_type ();
#endif
#endif
- */
+
+ private:
+ data_sequence* data_;
};
}
}
diff --git a/libxsde/xsde/makefile b/libxsde/xsde/makefile
index ce95980..0741d13 100644
--- a/libxsde/xsde/makefile
+++ b/libxsde/xsde/makefile
@@ -77,7 +77,13 @@ endif
## C++/Hybrid
##
-cxx_tun += cxx/hybrid/sequence.cxx
+cxx_tun += \
+cxx/hybrid/any-type.cxx \
+cxx/hybrid/any-type-pimpl.cxx \
+cxx/hybrid/any-type-pskel.cxx \
+cxx/hybrid/any-type-simpl.cxx \
+cxx/hybrid/any-type-sskel.cxx \
+cxx/hybrid/sequence.cxx
ifeq ($(xsde_polymorphic),y)
cxx_tun += \