85be21057a058a0bdb12caac2bae553376442f5a
angie
  Mon Apr 15 10:56:28 2013 -0700
Refactoring to remove dependencies on annoGratorQuery from streamers,grators and formatters.  Instead, provide basic assembly info and
explicitly pass streamers(/grators) along with the rows that they
produced into formatters. ref #6152

diff --git src/inc/annoFormatter.h src/inc/annoFormatter.h
index d228382..a6beb34 100644
--- src/inc/annoFormatter.h
+++ src/inc/annoFormatter.h
@@ -1,54 +1,66 @@
 /* annoFormatter -- aggregates, formats and writes output from multiple sources */
 
 #ifndef ANNOFORMATTER_H
 #define ANNOFORMATTER_H
 
 #include "annoOption.h"
-#include "annoRow.h"
 #include "annoStreamer.h"
 
 // The real work of aggregating and formatting data is left to
 // subclass implementations.  The purpose of this module is to provide
 // an interface for communication with other components of the
 // annoGratorQuery framework, and simple methods shared by all
 // subclasses.
 
+struct annoStreamRows
+/* An annoStreamer and (possibly NULL) list of rows it generated. */
+    {
+    struct annoStreamer *streamer;	// annoStreamer interface for metadata about row data
+    struct annoRow *rowList;		// row data
+    };
+
 struct annoFormatter
 /* Generic interface to aggregate data fields from multiple sources and write
  * output. */
     {
     struct annoFormatter *next;
 
     // Public methods
     struct annoOption *(*getOptions)(struct annoFormatter *self);
     void (*setOptions)(struct annoFormatter *self, struct annoOption *options);
     /* Get and set output options */
 
-    void (*initialize)(struct annoFormatter *self, struct annoGratorQuery *query);
-    /* Initialize output (header, etc) and set query pointer */
+    void (*initialize)(struct annoFormatter *self, struct annoStreamer *primarySource,
+		       struct annoStreamer *integrators);
+    /* Initialize output (print header if applicable, etc). */
 
-    void (*formatOne)(struct annoFormatter *self, struct annoRow *primaryRow,
-		      struct slRef *gratorRowList);
-    /* Aggregate all sources' data for a single primarySource item into output. */
+    void (*formatOne)(struct annoFormatter *self, struct annoStreamRows *primaryData,
+		      struct annoStreamRows gratorData[], int gratorCount);
+    /* Aggregate all sources' data for a single primary-source item into output. */
 
     void (*close)(struct annoFormatter **pSelf);
     /* End of input; finish output, close connection/handle and free self. */
 
     // Private members -- callers are on the honor system to access these using only methods above.
     struct annoOption *options;
     struct annoGratorQuery *query;
     };
 
 // ---------------------- annoFormatter default methods -----------------------
 
 struct annoOption *annoFormatterGetOptions(struct annoFormatter *self);
 /* Return supported options and current settings.  Callers can modify and free when done. */
 
 void annoFormatterSetOptions(struct annoFormatter *self, struct annoOption *newOptions);
 /* Free old options and use clone of newOptions. */
 
 void annoFormatterFree(struct annoFormatter **pSelf);
 /* Free self. This should be called at the end of subclass close methods, after
  * subclass-specific connections are closed and resources are freed. */
 
+// -----------------------------------------------------------------------------
+
+struct annoStreamRows *annoStreamRowsNew(struct annoStreamer *streamerList);
+/* Returns an array of aS&R for each streamer in streamerList. Free array when done. */
+
 #endif//ndef ANNOFORMATTER_H