summaryrefslogtreecommitdiff
path: root/odb/context.cxx
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2010-11-18 14:58:20 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2010-11-18 14:58:20 +0200
commitec780ddf732bbed6cc8fca711d01bfc38b53a435 (patch)
treeae792a5f418ffa25ef6a5c206040fa83aa2a9263 /odb/context.cxx
parentaf61d91ba3ff1736a6521f96d2df01c3ec9e82ef (diff)
Split object image binding into in and out variants
Diffstat (limited to 'odb/context.cxx')
-rw-r--r--odb/context.cxx33
1 files changed, 24 insertions, 9 deletions
diff --git a/odb/context.cxx b/odb/context.cxx
index 285d610..436b60f 100644
--- a/odb/context.cxx
+++ b/odb/context.cxx
@@ -305,21 +305,23 @@ namespace
{
struct column_count_impl: object_members_base
{
- column_count_impl ()
- : count_ (0)
+ column_count_impl (bool out)
+ : out_ (out), count_ (0)
{
}
virtual void
traverse (semantics::class_& c)
{
- if (c.count ("column-count"))
- count_ += c.get<size_t> ("column-count");
+ char const* key (out_ ? "out-column-count" : "in-column-count");
+
+ if (c.count (key))
+ count_ += c.get<size_t> (key);
else
{
size_t n (count_);
object_members_base::traverse (c);
- c.set ("column-count", count_ - n);
+ c.set (key, count_ - n);
}
}
@@ -330,20 +332,33 @@ namespace
}
private:
+ bool out_;
size_t count_;
};
}
size_t context::
-column_count (semantics::class_& c)
+in_column_count (semantics::class_& c)
+{
+ if (!c.count ("in-column-count"))
+ {
+ column_count_impl t (false);
+ t.traverse (c);
+ }
+
+ return c.get<size_t> ("in-column-count");
+}
+
+size_t context::
+out_column_count (semantics::class_& c)
{
- if (!c.count ("column-count"))
+ if (!c.count ("out-column-count"))
{
- column_count_impl t;
+ column_count_impl t (true);
t.traverse (c);
}
- return c.get<size_t> ("column-count");
+ return c.get<size_t> ("out-column-count");
}
namespace