Commit: Patch bug5291e

From: Robert Wilhelm (robert.wilhelm@gmx.net)
Date: Tue Oct 07 2003 - 16:46:53 EDT

  • Next message: Daniel Glassey: "win32 dialog refactoring and unicode"

    I have just commited the attached patch.
    By avoiding the UT_String contructor and destructor in
    UT_StringPtrMap::pick(const char* k), the 5291 loads
    much faster now.
    I am now down to 24s from 30s for the testcase.

    Robert


    ? ttt
    ? vector.patch
    Index: ut_hash.cpp
    ===================================================================
    RCS file: /cvsroot/abi/src/af/util/xp/ut_hash.cpp,v
    retrieving revision 1.39
    diff -u -r1.39 ut_hash.cpp
    --- ut_hash.cpp 13 Jul 2003 10:08:24 -0000 1.39
    +++ ut_hash.cpp 7 Oct 2003 20:48:40 -0000
    @@ -44,6 +44,11 @@
             {
                     return (m_val == key);
             }
    +
    + bool eq(const char *key) const
    + {
    + return (!strcmp(m_val.c_str(),key));
    + }
             
             void operator=(const UT_String &k)
                     { m_val = k; }
    @@ -64,6 +69,11 @@
                             return hashcode(key); // UT_String::hashcode
                     }
     
    + static UT_uint32 compute_hash(const char *key)
    + {
    + return hashcode(key);
    + }
    +
     private:
             UT_String m_val;
             UT_uint32 m_hashval;
    @@ -117,7 +127,16 @@
                             return m_key.hashval() == h;
     #endif
                     }
    -
    +
    + bool key_eq(const char *test, size_t h) const
    + {
    +#if 1
    + return m_key.eq(test);
    +#else
    + return m_key.hashval() == h;
    +#endif
    + }
    +
             const void* m_value;
             key_wrapper m_key;
     };
    @@ -184,12 +203,6 @@
      */
     const void* UT_StringPtrMap::pick(const char* k) const
     {
    - UT_String aKey(k);
    - return pick (aKey);
    -}
    -
    -const void* UT_StringPtrMap::pick(const UT_String & k) const
    -{
             hash_slot* sl = 0;
             bool key_found = false;
             size_t slot;
    @@ -199,6 +212,11 @@
             return key_found ? sl->value() : 0;
     }
     
    +const void* UT_StringPtrMap::pick(const UT_String & k) const
    +{
    + return pick (k.c_str());
    +}
    +
     /*!
      * See if the map contains the (key, value) pair represented by (\k, \v)
      * If \v is null, just see if the key \k exists
    @@ -448,6 +466,20 @@
                                                             void* vi,
                                                             size_t hashval_in) const
     {
    + return find_slot( k.c_str(), search_type, slot, key_found, hashval, v, v_found, vi, hashval_in);
    +}
    +
    +hash_slot*
    +UT_StringPtrMap::find_slot(const char *k,
    + SM_search_type search_type,
    + size_t& slot,
    + bool& key_found,
    + size_t& hashval,
    + const void* v,
    + bool* v_found,
    + void* vi,
    + size_t hashval_in) const
    +{
             if ( m_nSlots == 0 )
               {
                 key_found = false ; return NULL ;
    @@ -456,7 +488,7 @@
             hashval = (hashval_in ? hashval_in : key_wrapper::compute_hash(k));
             int nSlot = hashval % m_nSlots;
     
    - xxx_UT_DEBUGMSG(("DOM: hashval for \"%s\" is %d (#%dth slot)\n", k.c_str(), hashval, nSlot));
    + xxx_UT_DEBUGMSG(("DOM: hashval for \"%s\" is %d (#%dth slot)\n", k, hashval, nSlot));
     
             hash_slot* sl = &m_pMapping[nSlot];
             
    Index: ut_hash.h
    ===================================================================
    RCS file: /cvsroot/abi/src/af/util/xp/ut_hash.h,v
    retrieving revision 1.26
    diff -u -r1.26 ut_hash.h
    --- ut_hash.h 13 Jul 2003 10:08:24 -0000 1.26
    +++ ut_hash.h 7 Oct 2003 20:48:40 -0000
    @@ -149,6 +149,16 @@
                                                  bool* v_found,
                                                  void* vi,
                                                  size_t hashval_in) const;
    +
    + hash_slot* find_slot(const char * k,
    + SM_search_type search_type,
    + size_t& slot,
    + bool& key_found,
    + size_t& hashval,
    + const void* v,
    + bool* v_found,
    + void* vi,
    + size_t hashval_in) const;
             
             // enumeration of the elements
             const void* _first(UT_Cursor& c) const;
    Index: ut_string_class.cpp
    ===================================================================
    RCS file: /cvsroot/abi/src/af/util/xp/ut_string_class.cpp,v
    retrieving revision 1.53
    diff -u -r1.53 ut_string_class.cpp
    --- ut_string_class.cpp 28 Aug 2003 05:50:00 -0000 1.53
    +++ ut_string_class.cpp 7 Oct 2003 20:48:41 -0000
    @@ -700,7 +700,12 @@
     UT_uint32 hashcode(const UT_String& string)
     {
             // from glib
    - const char* p = string.c_str();
    + return hashcode(string.c_str());
    +}
    +
    +UT_uint32 hashcode(const char *p)
    +{
    + // from glib
             UT_uint32 h = (UT_uint32)*p;
             
             if (h)
    Index: ut_string_class.h
    ===================================================================
    RCS file: /cvsroot/abi/src/af/util/xp/ut_string_class.h,v
    retrieving revision 1.40
    diff -u -r1.40 ut_string_class.h
    --- ut_string_class.h 2 Sep 2003 19:10:54 -0000 1.40
    +++ ut_string_class.h 7 Oct 2003 20:48:42 -0000
    @@ -112,6 +112,7 @@
     ABI_EXPORT bool operator!=(const char* s1, const UT_String& s2);
     
     ABI_EXPORT UT_uint32 hashcode(const UT_String& string);
    +ABI_EXPORT UT_uint32 hashcode(const char *s);
     
     // strcmp ordering
     ABI_EXPORT bool operator<(const UT_String& s1, const UT_String& s2);



    This archive was generated by hypermail 2.1.4 : Tue Oct 07 2003 - 17:10:12 EDT