Added builder.h

This commit is contained in:
John Wiegley 2007-05-11 07:25:15 +00:00
parent bc3b0b5577
commit 76a2e60e39
4 changed files with 97 additions and 7 deletions

View file

@ -1,14 +1,14 @@
SUBDIRS = gdtoa
BUILT_SOURCES =
CLEANFILES =
EXTRA_DIST = LICENSE docs tests contrib scripts setup.py \
verify.sh run_verify.sh valgrind.sh \
src/TODO src/gnucash.cc
ESC_srcdir=`echo "$(srcdir)" | sed 's/\//\\\\\//g'`
ESC_builddir=`echo "$(top_builddir)" | sed 's/\//\\\\\//g'`
ESC_distdir=`echo "$(distdir)" | sed 's/\//\\\\\//g'`
EXTRA_DIST = docs tests
#(cd $(distdir)/docs; zip -r doxygen-html.zip html; rm -fr html)
dist-hook:
rm -fr `find $(distdir) -name .svn`
@ -105,9 +105,10 @@ libpyledger_la_SOURCES = \
pkginclude_HEADERS = \
src/amount.h \
src/balpair.h \
src/balance.h \
src/balpair.h \
src/binary.h \
src/builder.h \
src/commodity.h \
src/context.h \
src/csv.h \
@ -138,6 +139,7 @@ pkginclude_HEADERS = \
src/textual.h \
src/times.h \
src/transform.h \
src/tuples.hpp \
src/utils.h \
src/value.h \
src/xml.h \

View file

@ -8,12 +8,14 @@ libgdtoa_la_SOURCES = \
misc.c smisc.c strtoIQ.c strtoId.c strtoIdd.c strtoIf.c strtoIg.c \
strtoIx.c strtoIxL.c strtod.c strtodI.c strtodg.c strtof.c strtopQ.c \
strtopd.c strtopdd.c strtopf.c strtopx.c strtopxL.c strtorQ.c \
strtord.c strtordd.c strtorf.c strtorx.c strtorxL.c sum.c ulp.c
strtord.c strtordd.c strtorf.c strtorx.c strtorxL.c sum.c ulp.c \
strtodnrp.c
EXTRA_libgdtoa_la_SOURCES = arithchk.c qnan.c
BUILT_SOURCES = arith.h gd_qnan.h
CLEANFILES = arith.h gd_qnan.h arithchk qnan
CLEANFILES = arith.h gd_qnan.h arithchk qnan
EXTRA_DIST = LICENSE
arith.h: arithchk.c
$(CC) $(CFLAGS) -o $(top_builddir)/arithchk $< || \
@ -26,4 +28,4 @@ gd_qnan.h: qnan.c arith.h
$(top_builddir)/qnan > $(top_builddir)/$@
rm -f $(top_builddir)/qnan
pkginclude_HEADERS = gdtoa.h gdtoaimp.h arith.h gd_qnan.h
pkginclude_HEADERS = gdtoa.h gdtoaimp.h

View file

@ -6,3 +6,6 @@
that the memory is held by an auto_ptr until the constructor is
done; otherwise, an exception raised from within the constructor
will not call the destructor to free the memory.
- Using mmap for the binary reader; or determine if the performance is
even worth the maintenance headaches of that code altogether.

83
src/builder.h Normal file
View file

@ -0,0 +1,83 @@
#ifndef _BUILDER_H
#define _BUILDER_H
#include "xml.h"
namespace ledger {
/**
* @class builder_t
*
* @brief Represents an interface for building a data hierarchy.
*
* This interface is much like .NET's XmlWriter facility. It
* abstracts the kind of hierarchy we're building, instead focusing
* only on the relationships.
*/
class builder_t
{
virtual void pushAttribute(const string& name,
const string& value) = 0;
virtual void pushAttribute(const nameid_t name_id,
const string& value) = 0;
virtual void beginNode(const string& name) = 0;
virtual void beginNode(const nameid_t name_id) = 0;
virtual void appendText(const string& text) = 0;
virtual node_t * endNode(const optional<string>& name =
optional<string>()) = 0;
virtual node_t * endNode(const nameid_t name_id) = 0;
};
/**
* @class xml_builder_t
*
* @brief Build a generic node_t hierarchy.
*
* This builder can be used to parse ordinary XML into a document
* object structure which can then be traversed in memory.
*/
class xml_builder_t : public builder_t
{
};
/**
* @class journal_builder_t
*
* @brief This custom builder creates an XML-mirrored Ledger journal.
*
* Rather than simply creating a node_t hierarchy, as xml_builder_t
* does, this code creates the associated journal elements referred to
* by those nodes, and then refers to those elements via minimalist
* "shadow nodes".
*
* Thus, after building a <transaction> element, the element itself
* will have no children, but instead will point to a transaction_t
* object. If later an XPath expression desires to traverse the
* <transaction> element, all of the appropriate child nodes will be
* constructed on the fly, as if they'd been created in the first
* place by a regular xml_builder_t.
*/
class journal_builder_t : public xml_builder_t
{
};
/**
* @class xml_writer_t
*
* @brief Create textual XML on the given output stream.
*
* This builder, rather than manipulating data structures in memory,
* simply streams its contents on the fly to the given output stream.
* It uses only enough memory to remember the currently push
* attributes and text.
*/
class xml_writer_t : public builder_t
{
};
} // namespace ledger
#endif // _BUILDER_H