Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Class Members | File Members

mbl_data_collector_list.txx

Go to the documentation of this file.
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()<<vcl_endl;
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_

Generated on Thu Jan 10 14:42:59 2008 for contrib/mul/mbl by  doxygen 1.4.4