00001 // This is mul/mbl/mbl_data_collector_list.txx 00002 #ifndef mbl_data_collector_list_txx_ 00003 #define mbl_data_collector_list_txx_ 00004 //: 00005 // \file 00006 00007 #include "mbl_data_collector_list.h" 00008 00009 #include <vcl_cassert.h> 00010 #include <vsl/vsl_binary_loader.h> 00011 #include <vsl/vsl_vector_io.h> 00012 00013 //======================================================================= 00014 // Dflt ctor 00015 //======================================================================= 00016 00017 template<class T> 00018 mbl_data_collector_list<T>::mbl_data_collector_list() 00019 { 00020 } 00021 00022 //======================================================================= 00023 // Destructor 00024 //======================================================================= 00025 00026 template<class T> 00027 mbl_data_collector_list<T>::~mbl_data_collector_list() 00028 { 00029 } 00030 00031 //: Clear any stored data 00032 template<class T> 00033 void mbl_data_collector_list<T>::clear() 00034 { 00035 data_.resize(0); 00036 } 00037 00038 //: Hint about how many examples to expect 00039 template<class T> 00040 void mbl_data_collector_list<T>::set_n_samples(int n) 00041 { 00042 data_.reserve(n); 00043 } 00044 00045 //: Record given object 00046 template<class T> 00047 void mbl_data_collector_list<T>::record(const T& d) 00048 { 00049 data_.push_back(d); 00050 } 00051 00052 //: Return object describing stored data 00053 template<class T> 00054 mbl_data_wrapper<T >& mbl_data_collector_list<T>::data_wrapper() 00055 { 00056 if (data_.size() > 0) 00057 { 00058 // Check assumption that vcl_vectors store their data in a contiguous block of memory 00059 assert(&data_[data_.size()-1] + 1 == &data_[0] + data_.size()); 00060 00061 wrapper_.set(&data_[0],data_.size()); // not data_.begin() since set() expects T*, not vector_iterator 00062 } 00063 else 00064 wrapper_.set(0, 0); 00065 return wrapper_; 00066 } 00067 00068 00069 template <class T> 00070 bool mbl_data_collector_list<T>::is_class(vcl_string const& s) const 00071 { 00072 return s==mbl_data_collector_list<T>::is_a() || mbl_data_collector<T>::is_class(s); 00073 } 00074 00075 //======================================================================= 00076 00077 template <class T> 00078 short mbl_data_collector_list<T>::version_no() const 00079 { 00080 return 1; 00081 } 00082 00083 //======================================================================= 00084 00085 template <class T> 00086 mbl_data_collector_base* mbl_data_collector_list<T>::clone() const 00087 { 00088 return new mbl_data_collector_list<T>(*this); 00089 } 00090 00091 template <class T> 00092 void mbl_data_collector_list<T>::print_summary(vcl_ostream& os) const 00093 { 00094 os<<"Number stored: "<<data_.size()<<'\n'; 00095 } 00096 00097 template <class T> 00098 void mbl_data_collector_list<T>::b_write(vsl_b_ostream& bfs) const 00099 { 00100 vsl_b_write(bfs, version_no()); 00101 vsl_b_write(bfs, data_); 00102 } 00103 00104 template <class T> 00105 void mbl_data_collector_list<T>::b_read(vsl_b_istream& bfs) 00106 { 00107 if (!bfs) return; 00108 00109 short version; 00110 vsl_b_read(bfs,version); 00111 switch (version) 00112 { 00113 case (1): 00114 vsl_b_read(bfs, data_); 00115 break; 00116 default: 00117 vcl_cerr << "I/O ERROR: mbl_data_collector_list<T>::b_read(vsl_b_istream&)\n"; 00118 vcl_cerr << " Unknown version number "<< version << "\n"; 00119 bfs.is().clear(vcl_ios::badbit); // Set an unrecoverable IO error on stream 00120 return; 00121 } 00122 } 00123 00124 00125 #define MBL_DATA_COLLECTOR_LIST_INSTANTIATE(T) \ 00126 VCL_DEFINE_SPECIALIZATION vcl_string mbl_data_collector_list<T >::is_a() const \ 00127 { return vcl_string("mbl_data_collector_list<" #T ">"); }\ 00128 template class mbl_data_collector_list< T > 00129 #endif // mbl_data_collector_list_txx_
1.7.5.1