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 }