summaryrefslogtreecommitdiff
path: root/libopie2
authormickeyl <mickeyl>2004-01-03 18:33:43 (UTC)
committer mickeyl <mickeyl>2004-01-03 18:33:43 (UTC)
commit27b84ed363fd7fc52092e3c2d1e49dca079b7ffd (patch) (side-by-side diff)
tree932806dc83d84720bcb259df8711d894932580e1 /libopie2
parent3889c8f853aa2d128f54389b17f08fc7b9150788 (diff)
downloadopie-27b84ed363fd7fc52092e3c2d1e49dca079b7ffd.zip
opie-27b84ed363fd7fc52092e3c2d1e49dca079b7ffd.tar.gz
opie-27b84ed363fd7fc52092e3c2d1e49dca079b7ffd.tar.bz2
slightly improve the speed reading the manufacturers list
Diffstat (limited to 'libopie2') (more/less context) (ignore whitespace changes)
-rw-r--r--libopie2/opienet/omanufacturerdb.cpp13
-rwxr-xr-xlibopie2/tools/regen.py230
2 files changed, 214 insertions, 29 deletions
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
@@ -79,25 +79,34 @@ OManufacturerDB::OManufacturerDB()
{
odebug << "OManufacturerDB: found manufacturer list in " << filename << oendl;
QTextStream s( &file );
QString addr;
QString manu;
QString extManu;
+ #ifdef OPIE_IMPROVE_GUI_LATENCY
+ int counter = 0;
+ #endif
while (!s.atEnd())
{
s >> addr;
s >> manu;
s >> extManu;
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;
}
}
OManufacturerDB::~OManufacturerDB()
{
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,29 +1,34 @@
#!/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 <mickey@vanille.de>
+ * debug value mapper - generated by %s - (C) Michael 'Mickey' Lauer <mickey@vanille.de>
*/
#ifndef DEBUGMAPPER_H
#define DEBUGMAPPER_H
#include <qstring.h>
@@ -40,38 +45,38 @@ class DebugMapper
const QString& map( int value ) const;
private:
IntStringMap _map;
};
#endif
-"""
+""" % sys.argv[0]
-print >>tablecfile,"""
+ print >>tablecfile,"""
/*
- * debug value mapper - generated by regen.py - (C) Michael 'Mickey' Lauer <mickey@vanille.de>
+ * debug value mapper - generated by %s - (C) Michael 'Mickey' Lauer <mickey@vanille.de>
*/
#include <opie2/odebug.h>
#include "%s"
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,"""
};
DebugMapper::~DebugMapper()
{
odebug << "DebugMapper::~DebugMapper()" << oendl;
@@ -91,6 +96,177 @@ const QString& DebugMapper::map( int value ) const
{
return *result;
}
}
"""
+
+#---------------------------------------------------------------------------#
+# #
+#---------------------------------------------------------------------------#
+
+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 <qmap.h>
+
+/**
+ * @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<QString, QString> manufacturers;
+ QMap<QString, QString> manufacturersExt;
+ static OManufacturerDB* _instance;
+};
+
+#endif
+"""
+
+ print >>cpp,"""
+#include "%s.h"
+
+/* OPIE CORE */
+#include <opie2/odebug.h>
+
+/* QT */
+#include <qapplication.h>
+#include <qstring.h>
+
+#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<QString,QString>::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 <table> <basename>
+
+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