On Wed, 22 Dec 2004, Gary Setter wrote:

<snip>
      const char empty_str[1];
                 ^^^^^^^^^
<snip>
My cheap fix was to change the definition to of empty_str to
 const char *empty_str;
and initialize it to empty string in the constructors.
 StringMap() : empty_str("") {}
 StringMap(const StringMap & other) : empty_str("")
{copy(other);}

But the real question is, why do we need this?

It was a memory optimization that most likely isn't worth it. The attached patch removes empty_str and replaces it with "".
Index: common/string_map.hpp
===================================================================
RCS file: /cvsroot/aspell/aspell/common/string_map.hpp,v
retrieving revision 1.7
diff -u -r1.7 string_map.hpp
--- common/string_map.hpp       17 Jun 2004 12:41:47 -0000      1.7
+++ common/string_map.hpp       2 Jan 2005 02:22:45 -0000
@@ -38,7 +38,6 @@
 private:
   HashTable<Parms> lookup_;
   ObjStack buffer_;
-  const char empty_str[1];
 
   void copy(const StringMap & other);
   
@@ -46,8 +45,8 @@
 public:
   PosibErr<void> clear() {lookup_.clear(); buffer_.reset(); return no_err;}
   
-  StringMap() : empty_str() {}
-  StringMap(const StringMap & other) : empty_str() {copy(other);}
+  StringMap() {}    
+  StringMap(const StringMap & other) {copy(other);}
   StringMap & operator= (const StringMap & o) {clear(); copy(o); return *this;}
   ~StringMap() {}
   
@@ -76,7 +75,7 @@
     pair<Iter_,bool> res = lookup_.insert(Value_(key,0));
     if (res.second) {
       res.first->first  = buffer_.dup(key);
-      res.first->second = empty_str;
+      res.first->second = "";
       return true;
     } else {
       return false;
_______________________________________________
Aspell-devel mailing list
Aspell-devel@gnu.org
http://lists.gnu.org/mailman/listinfo/aspell-devel

Reply via email to