summaryrefslogtreecommitdiff
path: root/odb/common.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'odb/common.hxx')
-rw-r--r--odb/common.hxx469
1 files changed, 0 insertions, 469 deletions
diff --git a/odb/common.hxx b/odb/common.hxx
deleted file mode 100644
index 083eb4e..0000000
--- a/odb/common.hxx
+++ /dev/null
@@ -1,469 +0,0 @@
-// file : odb/common.hxx
-// copyright : Copyright (c) 2009-2019 Code Synthesis Tools CC
-// license : GNU GPL v3; see accompanying LICENSE file
-
-#ifndef ODB_COMMON_HXX
-#define ODB_COMMON_HXX
-
-#include <string>
-#include <vector>
-#include <cstddef> // std::size_t
-#include <cassert>
-
-#include <odb/context.hxx>
-#include <odb/instance.hxx>
-
-// Traverse object members recursively by going into bases and
-// composite members.
-//
-struct object_members_base: traversal::class_, virtual context
-{
- virtual void
- traverse_simple (semantics::data_member&);
-
- // Traverse object pointer. The second argument is the pointed-to
- // class. When overriding this function, you will most likely want
- // to call the base in order to traverse the pointer as a simple
- // member (simple object id) or as composite (composite object id).
- //
- virtual void
- traverse_pointer (semantics::data_member&, semantics::class_&);
-
- // If you override this function, you can call the base to traverse
- // bases and members. The first argument is the data member and can
- // be NULL if we are traversing the root type or a base. The second
- // argument is the actual composite type, which is not necessarily
- // the same as the member's type.
- //
- virtual void
- traverse_composite (semantics::data_member*, semantics::class_&);
-
- // More general version of the above function that allows detection
- // of wrapped composite value. By default this function calls
- // traverse_composite (m, comp) ignoring the wrapper type. Note that
- // this function is called for all composite value (wrapped or not).
- // If it is not wrapped, the wrapper argument will be NULL.
- //
- virtual void
- traverse_composite_wrapper (semantics::data_member*,
- semantics::class_& comp,
- semantics::type* wrapper);
-
- // The second argument is the actual container type in case the
- // member type is a wrapper.
- //
- virtual void
- traverse_container (semantics::data_member&, semantics::type&);
-
- // If you override this function, you can call the base to traverse
- // bases and members.
- //
- virtual void
- traverse_object (semantics::class_&);
-
- // If you override this function, you can call the base to traverse
- // members.
- //
- virtual void
- traverse_view (semantics::class_&);
-
- virtual bool
- section_test (data_member_path const&);
-
-public:
- object_members_base (bool traverse_poly_base = false,
- object_section* section = 0)
- : section_ (section), top_level_ (true), member_ (*this)
- {
- init (false, false, false, traverse_poly_base);
- }
-
- object_members_base (bool build_flat_prefix,
- bool build_table_prefix,
- bool build_member_prefix,
- bool traverse_poly_base = false,
- object_section* section = 0)
- : section_ (section), top_level_ (true), member_ (*this)
- {
- init (build_flat_prefix,
- build_table_prefix,
- build_member_prefix,
- traverse_poly_base);
- }
-
- object_members_base (object_members_base const& x)
- : context (), //@@ -Wextra
- section_ (x.section_),
- top_level_ (true),
- member_ (*this)
- {
- init (x.build_flat_prefix_,
- x.build_table_prefix_,
- x.build_member_prefix_,
- x.traverse_poly_base_);
- }
-
- virtual void
- traverse (semantics::class_&);
-
-protected:
- string flat_prefix_;
- table_prefix table_prefix_;
- string member_prefix_;
-
- data_member_path member_path_;
- data_member_scope member_scope_;
-
- object_section* section_;
-
-protected:
- semantics::data_member*
- id () const
- {
- assert (!member_path_.empty ());
- return context::id (member_path_);
- }
-
-private:
- void
- init (bool build_flat_prefix,
- bool build_table_prefix,
- bool build_member_prefix,
- bool traverse_poly_base)
- {
- build_flat_prefix_ = build_flat_prefix;
- build_table_prefix_ = build_table_prefix;
- build_member_prefix_ = build_member_prefix;
- traverse_poly_base_ = traverse_poly_base;
-
- *this >> names_ >> member_;
- *this >> inherits_ >> *this;
- }
-
-private:
- virtual void
- traverse_member (semantics::data_member&, semantics::type&);
-
- struct member: traversal::data_member
- {
- member (object_members_base& om): om_ (om) {}
-
- virtual void
- traverse (semantics::data_member&);
-
- public:
- object_members_base& om_;
- };
-
- bool build_flat_prefix_;
- bool build_table_prefix_;
- bool build_member_prefix_;
-
- bool traverse_poly_base_;
-
- bool top_level_;
-
- member member_;
- traversal::names names_;
- traversal::inherits inherits_;
-};
-
-// Traverse object columns recursively by going into composite members
-// and bases.
-//
-struct object_columns_base: traversal::class_, virtual context
-{
- // Returning false means that the column has been ignored and the
- // first flag should not be changed.
- //
- virtual bool
- traverse_column (semantics::data_member&,
- string const& name,
- bool first);
-
- // Traverse object pointer. The second argument is the pointed-to
- // class. When overriding this function, you will most likely want
- // to call the base in order to traverse the member as a column
- // (simple object id) or columns (composite object id).
- //
- virtual void
- traverse_pointer (semantics::data_member&, semantics::class_&);
-
- virtual void
- traverse_points_to (semantics::data_member&, semantics::class_&);
-
- // If you override this function, you can call the base to traverse
- // bases and members. The first argument is the data member and can
- // be NULL if we are traversing the root type or a base. The second
- // argument is the actual composite type, which is not necessarily
- // the same as the member type.
- //
- virtual void
- traverse_composite (semantics::data_member*, semantics::class_&);
-
- // If you override this function, you can call the base to traverse
- // bases and members.
- //
- virtual void
- traverse_object (semantics::class_&);
-
- // If you override this function, you can call the base to traverse
- // members.
- //
- virtual void
- traverse_view (semantics::class_&);
-
- // Called after the last column, provided at least one column hasn't
- // been ignored.
- //
- virtual void
- flush ();
-
- virtual bool
- section_test (data_member_path const&);
-
- // Start/end traversal callbacks.
- //
- virtual void
- traverse_pre (semantics::nameable&);
-
- virtual void
- traverse_post (semantics::nameable&);
-
-public:
- object_columns_base (bool first = true,
- column_prefix const& cp = column_prefix (),
- object_section* section = 0)
- : column_prefix_ (cp),
- section_ (section),
- root_ (0),
- traverse_poly_base_ (false),
- first_ (first),
- top_level_ (true),
- member_ (*this)
- {
- init ();
- }
-
- object_columns_base (bool first,
- bool traverse_poly_base,
- object_section* section = 0)
- : section_ (section),
- root_ (0),
- traverse_poly_base_ (traverse_poly_base),
- first_ (first),
- top_level_ (true),
- member_ (*this)
- {
- init ();
- }
-
- object_columns_base (object_columns_base const& x)
- : context (), //@@ -Wextra
- column_prefix_ (x.column_prefix_),
- section_ (x.section_),
- root_ (0),
- traverse_poly_base_ (x.traverse_poly_base_),
- first_ (x.first_),
- top_level_ (true),
- member_ (*this)
- {
- init ();
- }
-
- virtual void
- traverse (semantics::class_&);
-
- // Traverse a data member with type, which can be a simple or composite
- // value type, or an object pointer (with a simple or composite id).
- //
- virtual void
- traverse (semantics::data_member&);
-
- virtual void
- traverse (semantics::data_member& m, column_prefix const& cp)
- {
- column_prefix op (column_prefix_);
- column_prefix_ = cp;
- traverse (m);
- column_prefix_ = op;
- }
-
- virtual void
- traverse (data_member_path& mp)
- {
- data_member_path op (member_path_);
- member_path_ = mp;
- traverse (*mp.back (), column_prefix (mp));
- member_path_ = op;
- }
-
- // Should only be used for containers.
- //
- virtual void
- traverse (semantics::data_member&,
- semantics::type&,
- string const& key_prefix,
- string const& default_name,
- semantics::class_* top_object = 0); // If not 0, switch top object.
-
-protected:
- string key_prefix_;
- string default_name_;
-
- column_prefix column_prefix_;
-
- data_member_path member_path_;
- data_member_scope member_scope_;
-
- object_section* section_;
-
-protected:
- semantics::data_member*
- id () const
- {
- if (root_ != 0)
- return root_id_ ? root_ : 0; // Cannot have ids below root.
- else
- {
- assert (!member_path_.empty ());
- return context::id (member_path_);
- }
- }
-
- string
- column_type ()
- {
- if (member_path_.empty ())
- {
- assert (root_ != 0);
- return context::column_type (*root_, key_prefix_);
- }
- else
- return context::column_type (
- member_path_, key_prefix_, root_ != 0 && (root_id_ || root_op_));
- }
-
- bool
- null () const
- {
- return (root_ != 0 && root_null_) || context::null (member_path_);
- }
-
-private:
- semantics::data_member* root_; // Root member if traversing from a member.
- bool root_id_; // True if traversing root as object id.
- bool root_op_; // True if traversing root as object pointer.
- bool root_null_; // True if root is null-able.
-
-private:
- void
- init ()
- {
- *this >> names_ >> member_;
- *this >> inherits_ >> *this;
- }
-
-private:
- virtual void
- traverse_member (semantics::data_member&, semantics::type&);
-
- struct member: traversal::data_member, context
- {
- member (object_columns_base& oc): oc_ (oc) {}
-
- virtual void
- traverse (semantics::data_member&);
-
- public:
- object_columns_base& oc_;
- };
-
- bool traverse_poly_base_;
-
- bool first_;
- bool top_level_;
-
- member member_;
- traversal::names names_;
- traversal::inherits inherits_;
-};
-
-struct object_columns_list: object_columns_base
-{
- typedef object_columns_list base;
-
- object_columns_list (bool ignore_inverse = true)
- : ignore_inverse_ (ignore_inverse)
- {
- }
-
- object_columns_list (column_prefix const& cp, bool ignore_inverse = true)
- : object_columns_base (true, cp), ignore_inverse_ (ignore_inverse)
- {
- }
-
- struct column
- {
- column (std::string const& n,
- std::string const& t,
- semantics::data_member& m)
- : name (n), type (t), member (&m)
- {
- }
-
- std::string name;
- std::string type;
- semantics::data_member* member;
- };
-
- typedef std::vector<column> columns;
- typedef columns::const_iterator iterator;
-
- iterator
- begin () const {return columns_.begin ();}
-
- iterator
- end () const {return columns_.end ();}
-
- columns::size_type
- size () const {return columns_.size ();}
-
- virtual void
- traverse_pointer (semantics::data_member&, semantics::class_&);
-
- virtual bool
- traverse_column (semantics::data_member&, string const&, bool);
-
-private:
- bool ignore_inverse_;
- columns columns_;
-};
-
-// Traverse objects, views, and composite values that are class template
-// instantiations.
-//
-struct typedefs: traversal::typedefs, context
-{
- typedefs (bool traverse_included)
- : included_ (traverse_included)
- {
- }
-
- virtual void
- traverse (semantics::typedefs&);
-
- // Returns true if we should traverse this typedef.
- //
- bool
- check (semantics::typedefs&);
-
-private:
- bool included_;
-};
-
-// Other common parts.
-//
-#include <odb/common-query.hxx>
-
-#endif // ODB_COMMON_HXX