File indexing completed on 2025-02-21 10:05:33
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017 #ifndef CERN_QP_SEGMENT
0018 #define CERN_QP_SEGMENT
0019
0020 #include <stdio.h>
0021
0022
0023 #include "cern_types.h"
0024
0025 typedef Int32 * Segment;
0026
0027 #include "qp_query.h"
0028
0029
0030
0031 typedef struct _label_ {
0032
0033 Segment addr;
0034
0035 int n;
0036 int size;
0037 Segment *ref;
0038
0039 } Label;
0040
0041
0042 typedef struct _label_tab_ {
0043 int n;
0044 int size;
0045 Label *tab;
0046 } LabelTab;
0047
0048
0049 typedef struct _segbuild_ {
0050
0051
0052 bool ok;
0053 int n;
0054 Segment seg;
0055 Segment cur;
0056 Segment last_opc;
0057
0058
0059 LabelTab *lt;
0060
0061 } SegBuild;
0062
0063
0064 SegBuild *
0065 new_segbuild( int * errp );
0066
0067 void
0068 free_segbuild( SegBuild * sbp );
0069
0070 Segment
0071 segment_from_segbuild( SegBuild *sbp );
0072
0073 int
0074 qp_seg_new_label( SegBuild * sbp, int *errp );
0075
0076 bool
0077 qp_seg_flag_opc( SegBuild * sbp, Int32 v, int * errp );
0078
0079 bool
0080 qp_seg_emit_opc( SegBuild * sbp, Int32 v, int * errp );
0081
0082 bool
0083 qp_seg_emit_word( SegBuild * sbp, Int32 v, int * errp );
0084
0085 bool
0086 qp_seg_emit_ref( SegBuild * sbp, int lid, int *errp );
0087
0088 bool
0089 qp_seg_emit_label( SegBuild * sbp, int lid, int *errp );
0090
0091 bool
0092 qp_seg_labels_resolved( SegBuild * sbp, int *errp );
0093
0094
0095 void
0096 dump_segment( FILE * fp, char * leader, QueryExe * qe, Segment s );
0097
0098 #endif