You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucy.apache.org by ma...@apache.org on 2012/06/18 06:23:24 UTC

[lucy-commits] svn commit: r1351203 - in /lucy/trunk/charmonizer: buildbin/meld.pl charmonize.c src/Charmonizer/Core/ConfWriter.c src/Charmonizer/Core/ConfWriter.h src/Charmonizer/Core/ConfWriterC.c

Author: marvin
Date: Mon Jun 18 04:23:24 2012
New Revision: 1351203

URL: http://svn.apache.org/viewvc?rev=1351203&view=rev
Log:
Genericize ConfWriter.

Change ConfWriter to iterate over a list of generic writers, rather than
calling out to the C writer specifically.

Modified:
    lucy/trunk/charmonizer/buildbin/meld.pl
    lucy/trunk/charmonizer/charmonize.c
    lucy/trunk/charmonizer/src/Charmonizer/Core/ConfWriter.c
    lucy/trunk/charmonizer/src/Charmonizer/Core/ConfWriter.h
    lucy/trunk/charmonizer/src/Charmonizer/Core/ConfWriterC.c

Modified: lucy/trunk/charmonizer/buildbin/meld.pl
URL: http://svn.apache.org/viewvc/lucy/trunk/charmonizer/buildbin/meld.pl?rev=1351203&r1=1351202&r2=1351203&view=diff
==============================================================================
--- lucy/trunk/charmonizer/buildbin/meld.pl (original)
+++ lucy/trunk/charmonizer/buildbin/meld.pl Mon Jun 18 04:23:24 2012
@@ -182,6 +182,7 @@ sub meld_start {
  */
 
 #define CHAZ_USE_SHORT_NAMES
+#define CHAZ_CONFWRITER_INTERNAL
 
 END_STUFF
 }

Modified: lucy/trunk/charmonizer/charmonize.c
URL: http://svn.apache.org/viewvc/lucy/trunk/charmonizer/charmonize.c?rev=1351203&r1=1351202&r2=1351203&view=diff
==============================================================================
--- lucy/trunk/charmonizer/charmonize.c (original)
+++ lucy/trunk/charmonizer/charmonize.c Mon Jun 18 04:23:24 2012
@@ -34,6 +34,7 @@
 #include "Charmonizer/Probe/VariadicMacros.h"
 #include "Charmonizer/Core/HeaderChecker.h"
 #include "Charmonizer/Core/ConfWriter.h"
