crabmeat 1.0
Loading...
Searching...
No Matches
kfactory.h
1
8
9#ifndef CBM_KERNELFACTORY_H_
10#define CBM_KERNELFACTORY_H_
11
12#include "crabmeat-common.h"
13#include "kernel/kbase.h"
14#include "memory/cbm_factorystore.h"
15#include <string>
16
17#define kernel_factory_prefix "kernel"
18
19namespace cbm {
20
21class kernel_t;
22struct CBM_API kernelfactory_base_t
23{
24 public:
25 kernelfactory_base_t()
26 {}
27 virtual ~kernelfactory_base_t() { }
28
29 virtual char const * name() const = 0;
30
31 virtual kernel_t * construct(
32 lid_t const &) const = 0;
33 virtual void destroy(
34 kernel_t *) const = 0;
35};
36
37typedef cbm::factorystoreregister_t< kernelfactory_base_t > kernelfactoryregister_t;
38
39template < class _K >
40struct kernelfactory_t : public kernelfactory_base_t
41{
42 virtual ~kernelfactory_t();
43
44 char const * name() const;
45
46 kernel_t * construct( lid_t const &) const;
47 void destroy( kernel_t *) const;
48
49 private:
50 std::string m_name;
51
52 public:
53 kernelfactory_t< _K >( char const *);
54};
55
56} /* namespace cbm */
57
58template < class _K >
59cbm::kernelfactory_t< _K >::kernelfactory_t(
60 char const * _kname)
61 : kernelfactory_base_t(),
62 m_name(( _kname) ? _kname : "")
63{
64 kernelfactoryregister_t::register_factory( kernel_factory_prefix, _kname, this);
65}
66
67template < class _K >
68cbm::kernelfactory_t< _K >::~kernelfactory_t< _K >()
69{
70}
71
72template < class _K >
73char const *
74cbm::kernelfactory_t< _K >::name()
75const
76{
77 return this->m_name.c_str();
78}
79
80template < class _K >
81cbm::kernel_t *
82cbm::kernelfactory_t< _K >::construct(
83 lid_t const & _id)
84const
85{
86 return static_cast< cbm::kernel_t * >( _K::new_instance( _id));
87}
88template < class _K >
89void
90cbm::kernelfactory_t< _K >::destroy(
91 kernel_t * _kernel)
92const
93{
94 if ( _kernel)
95 {
96 _kernel->delete_instance();
97 }
98}
99
100
101#endif /* !CBM_KERNELFACTORY_H_ */
102
The "Service Registry" holds information about available services (e.g., models, readers,...
Definition Lresources.h:51