From 27b84ed363fd7fc52092e3c2d1e49dca079b7ffd Mon Sep 17 00:00:00 2001 From: mickeyl Date: Sat, 03 Jan 2004 18:33:43 +0000 Subject: slightly improve the speed reading the manufacturers list --- (limited to 'libopie2') diff --git a/libopie2/opienet/omanufacturerdb.cpp b/libopie2/opienet/omanufacturerdb.cpp index 595633d..f61270b 100644 --- a/libopie2/opienet/omanufacturerdb.cpp +++ b/libopie2/opienet/omanufacturerdb.cpp @@ -82,6 +82,9 @@ OManufacturerDB::OManufacturerDB() QString addr; QString manu; QString extManu; + #ifdef OPIE_IMPROVE_GUI_LATENCY + int counter = 0; + #endif while (!s.atEnd()) { s >> addr; @@ -90,11 +93,17 @@ OManufacturerDB::OManufacturerDB() manufacturers.insert( addr, manu ); manufacturersExt.insert( addr, extManu ); - odebug << "OmanufacturerDB: parse '" << addr << "' as '" << manu << "' (" << extManu << ")" << oendl; + // odebug << "OmanufacturerDB: parse '" << addr << "' as '" << manu << "' (" << extManu << ")" << oendl; #ifdef OPIE_IMPROVE_GUI_LATENCY - if ( qApp ) qApp->processEvents(); + counter++; + if ( counter == 50 ) + { + qApp->processEvents(); + counter = 0; + } #endif } + odebug << "OManufacturerDB: manufacturer list completed." << oendl; } } diff --git a/libopie2/tools/regen.py b/libopie2/tools/regen.py index 3779896..89385e1 100755 --- a/libopie2/tools/regen.py +++ b/libopie2/tools/regen.py @@ -1,26 +1,31 @@ #!/usr/bin/env python -# -# regenerate ioctl_table.h -# +"""Regenerate C++ mapping classes""" -import sys -import os -result = os.popen( 'find /usr/include -name "*.h" |xargs grep -h SIOC|grep 0x' ).readlines() +#---------------------------------------------------------------------------# +# # +#---------------------------------------------------------------------------# + +def regenDebugMapper( basename ): + """ + Debug Mapper - maps ioctl numbers to names, e.g. 0x4x5a -> SIOCGIWNAME + """ + + result = os.popen( 'find /usr/include -name "*.h" |xargs grep -h SIOC|grep 0x' ).readlines() -try: - tablehfile = file( sys.argv[1]+".h", "w" ) -except: - tablehfile = sys.stdout + try: + tablehfile = file( basename+".h", "w" ) + except: + tablehfile = sys.stdout -try: - tablecfile = file( sys.argv[1]+".cpp", "w" ) -except: - tablecfile = sys.stdout + try: + tablecfile = file( basename+".cpp", "w" ) + except: + tablecfile = sys.stdout -print >>tablehfile,""" + print >>tablehfile,""" /* - * debug value mapper - generated by regen.py - (C) Michael 'Mickey' Lauer + * debug value mapper - generated by %s - (C) Michael 'Mickey' Lauer */ #ifndef DEBUGMAPPER_H @@ -43,11 +48,11 @@ class DebugMapper }; #endif -""" +""" % sys.argv[0] -print >>tablecfile,""" + print >>tablecfile,""" /* - * debug value mapper - generated by regen.py - (C) Michael 'Mickey' Lauer + * debug value mapper - generated by %s - (C) Michael 'Mickey' Lauer */ #include @@ -58,17 +63,17 @@ DebugMapper::DebugMapper() { odebug << "DebugMapper::DebugMapper()" << oendl; -""" % (tablehfile.name) +""" % ( sys.argv[0], tablehfile.name ) -for line in result: - l = line.split() - if not l[0].startswith( "#define" ) or not l[2].startswith( "0x" ): - print >>sys.stderr, "can't parse line: %s" % l - continue - print >>tablecfile, " _map.insert( %s, new QString(\"%s\") );" % ( l[2], l[1] ) + for line in result: + l = line.split() + if not l[0].startswith( "#define" ) or not l[2].startswith( "0x" ): + print >>sys.stderr, "can't parse line: %s" % l + continue + print >>tablecfile, " _map.insert( %s, new QString(\"%s\") );" % ( l[2], l[1] ) -print >>tablecfile,""" + print >>tablecfile,""" }; @@ -94,3 +99,174 @@ const QString& DebugMapper::map( int value ) const } """ + +#---------------------------------------------------------------------------# +# # +#---------------------------------------------------------------------------# + +def regenManufacturerDB( basename ): + + try: + h = file( basename+".h", "w" ) + except: + h = sys.stdout + + try: + cpp = file( basename+".cpp", "w" ) + except: + cpp = sys.stdout + + print >>h,""" +#ifndef OMANUFACTURERDB_H +#define OMANUFACTURERDB_H + +#include + +/** + * @brief A Ethernet card vendor database. + * + * This class encapsulates the lookup of Ethernet vendor given a + * certain Mac Address. Only the first three bytes define the vendor. + */ +class OManufacturerDB +{ + public: + /** + * @returns the one-and-only @ref OManufacturerDB instance. + */ + static OManufacturerDB* instance(); + /** + * @returns the short manufacturer string given a @a macaddr. + */ + const QString& lookup( const QString& macaddr ) const; + /** + * @returns the enhanced manufacturer string given a @a macaddr. + */ + const QString& lookupExt( const QString& macaddr ) const; + + protected: + OManufacturerDB(); + virtual ~OManufacturerDB(); + + private: + QMap manufacturers; + QMap manufacturersExt; + static OManufacturerDB* _instance; +}; + +#endif +""" + + print >>cpp,""" +#include "%s.h" + +/* OPIE CORE */ +#include + +/* QT */ +#include +#include + +#define OPIE_IMPROVE_GUI_LATENCY 1 + +OManufacturerDB* OManufacturerDB::_instance = 0; + +OManufacturerDB* OManufacturerDB::instance() +{ + if ( !OManufacturerDB::_instance ) + { + odebug << "OManufacturerDB::instance(): creating OManufacturerDB..." << oendl; + _instance = new OManufacturerDB(); + } + return _instance; +} + + +OManufacturerDB::OManufacturerDB() +{ +""" % basename + + count = 0 + for line in sys.stdin: + if line[0] == "#": # skip comments + continue + #print line.strip() + entries = line.strip().split() + #print "number of entries =", len( entries ) + #print entries + if len( entries ) < 2: + continue + elif len( entries ) == 2: + count += 1 + print "2-line detected." + print >>cpp, ' manufacturers.insert( "%s", "%s" );' % ( entries[0], entries[1] ) + print >>cpp, ' manufacturersExt.insert( "%s", "%s" );' % ( entries[0], entries[1] ) + elif len( entries ) > 2: + count += 1 + print "3-line detected." + print >>cpp, ' manufacturers.insert( "%s", "%s" );' % ( entries[0], entries[1] ) + print >>cpp, ' manufacturersExt.insert( "%s", "%s" );' % ( entries[0], "_".join( entries[3:] ) ) + else: + assert( false ) + if not (count % 1000): + print >>cpp,""" +#ifdef OPIE_IMPROVE_GUI_LATENCY + if (qApp) qApp->processEvents(); +#endif +""" + print "successfully parsed", count, "manufacturer lines" + print >>cpp,""" +} + + +OManufacturerDB::~OManufacturerDB() +{ +} + + +const QString& OManufacturerDB::lookup( const QString& macaddr ) const +{ + return manufacturers[macaddr.upper().left(8)]; +} + + +const QString& OManufacturerDB::lookupExt( const QString& macaddr ) const +{ + QMap::ConstIterator it = manufacturersExt.find( macaddr.upper().left(8) ); + return it == manufacturersExt.end() ? lookup( macaddr ) : *it; +} +""" + +#---------------------------------------------------------------------------# +# # +#---------------------------------------------------------------------------# + +#---------------------------------------------------------------------------# +# # +#---------------------------------------------------------------------------# + +#---------------------------------------------------------------------------# +# # +#---------------------------------------------------------------------------# + +import sys +import os +import copy + +if __name__ == "__main__": + if len( sys.argv ) != 3: + print """ +Usage: %s + +Available tables: %s +""" % ( sys.argv[0], [ str(k)[5:] for k in copy.copy( locals() ) if k.startswith( "regen" ) ] ) + sys.exit( -1 ) + + try: + func = locals()["regen%s" % sys.argv[1]] + except KeyError: + print "Table '%s' unknown." % sys.argv[1] + sys.exit( -1 ) + else: + func( sys.argv[2] ) + sys.exit( 0 ) \ No newline at end of file -- cgit v0.9.0.2