+#include "Charmonizer/Core/ConfWriterC.h"
 
 int main(int argc, char **argv) {
     /* Parse and process arguments. */
@@ -46,6 +47,7 @@ int main(int argc, char **argv) {
         char *cc_command = argv[1];
         char *cc_flags   = argv[2];
         chaz_Probe_init(cc_command, cc_flags);
+        chaz_ConfWriterC_enable();
     }
 
     /* Run probe modules. */

Modified: lucy/trunk/charmonizer/src/Charmonizer/Core/ConfWriter.c
URL: http://svn.apache.org/viewvc/lucy/trunk/charmonizer/src/Charmonizer/Core/ConfWriter.c?rev=1351203&r1=1351202&r2=1351203&view=diff
==============================================================================
--- lucy/trunk/charmonizer/src/Charmonizer/Core/ConfWriter.c (original)
+++ lucy/trunk/charmonizer/src/Charmonizer/Core/ConfWriter.c Mon Jun 18 04:23:24 2012
@@ -18,60 +18,95 @@
 
 #include "Charmonizer/Core/Util.h"
 #include "Charmonizer/Core/ConfWriter.h"
-#include "Charmonizer/Core/ConfWriterC.h"
 #include <stdarg.h>
 #include <stdio.h>
 
+#define CW_MAX_WRITERS 10
+static struct {
+    ConfWriter *writers[CW_MAX_WRITERS];
+    size_t num_writers;
+} CW;
+
 void
 ConfWriter_init(void) {
-    ConfWriterC_enable();
+    CW.num_writers = 0;
     return;
 }
 
 void
 ConfWriter_clean_up(void) {
-    ConfWriterC_clean_up();
+    size_t i;
+    for (i = 0; i < CW.num_writers; i++) {
+        CW.writers[i]->clean_up();
+    }
 }
 
 void
 ConfWriter_append_conf(const char *fmt, ...) {
     va_list args;
+    size_t i;
     
-    va_start(args, fmt);
-    ConfWriterC_vappend_conf(fmt, args);
-    va_end(args);
+    for (i = 0; i < CW.num_writers; i++) {
+        va_start(args, fmt);
+        CW.writers[i]->vappend_conf(fmt, args);
+        va_end(args);
+    }
 }
 
 void
 ConfWriter_add_def(const char *sym, const char *value) {
-    ConfWriterC_add_def(sym, value);
+    size_t i;
+    for (i = 0; i < CW.num_writers; i++) {
+        CW.writers[i]->add_def(sym, value);
+    }
 }
 
 void
 ConfWriter_add_typedef(const char *type, const char *alias) {
-    ConfWriterC_add_typedef(type, alias);
+    size_t i;
+    for (i = 0; i < CW.num_writers; i++) {
+        CW.writers[i]->add_typedef(type, alias);
+    }
 }
 
 void
 ConfWriter_add_sys_include(const char *header) {
-    ConfWriterC_add_sys_include(header);
+    size_t i;
+    for (i = 0; i < CW.num_writers; i++) {
+        CW.writers[i]->add_sys_include(header);
+    }
 }
 
 void
 ConfWriter_add_local_include(const char *header) {
-    ConfWriterC_add_local_include(header);
+    size_t i;
+    for (i = 0; i < CW.num_writers; i++) {
+        CW.writers[i]->add_local_include(header);
+    }
 }
 
 void
 ConfWriter_start_module(const char *module_name) {
+    size_t i;
     if (chaz_Util_verbosity > 0) {
         printf("Running %s module...\n", module_name);
     }
-    ConfWriterC_start_module(module_name);
+    for (i = 0; i < CW.num_writers; i++) {
+        CW.writers[i]->start_module(module_name);
+    }
 }
 
 void
 ConfWriter_end_module(void) {
-    ConfWriterC_end_module();
+    size_t i;
+    for (i = 0; i < CW.num_writers; i++) {
+        CW.writers[i]->end_module();
+    }
+}
+
+void
+ConfWriter_add_writer(ConfWriter *writer) {
+    CW.writers[CW.num_writers] = writer;
+    CW.num_writers++;
 }
 

Modified: lucy/trunk/charmonizer/src/Charmonizer/Core/ConfWriter.h
URL: http://svn.apache.org/viewvc/lucy/trunk/charmonizer/src/Charmonizer/Core/ConfWriter.h?rev=1351203&r1=1351202&r2=1351203&view=diff
==============================================================================
--- lucy/trunk/charmonizer/src/Charmonizer/Core/ConfWriter.h (original)
+++ lucy/trunk/charmonizer/src/Charmonizer/Core/ConfWriter.h Mon Jun 18 04:23:24 2012
@@ -25,8 +25,11 @@ extern "C" {
 #endif
 
 #include <stddef.h>
+#include <stdarg.h>
 #include "Charmonizer/Core/Defines.h"
 
+struct chaz_ConfWriter;
+
 /* Initialize elements needed by ConfWriter.  Must be called before anything
  * else, but after os and compiler are initialized.
  */
@@ -74,6 +77,41 @@ chaz_ConfWriter_start_module(const char 
 void
 chaz_ConfWriter_end_module(void);
 
+void
+chaz_ConfWriter_add_writer(struct chaz_ConfWriter *writer);
+
+#ifdef CHAZ_CONFWRITER_INTERNAL
+typedef void
+(*chaz_ConfWriter_clean_up_t)(void);
+typedef void
+(*chaz_ConfWriter_vappend_conf_t)(const char *fmt, va_list args); 
+typedef void
+(*chaz_ConfWriter_add_def_t)(const char *sym, const char *value);
+typedef void
+(*chaz_ConfWriter_add_typedef_t)(const char *type, const char *alias);
+typedef void
+(*chaz_ConfWriter_add_sys_include_t)(const char *header);
+typedef void
+(*chaz_ConfWriter_add_local_include_t)(const char *header);
+typedef void
+(*chaz_ConfWriter_start_module_t)(const char *module_name);
+typedef void
+(*chaz_ConfWriter_end_module_t)(void);
+typedef struct chaz_ConfWriter {
+    chaz_ConfWriter_clean_up_t          clean_up;
+    chaz_ConfWriter_vappend_conf_t      vappend_conf;
+    chaz_ConfWriter_add_def_t           add_def;
+    chaz_ConfWriter_add_typedef_t       add_typedef;
+    chaz_ConfWriter_add_sys_include_t   add_sys_include;
+    chaz_ConfWriter_add_local_include_t add_local_include;
+    chaz_ConfWriter_start_module_t      start_module;
+    chaz_ConfWriter_end_module_t        end_module;
+} chaz_ConfWriter;
+#ifdef CHAZ_USE_SHORT_NAMES
+  #define ConfWriter chaz_ConfWriter
+#endif /* CHAZ_USE_SHORT_NAMES */
+#endif /* CHAZ_CONFWRITER_INTERNAL */
+
 #ifdef   CHAZ_USE_SHORT_NAMES
   #define ConfWriter_init                   chaz_ConfWriter_init
   #define ConfWriter_clean_up               chaz_ConfWriter_clean_up

Modified: lucy/trunk/charmonizer/src/Charmonizer/Core/ConfWriterC.c
URL: http://svn.apache.org/viewvc/lucy/trunk/charmonizer/src/Charmonizer/Core/ConfWriterC.c?rev=1351203&r1=1351202&r2=1351203&view=diff
==============================================================================
--- lucy/trunk/charmonizer/src/Charmonizer/Core/ConfWriterC.c (original)
+++ lucy/trunk/charmonizer/src/Charmonizer/Core/ConfWriterC.c Mon Jun 18 04:23:24 2012
@@ -44,6 +44,7 @@ static FILE *charmony_fh  = NULL;
 static ConfElem *defs      = NULL;
 static size_t    def_cap   = 0;
 static size_t    def_count = 0;
+static ConfWriter CWC_conf_writer;
 
 /* Open the charmony.h file handle.  Print supplied text to it, if non-null.
  * Print an explanatory comment and open the include guard.
@@ -61,7 +62,16 @@ S_clear_def_list(void);
 
 void
 ConfWriterC_enable(void) {
+    CWC_conf_writer.clean_up          = chaz_ConfWriterC_clean_up;
+    CWC_conf_writer.vappend_conf      = chaz_ConfWriterC_vappend_conf;
+    CWC_conf_writer.add_def           = chaz_ConfWriterC_add_def;
+    CWC_conf_writer.add_typedef       = chaz_ConfWriterC_add_typedef;
+    CWC_conf_writer.add_sys_include   = chaz_ConfWriterC_add_sys_include;
+    CWC_conf_writer.add_local_include = chaz_ConfWriterC_add_local_include;
+    CWC_conf_writer.start_module      = chaz_ConfWriterC_start_module;
+    CWC_conf_writer.end_module        = chaz_ConfWriterC_end_module;
     S_open_charmony_h(NULL);
+    ConfWriter_add_writer(&CWC_conf_writer);
     return;
 }