00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 
00027 
00028 
00029 
00030 
00031 
00032 
00033 
00034 
00035 
00036 
00037 
00038 
00039 #include <iostream>
00040 using namespace std;
00041 
00042 #include "prop_registry.hh"
00043 
00044 PropRegistry::PropData& PropRegistry::PropData::operator <<
00045   (const PropRegistry::PropData &o) throw (bad_cast)
00046 {
00047   if (tag == k_undef) tag = o.tag;
00048   if (tag != o.tag) throw bad_cast();
00049   
00050   switch (tag)
00051   {
00052   case k_string: s.insert(s.end(), o.s.begin(), o.s.end()); break;
00053   case k_bool: b.insert(b.end(), o.b.begin(), o.b.end()); break;
00054   case k_int: i.insert(i.end(), o.i.begin(), o.i.end()); break;
00055   case k_float: f.insert(f.begin(), o.f.begin(), o.f.end()); break;
00056   }
00057 
00058   return *this;
00059 }
00060 
00061 
00062 ostream& operator << (ostream &os, const PropRegistry::PropData &o)
00063 {
00064   switch (o.tag)
00065   {
00066   case PropRegistry::PropData::k_bool:
00067     if (!o.b.empty()) os << o.b[0];
00068     for (int k = 1; k < o.b.size(); k++) os << " " << o.b[k];
00069     break;
00070   case PropRegistry::PropData::k_string:
00071     if (!o.s.empty()) os << o.s[0];
00072     for (int k = 1; k < o.s.size(); k++) os << o.s[k];
00073     break;
00074   case PropRegistry::PropData::k_int:
00075     if (!o.i.empty()) os << o.i[0];
00076     for (int k = 1; k < o.i.size(); k++) os << " " << o.i[k];
00077     break;
00078   case PropRegistry::PropData::k_float:
00079     if (!o.f.empty()) os << o.f[0];
00080     for (int k = 1; k < o.f.size(); k++) os << " " << o.f[k];
00081     break;
00082   default:
00083     ASSERT(0, "bad PropData tag");
00084   }
00085   
00086   return os;
00087 }
00088 
00089 
00090 ostream& operator >> (ostream &os, PropRegistry::PropData &o)
00091 {
00092   UNIMPLEMENTED; 
00093   
00094   return os;
00095 }
00096 
00097 ostream& operator << (ostream &os, const PropRegistry &o)
00098 {
00099   for (PropRegistry::const_iterator i = o.begin(); i != o.end(); i++)
00100   {
00101     os << (*i).first << " = " << (*i).second << endl;
00102   }
00103 
00104   return os;
00105 }
00106 
00107 
00108 ostream& operator >> (ostream &os, PropRegistry &o)
00109 {
00110   UNIMPLEMENTED; 
00111 
00112   return os;
00113 }