File: codetable.h

package info (click to toggle)
mona 1.4-7-2
  • links: PTS
  • area: main
  • in suites: sarge
  • size: 1,996 kB
  • ctags: 3,939
  • sloc: ansic: 14,363; cpp: 12,610; sh: 1,076; yacc: 493; lex: 358; makefile: 150; lisp: 53
file content (83 lines) | stat: -rw-r--r-- 2,285 bytes parent folder | download | duplicates (2)
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
76
77
78
79
80
81
82
83
/*
 * MONA
 * Copyright (C) 1997-2004 BRICS.
 *
 * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
 * USA.
 */

#ifndef __CODETABLE_H
#define __CODETABLE_H

#include "code.h"

#define CODE_TABLE_SIZE 1019
#define CONJ_TABLE_SIZE 117

/**
class ConjNode {
public:
  ConjNode(unsigned h, VarCodeList *c, VarCodeList *r, Code *cc) :
    conjhash(h), conj(c), restrconj(r), code(cc) {}

  unsigned conjhash;
  VarCodeList *conj, *restrconj;
  Code *code;
};
**/

class CodeTable {
  Deque<Code*> table[CODE_TABLE_SIZE];
  Deque<SubstCopy> sclist;                       // used during reduction
/**
  DequeGC<ConjNode*> conjtable[CONJ_TABLE_SIZE]; // used during reduction
**/

public:
  CodeTable() 
  {stat_hits = stat_misses = nodes = makes = prev
     = red_proj = red_prod = red_other = num_prod = num_proj = num_other = 0;}

  VarCode insert(Code*); 
  bool    exists(Code&);
  Code   *findEquiv(Code*);
  void    remove(Code*);
  void    print_statistics();
  void    print_statistics2();
  void    print_reduction_statistics();
  void    print_sizes();
  void    init_print_progress();
  void    begin();
  void    update();
  void    done();
  void    print_progress();
  void    addSC(SubstCopy sc);
  void    clearSCTable();
  
/**
  ConjNode *conjLookup(unsigned conjhash, VarCodeList *conj, 
		       VarCodeList *restrconj, Code *code);
  void      conjInsert(ConjNode *n);
**/

  int stat_hits, stat_misses, nodes, total_nodes;

  int red_prod, red_proj, red_other; // number of reductions
  int num_prod, num_proj, num_other; // number of operations

  int makes, prev; // number of automata constructed
};

#endif