File: QuickFill.h

package info (click to toggle)
xacc 1.0.17-2
  • links: PTS
  • area: main
  • in suites: hamm
  • size: 4,300 kB
  • ctags: 4,952
  • sloc: ansic: 60,461; sh: 1,358; makefile: 238
file content (75 lines) | stat: -rw-r--r-- 3,436 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
/********************************************************************\
 * QuickFill.h -- the quickfill tree data structure                 *
 * Copyright (C) 1997 Robin D. Clark                                *
 *                                                                  *
 * This program is free software; you can redistribute it and/or    *
 * modify it under the terms of the GNU General Public License as   *
 * published by the Free Software Foundation; either version 2 of   *
 * the License, or (at your option) any later version.              *
 *                                                                  *
 * This program is distributed in the hope that it will be useful,  *
 * but WITHOUT ANY WARRANTY; without even the implied warranty of   *
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the    *
 * GNU General Public License for more details.                     *
 *                                                                  *
 * You should have received a copy of the GNU General Public License*
 * along with this program; if not, write to the Free Software      *
 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.        *
 *                                                                  *
 *   Author: Rob Clark                                              *
 * Internet: rclark@cs.hmc.edu                                      *
 *  Address: 609 8th Street                                         *
 *           Huntington Beach, CA 92648-4632                        *
\********************************************************************/

#ifndef __QUICKFILL_H__
#define __QUICKFILL_H__

#include "config.h"

#include "Transaction.h"

#define QFNUM 27

/** STRUCTS *********************************************************/

/* The way quickfill works is this: the decscription field of a transaction
 * is used to insert a pointer to itself into the quickfill tree.  The
 * QuickFill struct is a node in the tree, and the qf array is an array
 * of pointers to children of the node.  (NULL, if no corresponding child.)
 * The index of the array is determined by the next letter in the string
 * that is the description field.  The trans field is a pointer to the last
 * inserted child that made it to this node.  At the root of the tree is
 * a QuickFill struct, with trans == NULL, and the array of pointers to
 * children.  When a transaction is inserted, the first letter of the
 * description field determines which child the transaction goes into.  
 * If the child is NULL, a new QuickFill node is created.  Otherwise,
 * the trans field of the child is changed to point to the new transaction.
 * Then, recursively, the process is repeated, with the next character in
 * the description field as the index to the array.  The recursion stops
 * when the end of the descriptions string is reached. */
typedef struct _quickfill {
  Transaction       *trans;        /* the first matching account         */
  struct _quickfill *qf[QFNUM];    /* array of children in the tree      */
} QuickFill;

/** PROTOTYPES ******************************************************/
QuickFill *mallocQuickFill( void );
void       freeQuickFill( QuickFill *qf );
QuickFill *getQuickFill( QuickFill *qf, char c );
void       qfInsertTransaction( QuickFill *qf, Transaction *trans );

/** GLOBALS *********************************************************/


#endif