BAM
Abstract Machine for Bottom-Up Evaluation with the Push Method
inst.h
Go to the documentation of this file.
1 // ============================================================================
2 // Project: Deductive Database
3 // Filename: inst.h
4 // Purpose: Enumeration Type for Abstract Machine Instructions (OpCodes)
5 // Last Change: 19.09.2017
6 // Language: C++
7 // EMail: brass@informatik.uni-halle.de
8 // WWW: http://www.informatik.uni-halle.de/~brass/
9 // Address: Feldschloesschen 15, D-06120 Halle (Saale), GERMANY
10 // Copyright: (c) 2017 by Stefan Brass
11 // License: See file "LICENSE" for copying conditions.
12 // Note: There is no warranty at all - this code may contain bugs.
13 // ============================================================================
14 
15 
22 //=============================================================================
23 // Include File Frame:
24 //=============================================================================
25 
26 #ifndef INST_INCLUDED
27 #define INST_INCLUDED
28 
29 //=============================================================================
30 // Used Types and Macros:
31 //=============================================================================
32 
33 #ifndef VER_INCLUDED
34 #include "../base/ver.h"
35 #endif
36 
37 #ifndef STR_INCLUDED
38 #include "../base/str.h"
39 #endif
40 
41 #ifndef CHECK_INCLUDED
42 #include "../base/check.h"
43 #endif
44 
45 #ifndef ITYPE_INCLUDED
46 #include "itype.h"
47 #endif
48 
49 //=============================================================================
50 // Exported Types:
51 //=============================================================================
52 
53 //-----------------------------------------------------------------------------
54 // inst_t: Instructions of the bottom-up abstract machine (OpCodes).
55 //-----------------------------------------------------------------------------
56 
61 typedef enum inst_enum {
62  // Null instruction (NOOP):
63  INST_NULL,
64 
65  // Instruction to stop program execution:
66  INST_HALT,
67 
68  // Procedure calls:
69  INST_CALL,
70  INST_RETURN,
71 
72  // Duplicate check:
73  INST_DUPCHECK,
74  INST_DUPCHECK_2,
75  INST_DUPCHECK_2B,
76 
77  // Saving and restoring values of variables:
78  INST_SAVE_VAR,
79  INST_RESTORE_VAR,
80 
81  // Instructions for saving and restoring cursors:
82  INST_SAVE_LIST_CUR,
83  INST_SAVE_MMAP_CUR,
84  INST_SAVE_MMAP_1_1_CUR,
85  INST_RESTORE_LIST_CUR,
86  INST_RESTORE_MMAP_CUR,
87  INST_RESTORE_MMAP_1_1_CUR,
88 
89  // Instructions for loops over cursors:
90  INST_LOOP_LIST,
91  INST_LOOP_LIST_2,
92  INST_LOOP_MMAP,
93  INST_LOOP_MMAP_1_1,
94  INST_GET_COL,
95  INST_GET_LIST_2_COL_1,
96  INST_GET_LIST_2_COL_2,
97  INST_GET_MMAP_1_1_OUT_1,
98  INST_END_LOOP,
99  INST_END_LOOP_LIST_2,
100  INST_END_LOOP_MMAP_1_1,
101 
102  // Conditions:
103  INST_IF_VAR_IS,
104  INST_IF_VAR_EQ,
105 
106  // Inserting tuples in relations:
107  INST_INSERT_LIST,
108  INST_INSERT_LIST_2,
109  INST_INSERT_LIST_2_V,
110  INST_INSERT_MMAP,
111  INST_INSERT_MMAP_1_1,
112 
113  // Debugging support:
114  INST_TRACE_CALL_2
115 } inst_t;
116 
117 //=============================================================================
118 // Exported Functions:
119 //=============================================================================
120 
121 //-----------------------------------------------------------------------------
122 // inst_valid: Is the parameter a valid element of the enumeration type?
123 //-----------------------------------------------------------------------------
124 
125 #if VER_DEBUG
126 
132 bool inst_valid(inst_t inst);
133 #endif
134 
135 //-----------------------------------------------------------------------------
136 // inst_name:
137 //-----------------------------------------------------------------------------
138 
145 str_t inst_name(inst_t inst);
146 
147 //-----------------------------------------------------------------------------
148 // inst_type:
149 //-----------------------------------------------------------------------------
150 
157 itype_t inst_type(inst_t inst);
158 
159 
160 //=============================================================================
161 // End of File:
162 //=============================================================================
163 
164 #endif
165 
enum itype_enum itype_t
inst_enum
Definition: inst.h:61
itype_t inst_type(inst_t inst)
Definition: inst.cpp:244
const char * str_t
Definition: str.h:41
str_t inst_name(inst_t inst)
Definition: inst.cpp:103
Enumeration type for classifying BAM instructions by arguments.
enum inst_enum inst_t