BinsBaseXML.cxx

Go to the documentation of this file.
00001 
00012 // for truncation warning
00013 #ifdef _MSC_VER
00014 #include "msdevstudio/MSconfig.h"
00015 #endif
00016 
00017 #include "BinsBaseXML.h"
00018 
00019 #include "BinnerAxisXML.h"
00020 #include "XmlElement.h"
00021 
00022 #include "binners/BinsBase.h"
00023 #include "binners/BinsFactory.h"
00024 
00025 #include <cassert>
00026 
00027 using std::list;
00028 using std::string;
00029 
00030 namespace hippodraw {
00031 
00032 BinsBaseXML::BinsBaseXML ( XmlController * controller )
00033   : BaseXML ( "BinsBase", controller ),
00034     m_axis ( "axis" )
00035 {
00036   m_binnerXML = new BinnerAxisXML ( controller );
00037 }
00038 
00039 BinsBaseXML::
00040 ~BinsBaseXML ()
00041 {
00042   delete m_binnerXML;
00043 }
00044 
00045 XmlElement * 
00046 BinsBaseXML::
00047 createElement ( const BinsBase & bins )
00048 {
00049   XmlElement * tag = BaseXML::createElement ();
00050   const string & type = bins.name();
00051   tag->setAttribute ( m_type, type );
00052 
00053   createChildren ( *tag, bins );
00054 
00055   return tag;
00056 }
00057 
00058 
00059 void
00060 BinsBaseXML::
00061 createChildren ( XmlElement & tag, const BinsBase & bins )
00062 {
00063   const BinnerAxis * binner = bins.getBinnerOn ( Axes::X );
00064   XmlElement * element = m_binnerXML->createElement ( *binner );
00065   string axis ( "X" );
00066   element->setAttribute ( m_axis, axis );
00067   tag.appendChild ( *element );
00068   delete element;
00069 
00070   int number = bins.getNumberOfAxes ();
00071   if ( number < 2 ) return;
00072 
00073   binner = bins.getBinnerOn ( Axes::Y );
00074   element = m_binnerXML->createElement ( *binner );
00075   axis = "Y";
00076   element->setAttribute ( m_axis, axis );
00077   tag.appendChild ( *element );
00078   delete element;
00079 }
00080 
00081 BinsBase * 
00082 BinsBaseXML::
00083 createObject ( const XmlElement * binsbase )
00084 {
00085   string type;
00086   bool ok = binsbase->attribute ( m_type, type );
00087   assert ( ok );
00088 
00089   BinsFactory * factory = BinsFactory::instance ();
00090   BinsBase * bins = factory->create ( type );
00091 
00092   list < XmlElement * > nodelist;
00093   m_binnerXML->fillNodeList ( binsbase, nodelist );
00094 
00095   list < XmlElement * > :: const_iterator first = nodelist.begin();
00096   while ( first != nodelist.end() ) {
00097     XmlElement * element = *first++;
00098     BinnerAxis * binner = m_binnerXML->createObject ( element );
00099     string axis;
00100     bool ok = element->attribute ( m_axis, axis );
00101     assert ( ok );
00102 
00103     Axes::Type type = axis == "X" ? Axes::X : Axes::Y;
00104     bins->setBinnerOn ( binner, type );
00105   }
00106 
00107   return bins;
00108 }
00109 
00110 } // namespace hippodraw
00111 

Generated for HippoDraw Class Library by doxygen