Skip to content
Snippets Groups Projects
ipaaca-iuinterface.cc 4.46 KiB
Newer Older
  • Learn to ignore specific revisions
  • /*
     * This file is part of IPAACA, the
     *  "Incremental Processing Architecture
     *   for Artificial Conversational Agents".
     *
     * Copyright (c) 2009-2015 Social Cognitive Systems Group
     *                         (formerly the Sociable Agents Group)
     *                         CITEC, Bielefeld University
     *
     * http://opensource.cit-ec.de/projects/ipaaca/
     * http://purl.org/net/ipaaca
     *
     * This file may be licensed under the terms of of the
     * GNU Lesser General Public License Version 3 (the ``LGPL''),
     * or (at your option) any later version.
     *
     * Software distributed under the License is distributed
     * on an ``AS IS'' basis, WITHOUT WARRANTY OF ANY KIND, either
     * express or implied. See the LGPL for the specific language
     * governing rights and limitations.
     *
     * You should have received a copy of the LGPL along with this
     * program. If not, go to http://www.gnu.org/licenses/lgpl.html
     * or write to the Free Software Foundation, Inc.,
     * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
     *
     * The development of this software was supported by the
     * Excellence Cluster EXC 277 Cognitive Interaction Technology.
     * The Excellence Cluster EXC 277 is a grant of the Deutsche
     * Forschungsgemeinschaft (DFG) in the context of the German
     * Excellence Initiative.
     */
    
    #include <ipaaca/ipaaca.h>
    
    namespace ipaaca {
    
    using namespace rsb;
    using namespace rsb::filter;
    using namespace rsb::converter;
    using namespace rsb::patterns;
    
    IPAACA_EXPORT std::ostream& operator<<(std::ostream& os, const IUInterface& obj)//{{{
    {
    	os << "IUInterface(uid='" << obj.uid() << "'";
    	os << ", category='" << obj.category() << "'";
    	os << ", revision=" << obj.revision();
    	os << ", committed=" << (obj.committed()?"True":"False");
    	os << ", owner_name='" << obj.owner_name() << "'";
    	os << ", payload=";
    	os << obj.const_payload();
    	os << ", links=";
    	os << obj._links;
    	os << ")";
    	return os;
    }
    //}}}
    
    // IUInterface//{{{
    
    IPAACA_EXPORT IUInterface::IUInterface()
    : _buffer(NULL), _committed(false), _retracted(false)
    {
    }
    
    IPAACA_EXPORT void IUInterface::_set_uid(const std::string& uid) {
    	if (_uid != "") {
    		throw IUAlreadyHasAnUIDError();
    	}
    	_uid = uid;
    }
    
    
    IPAACA_EXPORT void IUInterface::_set_buffer(Buffer* buffer) {
    
    	if (_buffer) {
    		throw IUAlreadyInABufferError();
    	}
    	_buffer = buffer;
    
    }
    
    IPAACA_EXPORT void IUInterface::_set_owner_name(const std::string& owner_name) {
    	if (_owner_name != "") {
    		throw IUAlreadyHasAnOwnerNameError();
    	}
    	_owner_name = owner_name;
    }
    
    /// set the buffer pointer and the owner names of IU and Payload
    
    IPAACA_EXPORT void IUInterface::_associate_with_buffer(Buffer* buffer) {
    
    	_set_buffer(buffer); // will throw if already set
    	_set_owner_name(buffer->unique_name());
    	payload()._set_owner_name(buffer->unique_name());
    }
    
    /// C++-specific convenience function to add one single link
    IPAACA_EXPORT void IUInterface::add_link(const std::string& type, const std::string& target, const std::string& writer_name)
    {
    	LinkMap none;
    	LinkMap add;
    	add[type].insert(target);
    	_modify_links(true, add, none, writer_name);
    	_add_and_remove_links(add, none);
    }
    /// C++-specific convenience function to remove one single link
    IPAACA_EXPORT void IUInterface::remove_link(const std::string& type, const std::string& target, const std::string& writer_name)
    {
    	LinkMap none;
    	LinkMap remove;
    	remove[type].insert(target);
    	_modify_links(true, none, remove, writer_name);
    	_add_and_remove_links(none, remove);
    }
    
    IPAACA_EXPORT void IUInterface::add_links(const std::string& type, const LinkSet& targets, const std::string& writer_name)
    {
    	LinkMap none;
    	LinkMap add;
    	add[type] = targets;
    	_modify_links(true, add, none, writer_name);
    	_add_and_remove_links(add, none);
    }
    
    IPAACA_EXPORT void IUInterface::remove_links(const std::string& type, const LinkSet& targets, const std::string& writer_name)
    {
    	LinkMap none;
    	LinkMap remove;
    	remove[type] = targets;
    	_modify_links(true, none, remove, writer_name);
    	_add_and_remove_links(none, remove);
    }
    
    IPAACA_EXPORT void IUInterface::modify_links(const LinkMap& add, const LinkMap& remove, const std::string& writer_name)
    {
    	_modify_links(true, add, remove, writer_name);
    	_add_and_remove_links(add, remove);
    }
    
    IPAACA_EXPORT void IUInterface::set_links(const LinkMap& links, const std::string& writer_name)
    {
    	LinkMap none;
    	_modify_links(false, links, none, writer_name);
    	_replace_links(links);
    }
    
    IPAACA_HEADER_EXPORT const std::string& IUInterface::channel()
    {
    	if (_buffer == NULL)
    		throw IUUnpublishedError();
    	else
    		return _buffer->channel();
    
    }
    
    //}}}
    
    } // of namespace ipaaca