[Saga-devel] saga SVN commit 3395: /trunk/saga/impl/engine/
Hartmut Kaiser
hkaiser at cct.lsu.edu
Wed Jan 28 07:27:03 CST 2009
> Quoting [hkaiser at cct.lsu.edu] (Jan 27 2009):
> >
> > User: hkaiser
> > Date: 2009/01/27 10:13 AM
> >
> > Modified:
> > /trunk/saga/impl/engine/
> > session.cpp, session.hpp
> >
> > Log:
> > Added possibility to use vector attributes for the proto-context
> initialization.
> > Context objects now have extensible attribute set.
>
> Sorry for not looking at the diff - but is that on API or on
> CPI level? On API level, context should have
> non-extensible attributes, and there are no vector
> attributes defined...
That's on CPI level but has impact on the API as well. I'm fully aware of
the spec's limitations here, but I implemented the vector
attributes/extensible attributes for contexts based on Paul's request. He
seems to have a use case for that.
Paul/Andre, could you please discuss this?
Regards Hartmut
>
> Cheers, Andre.
>
>
> > File Changes:
> >
> > Directory: /trunk/saga/impl/engine/
> > ===================================
> >
> > File [modified]: session.cpp
> > Delta lines: +73 -15
> > ===================================================================
> > --- trunk/saga/impl/engine/session.cpp 2009-01-26 13:32:30 UTC (rev
> 3394)
> > +++ trunk/saga/impl/engine/session.cpp 2009-01-27 16:13:17 UTC (rev
> 3395)
> > @@ -16,6 +16,13 @@
> >
> ///////////////////////////////////////////////////////////////////////
> ////
> > struct base_context_list
> > {
> > + typedef
> > + std::vector<std::pair<std::string, std::string> >
> > + proto_context_type;
> > + typedef
> > + std::vector<std::pair<std::string,
> std::vector<std::string> > >
> > + vector_proto_context_type;
> > +
> > base_context_list(saga::impl::session const* s)
> > : session_(s)
> > {}
> > @@ -39,11 +46,16 @@
> > SAGA_THROW_VERBATIM(session_, "Not implemented",
> saga::NotImplemented);
> > }
> > virtual void
> > - add_proto_context(
> > - std::vector<std::pair<std::string, std::string> > const&
> entries)
> > + add_proto_context(proto_context_type const& entries)
> > {
> > SAGA_THROW_VERBATIM(session_, "Not implemented",
> saga::NotImplemented);
> > }
> > + virtual void
> > + add_proto_context(proto_context_type const& entries,
> > + vector_proto_context_type const& vector_entries)
> > + {
> > + SAGA_THROW_VERBATIM(session_, "Not implemented",
> saga::NotImplemented);
> > + }
> >
> > saga::impl::session const* session_;
> > };
> > @@ -63,14 +75,22 @@
> > }
> >
> > // make a temporary copy of the keys and values
> > - void add_proto_context(
> > - std::vector<std::pair<std::string, std::string> > const&
> entries)
> > + void add_proto_context(proto_context_type const& entries)
> > {
> > entries_.push_back(entries);
> > + vector_entries_.push_back(vector_proto_context_type());
> > }
> >
> > - typedef std::vector<std::pair<std::string, std::string> >
> proto_context_type;
> > + // make a temporary copy of the keys and values
> > + void add_proto_context(proto_context_type const& entries,
> > + vector_proto_context_type const& vector_entries)
> > + {
> > + entries_.push_back(entries);
> > + vector_entries_.push_back(vector_entries);
> > + }
> > +
> > std::vector<proto_context_type> entries_;
> > + std::vector<vector_proto_context_type> vector_entries_;
> > };
> >
> >
> ///////////////////////////////////////////////////////////////////////
> ////
> > @@ -93,11 +113,13 @@
> > {
> > saga::context c;
> > try {
> > + // add non-vector attributes
> > std::vector<std::pair<std::string, std::string>
> >& entries =
> > protolist->entries_[i];
> >
> > bool has_type = false;
> > - for (std::size_t k = 0; k < entries.size(); ++k)
> {
> > + for (std::size_t k = 0; k < entries.size(); ++k)
> > + {
> > if (entries[k].first ==
> saga::attributes::context_type)
> > has_type = true;
> >
> > @@ -108,6 +130,16 @@
> > "List of attribute keys does not contain
> the context's "
> > "'type'", saga::BadParameter);
> > }
> > +
> > + // add vector_attributes
> > + vector_proto_context_type& vector_entries =
> > + protolist->vector_entries_[i];
> > + for (std::size_t v = 0; v <
> vector_entries.size(); ++v)
> > + {
> > +
> c.set_vector_attribute(vector_entries[v].first,
> > + vector_entries[v].second);
> > + }
> > +
> > c.set_defaults();
> > }
> > catch (saga::exception const&) {
> > @@ -181,10 +213,14 @@
> > std::vector<saga::context> session::list_contexts() const
> > {
> > mutex_type::scoped_lock lock(mtx_);
> > - if (NULL == contexts_)
> > + if (NULL == contexts_) {
> > contexts_ = new context_list(this);
> > - else if (contexts_->is_proto_context())
> > + }
> > + else if (contexts_->is_proto_context()) {
> > + base_context_list* oldctxs = contexts_;
> > contexts_ = new context_list(this,
> (proto_context_list*)contexts_);
> > + delete oldctxs;
> > + }
> >
> > return ((context_list*)contexts_)->contexts_; // make a
> copy
> > }
> > @@ -197,10 +233,14 @@
> > {
> > // create context list if needed
> > mutex_type::scoped_lock lock(mtx_);
> > - if (NULL == contexts_)
> > - contexts_ = new context_list(this);
> > - else if (contexts_->is_proto_context())
> > - contexts_ = new context_list(this,
> (proto_context_list*)contexts_);
> > + if (NULL == contexts_) {
> > + contexts_ = new context_list(this);
> > + }
> > + else if (contexts_->is_proto_context()) {
> > + base_context_list* oldctxs = contexts_;
> > + contexts_ = new context_list(this,
> (proto_context_list*)contexts_);
> > + delete oldctxs;
> > + }
> >
> > // can we keep defaults?
> > if ( use_defaults )
> > @@ -226,8 +266,8 @@
> >
> > void session::add_context (saga::context const& c)
> > {
> > - // add context, but do not keep defaults
> > - add_context (c, false);
> > + // add context, but do not keep defaults
> > + add_context (c, false);
> > }
> >
> > void session::remove_context (saga::context const& c)
> > @@ -237,8 +277,11 @@
> > SAGA_THROW("remove_context: context does not exist",
> > saga::DoesNotExist);
> > }
> > - else if (contexts_->is_proto_context())
> > + else if (contexts_->is_proto_context()) {
> > + base_context_list* oldctxs = contexts_;
> > contexts_ = new context_list(this,
> (proto_context_list*)contexts_);
> > + delete oldctxs;
> > + }
> >
> > contexts_->remove_context(c);
> > }
> > @@ -257,6 +300,21 @@
> > contexts_->add_proto_context(entries);
> > }
> >
> > + void session::add_proto_context (
> > + std::vector<std::pair<std::string, std::string> > const&
> entries,
> > + std::vector<std::pair<std::string, std::vector<std::string>
> > > const& vector_entries)
> > + {
> > + if (NULL == contexts_)
> > + contexts_ = new proto_context_list(this);
> > +
> > + if (!contexts_->is_proto_context()) {
> > + SAGA_THROW("Out of order execution of
> 'add_proto_context'. This "
> > + "should be called during adaptor construction
> only.",
> > + saga::NoSuccess);
> > + }
> > + contexts_->add_proto_context(entries, vector_entries);
> > + }
> > +
> > void session::release_contexts()
> > {
> > mutex_type::scoped_lock lock(mtx_);
> >
> > File [modified]: session.hpp
> > Delta lines: +4 -0
> > ===================================================================
> > --- trunk/saga/impl/engine/session.hpp 2009-01-26 13:32:30 UTC (rev
> 3394)
> > +++ trunk/saga/impl/engine/session.hpp 2009-01-27 16:13:17 UTC (rev
> 3395)
> > @@ -107,6 +107,10 @@
> > SAGA_EXPORT void add_proto_context (
> > std::vector<std::pair<std::string, std::string> > const&
> entries);
> >
> > + SAGA_EXPORT void add_proto_context (
> > + std::vector<std::pair<std::string, std::string> > const&
> entries,
> > + std::vector<std::pair<std::string,
> std::vector<std::string> > > const& vector_entries);
> > +
> > /**
> > * Returns the context attached to the session
> > *
> >
> > _______________________________________________
> > saga-devel mailing list
> > saga-devel at cct.lsu.edu
> > https://mail.cct.lsu.edu/mailman/listinfo/saga-devel
>
>
>
> --
> Nothing is ever easy.
> _______________________________________________
> saga-devel mailing list
> saga-devel at cct.lsu.edu
> https://mail.cct.lsu.edu/mailman/listinfo/saga-devel
More information about the saga-devel
mailing list