[Gnucash-changes] r12319 - gnucash/trunk/lib/libqof/qof - Add CACHE_REPLACE(dst, src) macro for common case in string setters.

Chris Shoemaker chris at cvs.gnucash.org
Tue Jan 10 23:27:02 EST 2006


Author: chris
Date: 2006-01-10 23:27:02 -0500 (Tue, 10 Jan 2006)
New Revision: 12319
Trac: http://svn.gnucash.org/trac/changeset/12319

Modified:
   gnucash/trunk/lib/libqof/qof/gnc-engine-util.h
Log:
Add CACHE_REPLACE(dst, src) macro for common case in string setters.


Modified: gnucash/trunk/lib/libqof/qof/gnc-engine-util.h
===================================================================
--- gnucash/trunk/lib/libqof/qof/gnc-engine-util.h	2006-01-11 04:25:36 UTC (rev 12318)
+++ gnucash/trunk/lib/libqof/qof/gnc-engine-util.h	2006-01-11 04:27:02 UTC (rev 12319)
@@ -305,8 +305,22 @@
 */
 gpointer gnc_string_cache_insert(gconstpointer key);
 
-#define CACHE_INSERT(str) gnc_string_cache_insert((gconstpointer)(str));
-#define CACHE_REMOVE(str) gnc_string_cache_remove((str));
+#define CACHE_INSERT(str) gnc_string_cache_insert((gconstpointer)(str))
+#define CACHE_REMOVE(str) gnc_string_cache_remove((str))
 
+/* Replace cached string currently in 'dst' with string in 'src'. 
+ * Typical usage: 
+ *     void foo_set_name(Foo *f, const char *str) {
+ *        CACHE_REPLACE(f->name, str);
+ *     }
+ * It avoids unnecessary ejection by doing INSERT before REMOVE. 
+*/          
+#define CACHE_REPLACE(dst, src) do {               \
+        gpointer tmp = CACHE_INSERT((src));        \
+        CACHE_REMOVE((dst));                       \
+        (dst) = tmp;                               \
+    } while (0)
+
+
 #endif /* QOF_UTIL_H */
 /** @} */



More information about the gnucash-changes mailing list