2 #ifndef vsl_clipon_binary_loader_hxx_ 3 #define vsl_clipon_binary_loader_hxx_ 12 # include <vcl_msvc_warnings.h> 15 template<
class BaseClass,
class BaseClassIO>
18 if (instance_ ==
nullptr)
29 template<
class BaseClass,
class BaseClassIO>
32 object_io_.push_back(b.clone());
36 template<
class BaseClass,
class BaseClassIO>
40 while ((i<object_io_.size()) && !(object_io_[i]->target_classname()==name))
43 if (i>=object_io_.size())
45 std::cerr <<
"vsl_clipon_binary_loader<BaseClass>::index_for_name: " 46 <<
"class name <" << name <<
"> not in list of loaders\n" 47 << object_io_.size()<<
" valid loaders available for\n";
48 for (
unsigned int j=0; j<object_io_.size(); ++j)
49 std::cerr << object_io_[j]->target_classname() << std::endl;
57 template<
class BaseClass,
class BaseClassIO>
61 for (i=0; (i<object_io_.size()) && !(object_io_[i]->is_io_for(b)); ++i)
64 if (i>=object_io_.size())
66 std::cerr <<
"vsl_clipon_binary_loader<BaseClass>::io_for_class: " 67 <<
"Unable to determine suitable loader.\n" 68 << object_io_.size()<<
" valid loaders available for\n";
69 for (
unsigned int j=0; j<object_io_.size(); ++j)
70 std::cerr << object_io_[j]->target_classname() << std::endl;
74 return *object_io_[i];
78 template<
class BaseClass,
class BaseClassIO>
81 return *object_io_[index_for_name(name)];
85 template<
class BaseClass,
class BaseClassIO>
88 for (
unsigned int i=0; i<object_io_.size(); ++i)
93 template<
class BaseClass,
class BaseClassIO>
100 template<
class BaseClass,
class BaseClassIO>
109 if (name==
"VSL_NULL_PTR")
116 const BaseClassIO& io = object_io(name);
118 io.b_read_by_base(is,*b);
122 template<
class BaseClass,
class BaseClassIO>
131 const BaseClassIO& io = io_for_class(*b);
133 io.b_write_by_base(os,*b);
137 template<
class BaseClass,
class BaseClassIO>
142 os<<
"No object defined.";
146 const BaseClassIO& io = io_for_class(*b);
147 io.print_summary_by_base(os,*b);
150 template <
class B,
class IO>
153 #define VSL_CLIPON_BINARY_LOADER_INSTANTIATE(B,IO) \ 154 template class vsl_clipon_binary_loader<B, IO >; 156 #endif // vsl_clipon_binary_loader_hxx_ A binary output adaptor for any std::ostream.
void vsl_b_write(vsl_b_ostream &os, char n)
Write char to vsl_b_ostream.
void register_this()
Register this, so it can be deleted by vsl_delete_all_loaders();.
static vsl_clipon_binary_loader< BaseClass, BaseClassIO > & instance()
Returns the instance variable for the singleton.
void write_object(vsl_b_ostream &is, const BaseClass *b)
Writes object to stream given base class pointer.
const std::vector< BaseClassIO * > & object_io() const
Return current list of individual IO objects.
void print_object_summary(std::ostream &os, const BaseClass *b)
Prints summary of object state to stream given base class pointer.
~vsl_clipon_binary_loader() override
Destructor.
void add(const BaseClassIO &b)
Add example object to list of those that can be loaded.
int index_for_name(const std::string &name) const
Return index associated with given object name.
const BaseClassIO & io_for_class(const BaseClass &b) const
Return IO object that can deal with given class.
void make_empty()
Remove all example objects.
void vsl_b_read(vsl_b_istream &is, char &n)
Read char from vsl_b_istream.
An adaptor for any std::istream to make it suitable for binary input.
void read_object(vsl_b_istream &is, BaseClass *&b)
Reads object from stream and sets base class pointer.
Class to load objects by baseclass pointer using ‘clipon’ classes.