From c35a8008d3e11a9eb82a1de88ac8a1b6de418f3f Mon Sep 17 00:00:00 2001 From: Michael Andres Date: Mon, 27 Nov 2006 07:19:01 +0000 Subject: [PATCH] backup --- devel/devel.ma/Ex.cc | 2 - devel/devel.ma/ExPure.cc | 2 - devel/devel.ma/FilelistTransform.cc | 2 - devel/devel.ma/Main.cc | 111 +++++- devel/devel.ma/Makefile.am | 2 +- devel/devel.ma/Measure.h | 45 --- devel/devel.ma/Test.cc | 704 +++--------------------------------- devel/devel.ma/Tools.h | 3 +- 8 files changed, 161 insertions(+), 710 deletions(-) delete mode 100644 devel/devel.ma/Measure.h diff --git a/devel/devel.ma/Ex.cc b/devel/devel.ma/Ex.cc index 6da7998..50b69a4 100644 --- a/devel/devel.ma/Ex.cc +++ b/devel/devel.ma/Ex.cc @@ -9,8 +9,6 @@ #include #include -#include "Measure.h" - using namespace std; using namespace zypp; using namespace zypp::parser::yum; diff --git a/devel/devel.ma/ExPure.cc b/devel/devel.ma/ExPure.cc index cbe7b04..6b353a8 100644 --- a/devel/devel.ma/ExPure.cc +++ b/devel/devel.ma/ExPure.cc @@ -9,8 +9,6 @@ #include #include -#include "Measure.h" - using namespace std; using namespace zypp; using namespace zypp::parser::yum; diff --git a/devel/devel.ma/FilelistTransform.cc b/devel/devel.ma/FilelistTransform.cc index f273c08..815ec90 100644 --- a/devel/devel.ma/FilelistTransform.cc +++ b/devel/devel.ma/FilelistTransform.cc @@ -10,8 +10,6 @@ #include #include -#include "Measure.h" - #include "zypp/xml/Reader.h" using namespace std; diff --git a/devel/devel.ma/Main.cc b/devel/devel.ma/Main.cc index eeb1b97..cd2a520 100644 --- a/devel/devel.ma/Main.cc +++ b/devel/devel.ma/Main.cc @@ -6,7 +6,7 @@ #include #include -using namespace std; +using std::endl; using namespace zypp; /////////////////////////////////////////////////////////////////// @@ -22,6 +22,14 @@ namespace __gnu_cxx { return __stl_hash_string( key_r.c_str() ); } }; + /////////////////////////////////////////////////////////////////// + namespace strhash + { ///////////////////////////////////////////////////////////////// + + ///////////////////////////////////////////////////////////////// + } // namespace strhash + /////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////// } // namespace __gnu_cxx /////////////////////////////////////////////////////////////////// @@ -36,6 +44,82 @@ namespace zypp } // namespace zypp /////////////////////////////////////////////////////////////////// +struct Test +{ + Test( const std::string & val_r = std::string() ) + : _val( val_r ) + , _len( _val.size() ) + {} + + const std::string & val() const + { return _val; } + + unsigned len() const + { return _len; } + + private: + std::string _val; + unsigned _len; +}; + +template + struct HashKey + { + typedef _Value value_type; + typedef _Key key_type; + }; + +struct TestHashByString : public HashKey +{ + const std::string & operator()( const Test & value_r ) const + { return value_r.val(); } +}; + +struct TestHashByUnsigned : public HashKey +{ + unsigned operator()( const Test & value_r ) const + { return value_r.len(); } +}; + + +typedef __gnu_cxx::hash_set HSet; + +std::ostream & operator<<( std::ostream & str, const HSet & obj ) +{ + str << "HSet:" << obj.size() << " (" << obj.bucket_count() << ")" << endl; + for ( HSet::size_type i = 0; i < obj.bucket_count(); ++i ) + { + HSet::size_type c = obj.elems_in_bucket( i ); + if ( c ) + str << " [" << i << "] " << c << endl; + } + return str; +} + +template + struct HashFnc + {}; + +/////////////////////////////////////////////////////////////////// +namespace __gnu_cxx +{ ///////////////////////////////////////////////////////////////// + + template<> + template + struct hash > + { + typedef typename _HashKey::value_type value_type; + typedef typename _HashKey::key_type key_type; + + size_t operator()( const value_type & value_r ) const + { return hash()( _HashKey()( value_r ) ); } + }; + + ///////////////////////////////////////////////////////////////// +} // namespace __gnu_cxx +/////////////////////////////////////////////////////////////////// + + /****************************************************************** ** ** FUNCTION NAME : main @@ -46,13 +130,26 @@ int main( int argc, char * argv[] ) //zypp::base::LogControl::instance().logfile( "" ); INT << "===[START]==========================================" << endl; - typedef __gnu_cxx::hash_set HSet; - + __gnu_cxx::hash_set t; + __gnu_cxx::hash_set ts; + __gnu_cxx::hash_set tu; + + + INT << "===[END]============================================" << endl << endl; + new zypp::base::LogControl::TmpLineWriter; + return 0; HSet hset; - - - - + MIL << hset << endl; + + for ( unsigned i = 0; i < 200; ++i ) + { + std::string x( i, 'a' ); + hset.insert( x ); + MIL << hset << endl; + } + + MIL << hset << endl; + DBG << __gnu_cxx::hash()( "" ) << endl; DBG << __gnu_cxx::hash()( "a" ) << endl; DBG << __gnu_cxx::hash()( "aa" ) << endl; diff --git a/devel/devel.ma/Makefile.am b/devel/devel.ma/Makefile.am index 9e70cb5..eb6f9f3 100644 --- a/devel/devel.ma/Makefile.am +++ b/devel/devel.ma/Makefile.am @@ -27,7 +27,7 @@ AOUT_LDFLAGS = -static ## ################################################## -%: %.cc +%: %.cc $(top_srcdir)/zypp/lib@PACKAGE@.la ln -sf $@.Po .deps/AOUT.Po ln -sf $@.cc AOUT.cc ln -sf $@.o AOUT.o diff --git a/devel/devel.ma/Measure.h b/devel/devel.ma/Measure.h deleted file mode 100644 index 306ff43..0000000 --- a/devel/devel.ma/Measure.h +++ /dev/null @@ -1,45 +0,0 @@ -#ifndef MA_MEASURE_H -#define MA_MEASURE_H - -#include -#include - -#include "zypp/base/Logger.h" -#include "zypp/base/PtrTypes.h" - -/////////////////////////////////////////////////////////////////// -// Just for the stats -struct Measure -{ - struct Run - { - Run( const std::string & msg_r ) - : _msg( msg_r ) - , _begin( time(NULL) ) - { - USR << "START MEASURE..." << _msg << std::endl; - } - ~Run() - { - USR << "DURATION: " << (time(NULL)-_begin) << " sec. " << _msg << std::endl; - } - std::string _msg; - time_t _begin; - }; - - Measure( const std::string & msg_r = std::string() ) - : _run( new Run( msg_r ) ) - {} - - void stop() - { _run.reset(); } - - void start( const std::string & msg_r = std::string() ) - { _run.reset(); _run.reset( new Run( msg_r ) ); } - - private: - zypp::shared_ptr _run; -}; - -/////////////////////////////////////////////////////////////////// -#endif // MA_MEASURE_H diff --git a/devel/devel.ma/Test.cc b/devel/devel.ma/Test.cc index f273c08..98ea99c 100644 --- a/devel/devel.ma/Test.cc +++ b/devel/devel.ma/Test.cc @@ -5,13 +5,12 @@ #include #include +#include #include #include #include -#include "Measure.h" - #include "zypp/xml/Reader.h" using namespace std; @@ -28,6 +27,7 @@ using namespace zypp; #include #include #include +#include /////////////////////////////////////////////////////////////////// @@ -38,25 +38,14 @@ template } /////////////////////////////////////////////////////////////////// -namespace zypp -{ - namespace parser - { - namespace yum - { - /////////////////////////////////////////////////////////////////// - - /////////////////////////////////////////////////////////////////// - } - } -} -/////////////////////////////////////////////////////////////////// bool nopNode( xml::Reader & reader_r ) { return true; } +/////////////////////////////////////////////////////////////////// + bool accNode( xml::Reader & reader_r ) { int i; @@ -78,6 +67,8 @@ bool accNode( xml::Reader & reader_r ) return true; } +/////////////////////////////////////////////////////////////////// + bool dumpNode( xml::Reader & reader_r ) { switch ( reader_r->nodeType() ) @@ -89,17 +80,13 @@ bool dumpNode( xml::Reader & reader_r ) MIL << *reader_r << endl; break; default: - WAR << *reader_r << endl; + //WAR << *reader_r << endl; break; } return true; } -bool dumpNode2( xml::Reader & reader_r ) -{ - dumpNode( reader_r ); - return reader_r.foreachNodeAttribute( dumpNode ); -} +/////////////////////////////////////////////////////////////////// bool dumpEd( xml::Reader & reader_r ) { @@ -122,607 +109,46 @@ bool dumpEd( xml::Reader & reader_r ) return num; } - /////////////////////////////////////////////////////////////////// -namespace parser -{ - namespace consume - { - struct Repomd - { - struct Data - { - Depository _type; - Depository _checksum; - Depository _timestamp; - Depository _openChecksum; - }; - - Depository _data; - }; - } - - - -} - -namespace data -{ - struct Repomd - { - struct Data - { - std::string _type; - CheckSum _checksum; - Date _timestamp; - CheckSum _openChecksum; - }; - - std::map _data; - }; -} - -/////////////////////////////////////////////////////////////////// - - - -struct Element; -std::ostream & operator<<( std::ostream & str, const Element & obj ); - -struct Element : private base::NonCopyable -{ - Element( xml::Reader & reader_r ) - : _reader( reader_r ) - , _name( _reader->name().asString() ) - , _depth( _reader->depth() ) - { - MIL << *this << endl; - //return; - while( nextElement() ) - { - Element el( _reader ); - } - } - - ~Element() - { - while( nextElement() ) - { ; } - DBG << *this << endl; - } - - bool atBegin() const - { - return ( _reader->depth() == _depth - && _reader->nodeType() == XML_READER_TYPE_ELEMENT - && _reader->name().c_str() == _name ); - } - - bool atEnd() const - { - return ( _reader->depth() == _depth - && ( _reader->nodeType() == XML_READER_TYPE_END_ELEMENT - || ( _reader->nodeType() == XML_READER_TYPE_ELEMENT - && _reader->isEmptyElement() ) ) - && _reader->name().c_str() == _name ); - } - - bool nextElement() - { - while ( ! atEnd() ) - { - if ( ! _reader.nextNode() ) - return false; - if ( _reader->nodeType() == XML_READER_TYPE_ELEMENT ) - return true; - WAR << *_reader << endl; - } - return false; - } - - - xml::Reader & _reader; - std::string _name; - int _depth; -}; - -std::ostream & operator<<( std::ostream & str, const Element & obj ) -{ - str << ( obj.atBegin() ? 'B' : '_' ) - << ( obj.atEnd() ? 'E' : '_' ) - << obj._depth << ":" << std::string( obj._depth, ' ') << obj._name - << " {" << *obj._reader << '}'; - return str; -} - -bool dumpEl( xml::Reader & reader_r ) -{ - Element el( reader_r ); - return true; -} - -void parse2( const InputStream & file_r ) -{ - Measure x( file_r.name() ); - try - { - MIL << file_r << endl; - xml::Reader r( file_r ); - MIL << *r << endl; - Element el( r ); - MIL << *r << endl; - } - catch ( const Exception & ) - { - } -} -/////////////////////////////////////////////////////////////////// -class BasicParser -{ - public: - typedef function Consumer; - typedef ExplicitMap ConsumerMap; - - BasicParser( const InputStream & file_r ) - : _reader( file_r ) - , _cmap( nop ) - {} - - public: - xml::Reader & reader() - { return _reader; } - - const xml::Reader & reader() const - { return _reader; } - - ConsumerMap & cmap() - { return _cmap; } - - const ConsumerMap & cmap() const - { return _cmap; } - - public: - - bool parse( xml::Reader & reader_r ) - { - switch ( reader_r->nodeType() ) - { - case XML_READER_TYPE_ELEMENT: - case XML_READER_TYPE_TEXT: - case XML_READER_TYPE_CDATA: - case XML_READER_TYPE_END_ELEMENT: - consume( reader_r ); - default: - ; - } - return true; - } - - public: - void consume( xml::Reader & reader_r, const std::string & key_r ) - { _cmap[key_r]( reader_r ); } - - void consume( xml::Reader & reader_r ) - { consume( reader_r, reader_r->name().asString() ); } - - void consume() - { consume( _reader ); } - - public: - static void nop( xml::Reader & reader_r ) - { ; } - - static void log( xml::Reader & reader_r ) - { DBG << "NOP " << *reader_r << endl; } - - - protected: - xml::Reader _reader; - ConsumerMap _cmap; -}; - -/////////////////////////////////////////////////////////////////// - -struct RepomdParser : private BasicParser -{ - RepomdParser( const InputStream & file_r ) - : BasicParser( file_r ) - { - reader().foreachNode( ref(*this) ); - } - - bool operator()( xml::Reader & reader_r ) - { - return parse( reader_r ); - } - - // READER goes here! -}; - -/////////////////////////////////////////////////////////////////// -struct Consume -{ - struct Entry - { - Pathname _location; - CheckSum _checksum; - //unused: Date _timestamp; - //unused: CheckSum _openChecksum; - }; - - typedef void (Consume::*Consumer)( xml::Reader & reader_r ); - - Consume( const InputStream & file_r ) - : _reader( file_r ) - , _consume( &Consume::nop ) - , _centry( NULL ) - { - _consume.set( "data", &Consume::data ); - _reader.foreachNode( ref(*this) ); - } - - bool operator()( xml::Reader & reader_r ) - { - switch ( reader_r->nodeType() ) - { - case XML_READER_TYPE_ELEMENT: - (this->*_consume[reader_r->name().asString()])( reader_r ); - //data( reader_r ); - break; - default: - WAR << *_reader << endl; - break; - } - return true; - } - - void nop( xml::Reader & reader_r ) - { ; } - - void log( xml::Reader & reader_r ) - { DBG << "NOP " << *_reader << endl; } - - void data( xml::Reader & reader_r ) +template + struct DumpDeps { - MIL << *_reader << endl; - _result[reader_r->name().asString()] = Entry(); - } - - - - xml::Reader _reader; - ExplicitMap _consume; - std::map _result; - Entry * _centry; -}; - -std::ostream & operator<<( std::ostream & str, const Consume & obj ) -{ - return str; -} - -std::ostream & operator<<( std::ostream & str, const Consume::Entry & obj ) -{ - return str << "Entry"; -} - -void parse( const InputStream & file_r ) -{ - Measure x( file_r.name() ); - try - { - MIL << file_r << endl; - RepomdParser a( file_r ); - //WAR << a._result << endl; - } - catch ( const Exception & ) - { - } -} - -struct Test -{ - struct Mix - { - Mix() - : a( 0 ) + DumpDeps( _OutputIterator result_r ) + : _result( result_r ) {} - void seta( int v ) - { a = v; } - - void setb( const string & v ) - { b = v; } - - int a; - string b; - }; - - Test() - : a( 0 ) - {} - - int a; - string b; - Mix c; -}; - -std::ostream & operator<<( std::ostream & str, const Test & obj ) -{ - return str << "Test(" << obj.a << '|' << obj.b - << '|' << obj.c.a << '|' << obj.c.b << ')'; -} - -struct Transform -{ - Transform() - : outfile( "susedu.xml", std::ios_base::out ) - {} - - static const bool indented = !false; - static const bool shorttags = !true; - std::fstream outfile; - - bool operator()( xml::Reader & reader_r ) - { - switch ( reader_r->nodeType() ) - { - case XML_READER_TYPE_ELEMENT: - process( reader_r, true ); - break; - case XML_READER_TYPE_END_ELEMENT: - process( reader_r, false ); - break; - default: - //WAR << *reader_r << endl; - break; - } - return true; - } - - struct File - { - std::string name; - std::string type; - - bool operator<( const File & rhs ) const - { return( name < rhs.name ); } - }; - - struct Package - { - std::string pkgid; - std::string name; - std::string epoch; - std::string ver; - std::string rel; - std::string arch; - std::set files; - }; - - shared_ptr pkg; - - void process( xml::Reader & reader_r, bool open_r ) - { - if ( reader_r->name() == "file" ) - { - if ( open_r ) - addFile( reader_r ); - } - else if ( reader_r->name() == "version" ) - { - if ( open_r ) - addVersion( reader_r ); - } - else if ( reader_r->name() == "package" ) - { - if ( open_r ) - startPackage( reader_r ); - else - endPackage(); - } - else if ( reader_r->name() == "filelists" ) - { - DBG << *reader_r << endl; - if ( open_r ) - { - DBG << outfile << endl; - outfile << "" << endl; - outfile << "" << endl; - } - else - { - outfile << "" << endl; - outfile.close(); - } - } - else - { - throw; - } - } - - void startPackage( xml::Reader & reader_r ) - { - endPackage(); - pkg.reset( new Package ); - pkg->pkgid = reader_r->getAttribute( "pkgid" ).asString(); - pkg->name = reader_r->getAttribute( "name" ).asString(); - pkg->arch = reader_r->getAttribute( "arch" ).asString(); - } - - void addVersion( xml::Reader & reader_r ) - { - pkg->epoch = reader_r->getAttribute( "epoch" ).asString(); - pkg->ver = reader_r->getAttribute( "ver" ).asString(); - pkg->rel = reader_r->getAttribute( "rel" ).asString(); - } - - void addFile( xml::Reader & reader_r ) - { - File f; - f.type = reader_r->getAttribute( "type" ).asString(); - for( reader_r.nextNode(); - reader_r->nodeType() != XML_READER_TYPE_END_ELEMENT; - reader_r.nextNode() ) - { - if ( reader_r->nodeType() == XML_READER_TYPE_TEXT ) - { - f.name = reader_r->value().asString(); - } - } - pkg->files.insert( f ); - } - - void endPackage() - { - if ( pkg ) - { - writePackage( outfile ); - pkg.reset(); - } - } - - static std::ostream & putAttr( std::ostream & stream_r, - const std::string & tag_r, - const std::string & value_r ) - { - if ( value_r.empty() || tag_r.empty() ) - return stream_r; - return stream_r - << str::form( " %s=\"%s\"", tag_r.c_str(), value_r.c_str() ); - } - - void writePackage( std::ostream & stream_r ) - { - stream_r << " pkgid ); - putAttr( stream_r, "name", pkg->name ); - putAttr( stream_r, "arch", pkg->arch ); - stream_r << ">\n"; - - stream_r << " epoch ); - putAttr( stream_r, "ver", pkg->ver ); - putAttr( stream_r, "rel", pkg->rel ); - stream_r << "/>\n"; - - writePackageFiles2( stream_r ); - - stream_r << " \n"; - } - - void writePackageFiles( std::ostream & stream_r ) - { - for ( std::set::const_iterator it = pkg->files.begin(); - it != pkg->files.end(); ++it ) - { - stream_r << " type ); - stream_r << ">" << it->name << "\n"; - } - } - - struct Fnode - { - Fnode( const std::string & name_r ) - : name( name_r ) - , entry( NULL ) - {} - - std::string name; - mutable const File * entry; - mutable std::set children; - - const Fnode * add( const std::string & sub_r ) const + bool operator()( xml::Reader & reader_r ) { - std::set::iterator i = children.find( sub_r ); - if ( i != children.end() ) - return &(*i); - return &(*(children.insert( Fnode( sub_r ) ).first)); - } - - void dump( std::ostream & stream_r, const std::string & pname, unsigned level ) const - { - std::string tname; - if ( pname.empty() ) - { - tname = name; - } - else if ( pname == "/" ) - { - tname = pname+name; - } - else - { - tname = pname+"/"+name; - } - - if ( children.size() == 1 ) - { - children.begin()->dump( stream_r, tname, (indented?level:0) ); - return; - } - - std::string tag; - stream_r << std::string( level, ' ' ); - - if ( entry ) - { - tag = (shorttags ? "f" : "file"); - stream_r << "<" << tag; - putAttr( stream_r, (shorttags ? "t" : "type"), entry->type ); - putAttr( stream_r, (shorttags ? "n" : "name"), tname ); - } - else - { - tag = (shorttags ? "b" : "base"); - stream_r << "<" << tag; - putAttr( stream_r, (shorttags ? "n" : "name"), tname ); - } - - if ( children.empty() ) + if ( reader_r->nodeType() == XML_READER_TYPE_ELEMENT + && reader_r->prefix() == "rpm" + && reader_r->localName() == "entry" ) { - stream_r << "/>" << (indented?"\n":""); - } - else - { - stream_r << ">" << (indented?"\n":""); - for ( std::set::const_iterator it = children.begin(); - it != children.end(); ++it ) + string n( reader_r->getAttribute( "name" ).asString() ); + Rel op( reader_r->getAttribute( "flags" ).asString() ); + if ( op != Rel::ANY ) { - it->dump( stream_r, "", (indented?level+1:0) ); + n += " "; + n += op.asString(); + n += " "; + n += reader_r->getAttribute( "ver" ).asString(); + n += "-"; + n += reader_r->getAttribute( "rel" ).asString(); } - stream_r << std::string( level, ' ' ) << "" << (indented?"\n":""); + *_result = n; + ++_result; } + return true; } - bool operator<( const Fnode & rhs ) const - { return( name < rhs.name ); } + _OutputIterator _result; }; - void writePackageFiles2( std::ostream & stream_r ) - { - Fnode root( "" ); - for ( std::set::const_iterator it = pkg->files.begin(); - it != pkg->files.end(); ++it ) - { - std::list words; - str::split( it->name, std::back_inserter(words), "/" ); +template + DumpDeps<_OutputIterator> dumpDeps( _OutputIterator result_r ) + { return DumpDeps<_OutputIterator>( result_r ); } - const Fnode * c = &root; - for ( std::list::const_iterator w = words.begin(); - w != words.end(); ++w ) - { - c = c->add( *w ); - } - c->entry = &(*it); - } - root.dump( stream_r, "/", (indented?3:0) ); - } - -}; +/////////////////////////////////////////////////////////////////// /****************************************************************** ** @@ -732,51 +158,29 @@ struct Transform int main( int argc, char * argv[] ) { INT << "===[START]==========================================" << endl; - { - Measure x; - Pathname repodata( "/Local/PATCHES/repodata" ); - //repodata = "/Local/FACTORY/repodata"; - xml::Reader reader( repodata/"filelists.xml" ); - Transform t; - reader.foreachNode( ref(t) ); - } - INT << "===[END]============================================" << endl << endl; - return 0; - int s; + --argc; + ++argv; - Pathname repodata( "/Local/PATCHES/repodata" ); - //repodata = "/Local/FACTORY/repodata"; - InputStream x ( "/Local/PATCHES/repodata" ); - parse2( repodata/"repomd.xml" ); - //parse2( repodata/"primary.xml" ); + Pathname repodata; + if ( argc ) + { + repodata = *argv; + } + else + { + repodata = "/Local/PATCHES/repodata"; + repodata /= "primary.xml"; + } + + std::list depstrings; + + Measure m( "Parse" ); + xml::Reader reader( repodata ); + reader.foreachNodeOrAttribute( dumpDeps( std::back_inserter(depstrings) ) ); + m.stop(); + + MIL << "depstrings " << depstrings.size() << " " << depstrings << endl; - INT << "===[END]============================================" << endl << endl; - return 0; - { - Measure x; - for ( int i = 1; i; --i ) - { - parse( repodata/"repomd.xml" ); - parse( repodata/"primary.xml" ); - parse( repodata/"filelists.xml" ); - parse( repodata/"other.xml" ); - } - } - ERR << "done..." << endl; - cin >> s; - return 0; - { - Measure x; - for ( int i = 20; i; --i ) - { - parse( (repodata/"repomd.xml").asString() ); - parse( repodata/"primary.xml" ); - parse( repodata/"filelists.xml" ); - parse( repodata/"other.xml" ); - } - } - ERR << "done..." << endl; - cin >> s; INT << "===[END]============================================" << endl << endl; return 0; diff --git a/devel/devel.ma/Tools.h b/devel/devel.ma/Tools.h index 3b717ec..54bb49c 100644 --- a/devel/devel.ma/Tools.h +++ b/devel/devel.ma/Tools.h @@ -3,10 +3,10 @@ #include -#include "Measure.h" #include "Printing.h" #include +#include #include #include @@ -16,6 +16,7 @@ #include using namespace zypp; +using zypp::debug::Measure; using std::endl; /////////////////////////////////////////////////////////////////// -- 2.7.4