Mercurial > projects > mde
diff mde/mergetag/DataSet.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 | 5f90774ea1ef |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mde/mergetag/DataSet.d Fri Mar 07 17:51:02 2008 +0000 @@ -0,0 +1,56 @@ +/** This module contains the mergetag DataSet class, used for all reading and writing operations. + */ +module mde.mergetag.DataSet; + +// package imports +public import mde.mergetag.iface.IDataSection; +import mde.mergetag.DefaultData; +import mde.mergetag.exception; + + +/************************************************************************************************** + * Data class; contains a DataSection class instance for each loaded section of a file. + * + * Stored data is available for direct access via header and sec; all functions are just helper + * functions. + * + * Any class implementing IDataSection may be used to store data; by default a DefaultData class is + * used when reading a file. Another class may be used by creating the sections before reading the + * file or passing the reader a function to create the sections (see Reader.dataSecCreator). + * + * Could be a struct, except that structs are value types (not reference types). + */ +class DataSet +{ + DefaultData header; /// Header section. + IDataSection[ID] sec; /// Dynamic array of sections + + /// Template to return all sections of a child-class type. + T[ID] getSections (T : IDataSection) () { + T[ID] ret; + foreach (ID id, IDataSection s; sec) { + T x = cast(T) s; + if (x) ret[id] = x; // if non-null + } + return ret; + } +} + +debug (mdeUnitTest) { + import tango.util.log.Log : Log, Logger; + + private Logger logger; + static this() { + logger = Log.getLogger ("mde.mergetag.DataSet"); + } + + unittest { // Only covers DataSet really. + DataSet ds = new DataSet; + ds.sec[cast(ID)"test"] = new DefaultData; + assert (ds.getSections!(DefaultData)().length == 1); + ds.sec[cast(ID)"test"].addTag ("int",cast(ID)"T"," -543 "); + assert (ds.getSections!(DefaultData)()[cast(ID)"test"]._int[cast(ID)"T"] == -543); + + logger.info ("Unittest complete."); + } +}