From e23e5f43a97c72f1bf0dd240376bf89ff19f356c Mon Sep 17 00:00:00 2001 From: Josh Blum Date: Fri, 5 Jul 2013 14:53:22 -0700 Subject: gras: save callable work compiling w/ minor unit test --- lib/CMakeLists.txt | 1 + lib/callable.cpp | 45 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+) create mode 100644 lib/callable.cpp (limited to 'lib') diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index ab5d886..38216b3 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -41,6 +41,7 @@ list(APPEND GRAS_SOURCES ${apology_sources}) ######################################################################## list(APPEND GRAS_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/debug.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/callable.cpp ${CMAKE_CURRENT_SOURCE_DIR}/element.cpp ${CMAKE_CURRENT_SOURCE_DIR}/element_uid.cpp ${CMAKE_CURRENT_SOURCE_DIR}/sbuffer.cpp diff --git a/lib/callable.cpp b/lib/callable.cpp new file mode 100644 index 0000000..a6417bb --- /dev/null +++ b/lib/callable.cpp @@ -0,0 +1,45 @@ +// Copyright (C) by Josh Blum. See LICENSE.txt for licensing information. + +#include +#include +#include +#include + +using namespace gras; + +typedef std::map > CallableRegistry; + +Callable::Callable(void) +{ + _call_registry = new CallableRegistry(); +} + +Callable::~Callable(void) +{ + CallableRegistry *cr = reinterpret_cast(_call_registry); + delete cr; +} + +void Callable::_register_call(const std::string &key, void *entry) +{ + CallableRegistry *cr = reinterpret_cast(_call_registry); + (*cr)[key].reset(reinterpret_cast(entry)); +} + +PMCC Callable::_handle_call(const std::string &key, const std::vector &args) +{ + CallableRegistry *cr = reinterpret_cast(_call_registry); + boost::shared_ptr entry = (*cr)[key]; + if (not entry) throw std::invalid_argument("Callable: no method registered for key: " + key); + return entry->call(args); +} + +CallableRegistryEntry::CallableRegistryEntry(void) +{ + //NOP +} + +CallableRegistryEntry::~CallableRegistryEntry(void) +{ + //NOP +} -- cgit