diff mde/mergetag/iface/IDataSection.d @ 14:0047b364b6d9

Changed much of the mergetag structure and some functionality. First tests on windows. Changes to mergetag Reader methods. New functionality allowing a dataSecCreator to cause sections to be skipped. Moved several of the mergetag modules and some of their contents around. Moved all interfaces to separate modules in iface/ . IReader & IWriter interfaces exist; MTTReader, MTBReader, MTTWriter, MTBWriter & DualWriter all now exist and implement IReader/IWriter (although the MTB variants are dummy classes); makeReader & makeWriter should both be fully functional. Tested building on windows with partial success (works but window won't open). Included a temporary hack from windows to get supported resolutions information. committer: Diggory Hardy <diggory.hardy@gmail.com>
author Diggory Hardy <diggory.hardy@gmail.com>
date Fri, 07 Mar 2008 17:51:02 +0000
parents
children 9cb7b9310168
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mde/mergetag/iface/IDataSection.d	Fri Mar 07 17:51:02 2008 +0000
@@ -0,0 +1,51 @@
+/** This module contains the interface IDataSection used by DataSet.
+*
+* It has been given its own module to avoid cyclic dependancies and separate out the functionality
+* of mergetag.
+*
+* Also some base mergetag symbols have been moved here.
+*/
+module mde.mergetag.iface.IDataSection;
+
+/** Typedef for data & section indexes (can be changed to ulong if necessary.) */
+typedef char[] ID;
+
+/**
+ * Interface for data storage classes, generally called DataSections, which contain all data-tags
+ * loaded from a single section of a file.
+ *
+ * A class implementing this may implement the addTag function to do whatever it likes with the
+ * data passed. DefaultData is one implementation which separates this data out into supported
+ * types and stores it appropriately (allowing merging with existing entries by keeping whichever
+ * tag was last loaded), while ignoring unsupported types. A different
+ * implementation could filter out the tags desired and use them directly, and ignore the rest.
+ *
+ * The tango.scrapple.text.convert.parseTo module provides a useful set of templated functions to
+ * convert the data accordingly. It is advised to keep the type definitions as defined in the file-
+ * format except for user-defined types, although this isn't necessary for library operation
+ * (addTag and writeAll are solely responsible for using and setting the type, ID and data fields).
+ *
+ * Another idea for a DataSection class:
+ * Use a void*[ID] variable to store all data (may also need a type var for each item).
+ * addTag should call a templated function which calls parse then casts to a void* and stores the data.
+ * Use a templated get(T)(ID) method which checks the type and casts to T.
+ */
+interface IDataSection
+{
+    /** Delegate passed to writeAll. */
+    typedef void delegate (char[],ID,char[]) ItemDelg;
+    
+    /** Handles parsing of data items for all recognised types.
+     *
+     * Should ignore unsupported types/unwanted tags.
+     *
+     * TextExceptions (thrown by parseTo/parseFrom) are caught and a warning logged; execution
+     * then continues (so the offending tag gets dropped). */
+    void addTag (char[],ID,char[]);
+    
+    /** Responsible for getting all data tags saved.
+    *
+    * writeAll should call the ItemDelg once for each tag to be saved with parameters in the same
+    * form as received by addTag (char[] type, ID id, char[] data). */
+    void writeAll (ItemDelg);
+}