// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- // vim: ts=8 sw=2 smarttab /* * Ceph distributed storage system * * Copyright (C) 2013,2014 Cloudwatt * Copyright (C) 2014 Red Hat * * Author: Loic Dachary * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * */ #ifndef CEPH_COMMON_PLUGINREGISTRY_H #define CEPH_COMMON_PLUGINREGISTRY_H #include "common/Mutex.h" class CephContext; extern "C" { const char *__ceph_plugin_version(); int __ceph_plugin_init(CephContext *cct, const std::string& type, const std::string& name); } namespace ceph { class Plugin { public: void *library; CephContext *cct; explicit Plugin(CephContext *cct) : library(NULL), cct(cct) {} virtual ~Plugin() {} }; class PluginRegistry { public: CephContext *cct; Mutex lock; bool loading; bool disable_dlclose; std::map > plugins; explicit PluginRegistry(CephContext *cct); ~PluginRegistry(); int add(const std::string& type, const std::string& name, Plugin *factory); int remove(const std::string& type, const std::string& name); Plugin *get(const std::string& type, const std::string& name); Plugin *get_with_load(const std::string& type, const std::string& name); int load(const std::string& type, const std::string& name); int preload(); int preload(const std::string& type); }; } #endif