contrib/mul/mfpf/mfpf_vec_cost_builder.cxx
Go to the documentation of this file.
00001 #include "mfpf_vec_cost_builder.h"
00002 //:
00003 // \file
00004 // \brief Base for classes which build mfpf_vec_cost objects.
00005 // \author Tim Cootes
00006 
00007 #include <vsl/vsl_indent.h>
00008 #include <vsl/vsl_binary_loader.h>
00009 
00010 #include <mbl/mbl_parse_block.h>
00011 #include <mbl/mbl_read_props.h>
00012 #include <mbl/mbl_cloneables_factory.h>
00013 #include <vcl_sstream.h>
00014 
00015 //=======================================================================
00016 // Dflt ctor
00017 //=======================================================================
00018 
00019 mfpf_vec_cost_builder::mfpf_vec_cost_builder()
00020 {
00021 }
00022 
00023 //=======================================================================
00024 // Destructor
00025 //=======================================================================
00026 
00027 mfpf_vec_cost_builder::~mfpf_vec_cost_builder()
00028 {
00029 }
00030 
00031 
00032 //: Initialise from a string stream
00033 bool mfpf_vec_cost_builder::set_from_stream(vcl_istream &is)
00034 {
00035   // Cycle through string and produce a map of properties
00036   vcl_string s = mbl_parse_block(is);
00037   vcl_istringstream ss(s);
00038   mbl_read_props_type props = mbl_read_props_ws(ss);
00039 
00040   if (props.size()!=0)
00041   {
00042     vcl_cerr<<is_a()<<" does not expect any extra arguments.\n";
00043     mbl_read_props_look_for_unused_props(
00044       "mfpf_vec_cost_builder::set_from_stream", props, mbl_read_props_type());
00045   }
00046   return true;
00047 }
00048 
00049 //: Create a concrete object, from a text specification.
00050 vcl_auto_ptr<mfpf_vec_cost_builder> mfpf_vec_cost_builder::
00051   create_from_stream(vcl_istream &is)
00052 {
00053   vcl_string name;
00054   is >> name;
00055   vcl_auto_ptr<mfpf_vec_cost_builder> vcb;
00056   try {
00057     vcb = mbl_cloneables_factory<mfpf_vec_cost_builder>::get_clone(name);
00058   }
00059   catch (const mbl_exception_no_name_in_factory & e)
00060   {
00061     throw (mbl_exception_parse_error( e.what() ));
00062   }
00063   vcb->set_from_stream(is);
00064   return vcb;
00065 }
00066 
00067 
00068 //=======================================================================
00069 // Method: version_no
00070 //=======================================================================
00071 
00072 short mfpf_vec_cost_builder::version_no() const
00073 {
00074   return 1;
00075 }
00076 
00077 //=======================================================================
00078 // Method: is_a
00079 //=======================================================================
00080 
00081 vcl_string mfpf_vec_cost_builder::is_a() const
00082 {
00083   return vcl_string("mfpf_vec_cost_builder");
00084 }
00085 
00086 
00087 //: Allows derived class to be loaded by base-class pointer
00088 void vsl_add_to_binary_loader(const mfpf_vec_cost_builder& b)
00089 {
00090   vsl_binary_loader<mfpf_vec_cost_builder>::instance().add(b);
00091 }
00092 
00093 //=======================================================================
00094 // Associated function: operator<<
00095 //=======================================================================
00096 
00097 void vsl_b_write(vsl_b_ostream& bfs, const mfpf_vec_cost_builder& b)
00098 {
00099   b.b_write(bfs);
00100 }
00101 
00102 //=======================================================================
00103 // Associated function: operator>>
00104 //=======================================================================
00105 
00106 void vsl_b_read(vsl_b_istream& bfs, mfpf_vec_cost_builder& b)
00107 {
00108   b.b_read(bfs);
00109 }
00110 
00111 //=======================================================================
00112 // Associated function: operator<<
00113 //=======================================================================
00114 
00115 vcl_ostream& operator<<(vcl_ostream& os,const mfpf_vec_cost_builder& b)
00116 {
00117   os << b.is_a() << ": ";
00118   vsl_indent_inc(os);
00119   b.print_summary(os);
00120   vsl_indent_dec(os);
00121   return os;
00122 }
00123 
00124 //=======================================================================
00125 // Associated function: operator<<
00126 //=======================================================================
00127 
00128 vcl_ostream& operator<<(vcl_ostream& os,const mfpf_vec_cost_builder* b)
00129 {
00130   if (b)
00131     return os << *b;
00132   else
00133     return os << "No mfpf_vec_cost_builder defined.";
00134 }