summaryrefslogtreecommitdiff
path: root/test/spass/order.h
blob: 3817576fa721fbb07f58e3dd0dd0e0ecebf07d9d (plain)
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
/**************************************************************/
/* ********************************************************** */
/* *                                                        * */
/* *         INTERFACE FOR ALL ORDERING IMPLEMENTATIONS     * */
/* *                                                        * */
/* *  $Module:   ORDER                                      * */ 
/* *                                                        * */
/* *  Copyright (C) 1997, 2000, 2001 MPI fuer Informatik    * */
/* *                                                        * */
/* *  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         * */
/* *                                                        * */
/* *                                                        * */
/* $Revision: 21527 $                                        * */
/* $State$                                            * */
/* $Date: 2005-04-24 21:10:28 -0700 (Sun, 24 Apr 2005) $                             * */
/* $Author: duraid $                                       * */
/* *                                                        * */
/* *             Contact:                                   * */
/* *             Christoph Weidenbach                       * */
/* *             MPI fuer Informatik                        * */
/* *             Stuhlsatzenhausweg 85                      * */
/* *             66123 Saarbruecken                         * */
/* *             Email: weidenb@mpi-sb.mpg.de               * */
/* *             Germany                                    * */
/* *                                                        * */
/* ********************************************************** */
/**************************************************************/


/* $RCSfile$ */

#ifndef _ORDER_
#define _ORDER_

/**************************************************************/
/* Includes                                                   */
/**************************************************************/

#include "term.h"
#include "context.h"
#include "flags.h"
#include "symbol.h"

/**************************************************************/
/* TYPES and GLOBAL VARIABLES                                 */
/**************************************************************/

typedef enum { ord_UNCOMPARABLE,
	       ord_SMALLER_THAN,
	       ord_EQUAL,
	       ord_GREATER_THAN } ord_RESULT;

/* This array is used to count variable occurrences in two terms. */
/* It may be used by any available ordering.                     */
extern NAT ord_VARCOUNT[symbol__MAXSTANDARDVAR][2];

/* A precedence is needed in almost every ordering function. */
/* For performance reasons it is stored in a global variable, */
/* instead of passing it to all those functions, which are   */
/* often recursive. Nevertheless this variable must not be   */
/* set externally!                                           */
extern PRECEDENCE ord_PRECEDENCE;

/**************************************************************/
/*  INLINE FUNCTIONS                                          */
/**************************************************************/

static __inline__ ord_RESULT ord_Uncomparable(void)
{
  return ord_UNCOMPARABLE;
}

static __inline__ ord_RESULT ord_Equal(void)
{
  return ord_EQUAL;
}

static __inline__ ord_RESULT ord_GreaterThan(void)
{
  return ord_GREATER_THAN;
}

static __inline__ ord_RESULT ord_SmallerThan(void)
{
  return ord_SMALLER_THAN;
}

static __inline__ BOOL ord_IsGreaterThan(ord_RESULT Res)
{
  return ord_GREATER_THAN == Res;
}

static __inline__ BOOL ord_IsNotGreaterThan(ord_RESULT Res)
{
  return ord_GREATER_THAN != Res;
}

static __inline__ BOOL ord_IsSmallerThan(ord_RESULT Res)
{
  return ord_SMALLER_THAN == Res;
}

static __inline__ BOOL ord_IsNotSmallerThan(ord_RESULT Res)
{
  return ord_SMALLER_THAN != Res;
}

static __inline__ BOOL ord_IsEqual(ord_RESULT Res)
{
  return ord_EQUAL == Res;
}

static __inline__ BOOL ord_IsUncomparable(ord_RESULT Res)
{
  return ord_UNCOMPARABLE == Res;
}



/**************************************************************/
/*  FUNCTIONS                                                 */
/**************************************************************/

ord_RESULT ord_Not(ord_RESULT);
ord_RESULT ord_Compare(TERM, TERM, FLAGSTORE, PRECEDENCE);
ord_RESULT ord_ContCompare(CONTEXT, TERM, CONTEXT, TERM, FLAGSTORE, PRECEDENCE);
BOOL       ord_CompareEqual(TERM, TERM, FLAGSTORE);
BOOL       ord_ContGreater(CONTEXT, TERM, CONTEXT, TERM, FLAGSTORE, PRECEDENCE);
ord_RESULT ord_LiteralCompare(TERM,BOOL,TERM,BOOL,BOOL, FLAGSTORE, PRECEDENCE);
void       ord_Print(ord_RESULT);

#endif