// Copyright (c) 2005-2007 Andre Merzky (andre@merzky.net) // Copyright (c) 2005-2007 Hartmut Kaiser (hartmut.kaiser@gmail.com) // Copyright (c) 2005 Michel Zandstra (michelzandstra@gmail.com) // // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #include #include #include /////////////////////////////////////////////////////////////////////////////// namespace saga { namespace impl { // saga:: object interface: clone this session instance saga::object session::clone() const { saga::session s; context_list_type::const_iterator end = contexts_.end(); for (context_list_type::const_iterator it = contexts_.begin(); it != end; ++it) { s.add_context(*it); } return s; } // maintain internal list of context's std::list session::list_contexts (saga::context::type t) const { if (t == saga::context::Any) return contexts_; std::list ctxs; std::list::const_iterator end = contexts_.end(); for (std::list::const_iterator it = contexts_.begin(); it != end; ++it) { if (t == (*it).get_ctype()) ctxs.push_back(*it); } return ctxs; } void session::add_context (saga::context const& c) { context_list_type::iterator it = std::find(contexts_.begin(), contexts_.end(), c); if (it == contexts_.end()) contexts_.push_back (c.clone()); } void session::remove_context (saga::context const& c) { context_list_type::iterator it = std::find(contexts_.begin(), contexts_.end(), c); if (it == contexts_.end()) { SAGA_THROW("remove_context: context does not exist", saga::DoesNotExist); } contexts_.erase (it); } } // namespace impl } // namespace saga