first draft of a merge rule set

Neil Williams linux at codehelp.co.uk
Mon Apr 12 14:52:56 EDT 2004


OK, this is a DRAFT!! It only outlines the barest bones of the future code. 
I'm posting it now because I've got another few days of other work that will 
mean this will go quiet until the weekend.

However, it does outline how I want to provide rule definitions as templates 
and to generate those templates from existing .c struct definitions. It's 
worth getting things sorted at this stage - things like naming conventions 
and frameworks are difficult to correct later.

I won't put it all in the email - I'm v.fond of docbook and instead of wasting 
paper writing plans on paper, I compose my frameworks and notes in docbook. 
It means I can have my own documentation at my fingertips - always open in a 
nearby window. It also means that it's easy to convert into lots of formats.

http://www.codehelp.co.uk/code/index.html

The manpages for g_merge, qofbook and gncinvoice are more for my own reference 
than anything else, although I have put some comments in some files.

// The Primitives
#define GMCHAR			1
#define GMINT			2
#define GMFLOAT			3
#define GMDOUBLE		4
// First level compound / customised
#define GMSTRING		10 // char*
#define GMGBOOLEAN		11
#define GMGINT			12
#define GMGINT16		13
#define GMGINT64		14
// Second level compound - objects that can still be resolved to a single 
primitive
#define GMGNC_QUOTE_SOURCE	100
....
// Third level - objects that contain more than one primitive.
#define GMGNC_COMMODITY		1000

	Compound objects are then further defined in terms of their component 
primitives.
	Note that gnc_commodity is not complete in this example - it has been 
shortened to allow easier testing. The create_rule adds the details of each
field in the compound object to the rule set for that object. 
	
	
#define GMGNC_COMMODITY_FIELDS(x) {		\
	create_rule(x, "fullname", GMSTRING); 	\
	create_rule(x, "namespace", GMSTRING);	\
	create_rule(x, "mnemonic", GMSTRING); 	\
	create_rule(x, "printname", GMSTRING);	\
	create_rule(x, "exchange_code", GMSTRING); \
	create_rule(x, "fraction", GMINT); 	\
	create_rule(x, "unique_name", GMSTRING); 	\
	create_rule(x, "mark", GMGINT16); 		\
	create_rule(x, "quote_flag", GMGBOOLEAN); 	\
	create_rule(x, "quote_source", GMGNC_QUOTE_SOURCE); }

So far, a routine is working to assemble these rule sets into a workable 
structure. 

Next stage is to get the data into the same structures as the rules, then the 
comparison functions can start.


-- 

Neil Williams
=============
http://www.codehelp.co.uk/
http://www.dclug.org.uk/
http://www.isbn.org.uk/
http://sourceforge.net/projects/isbnsearch/

http://www.biglumber.com/x/web?qs=0x8801094A28BCB3E3
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: signature
Url : http://lists.gnucash.org/pipermail/gnucash-devel/attachments/20040412/717f0bb0/attachment.bin


More information about the gnucash-devel mailing list