1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129
|
// This is mul/mbl/mbl_data_collector_list.txx
#ifndef mbl_data_collector_list_txx_
#define mbl_data_collector_list_txx_
//:
// \file
#include "mbl_data_collector_list.h"
#include <vcl_cassert.h>
#include <vsl/vsl_binary_loader.h>
#include <vsl/vsl_vector_io.h>
//=======================================================================
// Dflt ctor
//=======================================================================
template<class T>
mbl_data_collector_list<T>::mbl_data_collector_list()
{
}
//=======================================================================
// Destructor
//=======================================================================
template<class T>
mbl_data_collector_list<T>::~mbl_data_collector_list()
{
}
//: Clear any stored data
template<class T>
void mbl_data_collector_list<T>::clear()
{
data_.resize(0);
}
//: Hint about how many examples to expect
template<class T>
void mbl_data_collector_list<T>::set_n_samples(int n)
{
data_.reserve(n);
}
//: Record given object
template<class T>
void mbl_data_collector_list<T>::record(const T& d)
{
data_.push_back(d);
}
//: Return object describing stored data
template<class T>
mbl_data_wrapper<T >& mbl_data_collector_list<T>::data_wrapper()
{
if (data_.size() > 0)
{
// Check assumption that vcl_vectors store their data in a contiguous block of memory
assert(&data_[data_.size()-1] + 1 == &data_[0] + data_.size());
wrapper_.set(&data_[0],data_.size()); // not data_.begin() since set() expects T*, not vector_iterator
}
else
wrapper_.set(0, 0);
return wrapper_;
}
template <class T>
bool mbl_data_collector_list<T>::is_class(vcl_string const& s) const
{
return s==mbl_data_collector_list<T>::is_a() || mbl_data_collector<T>::is_class(s);
}
//=======================================================================
template <class T>
short mbl_data_collector_list<T>::version_no() const
{
return 1;
}
//=======================================================================
template <class T>
mbl_data_collector_base* mbl_data_collector_list<T>::clone() const
{
return new mbl_data_collector_list<T>(*this);
}
template <class T>
void mbl_data_collector_list<T>::print_summary(vcl_ostream& os) const
{
os<<"Number stored: "<<data_.size()<<'\n';
}
template <class T>
void mbl_data_collector_list<T>::b_write(vsl_b_ostream& bfs) const
{
vsl_b_write(bfs, version_no());
vsl_b_write(bfs, data_);
}
template <class T>
void mbl_data_collector_list<T>::b_read(vsl_b_istream& bfs)
{
if (!bfs) return;
short version;
vsl_b_read(bfs,version);
switch (version)
{
case (1):
vsl_b_read(bfs, data_);
break;
default:
vcl_cerr << "I/O ERROR: mbl_data_collector_list<T>::b_read(vsl_b_istream&)\n";
vcl_cerr << " Unknown version number "<< version << "\n";
bfs.is().clear(vcl_ios::badbit); // Set an unrecoverable IO error on stream
return;
}
}
#define MBL_DATA_COLLECTOR_LIST_INSTANTIATE(T) \
VCL_DEFINE_SPECIALIZATION vcl_string mbl_data_collector_list<T >::is_a() const \
{ return vcl_string("mbl_data_collector_list<" #T ">"); }\
template class mbl_data_collector_list< T >
#endif // mbl_data_collector_list_txx_
|