1/*********************************************************************
2  *   Copyright 1993, UCAR/Unidata
3  *   See netcdf/COPYRIGHT file for copying and redistribution conditions.
4  *********************************************************************/
5
6#ifndef DCECONSTRAINTS_H
7#define DCECONSTRAINTS_H 1
8
9#include "ceconstraints.h"
10
11/* Provide a universal cast type containing common fields */
12
13/* Define the common "supertype */
14typedef struct DCEnode {
15    CEsort sort;
16DCEnode;
17
18/* The slice structure is assumed common to all uses.
19   It is initially established from [first:stride:last]
20*/
21typedef struct DCEslice {
22    DCEnode node;
23    size_t first;
24    size_t stride;
25    size_t length;
26    size_t last;   /* first + length - 1*/
27    size_t count;  /* (length + (stride-1))/ stride == actual # of elements returned to client*/
28    size_t declsize;  /* from defining dimension, if any.*/
29DCEslice;
30
31typedef struct DCEsegment {
32    DCEnode node;
33    char* name;
34    int slicesdefined; /*1=>slice counts defined, except declsize*/
35    int slicesdeclized; /*1=>slice declsize defined */
36    size_t rank;
37    DCEslice slices[NC_MAX_VAR_DIMS];
38    void* annotation;
39DCEsegment;
40
41typedef struct DCEfcn {
42    DCEnode node;
43    char* name;
44    NClistargs;
45DCEfcn;
46
47typedef struct DCEvar {
48    DCEnode node;
49    NClistsegments;
50    void* annotation;
51DCEvar;
52
53typedef struct DCEconstant {
54    DCEnode node;
55    CEsort discrim;
56    char* text;
57    long long intvalue;
58    double floatvalue;
59DCEconstant;
60
61typedef struct DCEvalue {
62    DCEnode node;
63    CEsort discrim;
64    /* Do not bother with a union */
65    DCEconstantconstant;
66    DCEvarvar;
67    DCEfcnfcn;
68DCEvalue;
69
70typedef struct DCEselection {
71    DCEnode node;
72    CEsort operator;
73    DCEvaluelhs;
74    NClistrhs;
75DCEselection;
76
77typedef struct DCEprojection {
78    DCEnode node;
79    CEsort discrim;
80    /* Do not bother with a union */
81    DCEvarvar;
82    DCEfcnfcn;
83DCEprojection;
84
85typedef struct DCEconstraint {
86    DCEnode node;
87    NClistprojections;
88    NClistselections;
89DCEconstraint;
90
91
92extern int dceparseconstraints(char* constraintsDCEconstraintDCEonstraint);
93extern int dceslicecompose(DCEslices1DCEslices2DCEslicesr);
94extern int dcemergeprojectionlists(NClistdstNClistsrc);
95
96extern DCEnodedceclone(DCEnodenode);
97extern NClistdceclonelist(NClistlist);
98
99extern void dcefree(DCEnodenode);
100extern void dcefreelist(NClistlist);
101
102extern char* dcetostring(DCEnodenode);
103extern char* dcelisttostring(NClistlist,char*);
104extern void dcetobuffer(DCEnodenodeNCbytesbuf);
105extern void dcelisttobuffer(NClistlistNCbytesbuf,char*);
106extern char* dcerawtostring(void*);
107extern char* dcerawlisttostring(NClist*);
108
109extern NClistdceallnodes(DCEnodenodeCEsort which);
110
111extern DCEnodedcecreate(CEsort sort);
112
113extern void dcemakewholeslice(DCEsliceslice, size_t declsize);
114extern void dcemakewholeprojection(DCEprojection*);
115
116extern int dceiswholesegment(DCEsegment*);
117extern int dceiswholeslice(DCEslice*);
118extern int dceiswholeseglist(NClist*);
119extern int dceiswholeprojection(DCEprojection*);
120extern int dcesamepath(NClistlist1NClistlist2);
121extern int dcemergeprojections(DCEprojectiondstDCEprojectionsrc);
122
123extern void dcesegment_transpose(DCEsegmentseg,
124  size_t* start,
125  size_t* count,
126  size_t* stride,
127  size_t* sizes
128 );
129
130
131/* Find leftmost index of segment slices
132   s.t. that index and all upto last
133   satisfy dceiswholeslice
134*/
135extern size_t dcesafeindex(DCEsegmentseg, size_t start, size_t stop);
136
137/* Compute segment size for start upto stop */
138extern size_t dcesegmentsize(DCEsegment*, size_t start, size_t stop);
139
140/* Convert a DCE projection/selection/constraint instance into a string
141   that can be used with a url. Caller must free returned string.
142*/
143
144extern char* dcebuildprojectionstring(NClistprojections);
145extern char* dcebuildselectionstring(NClistselections);
146extern char* dcebuildconstraintstring(DCEconstraintconstraints);
147
148extern int dceverbose;
149
150#endif /*DCECONSTRAINTS_H*/


HyperKWIC - Version 7.20DA executed at 11:37 on 27 Oct 2017 | Polyhedron Solutions - INTERNAL USE | COMMERCIAL (Any O/S) SN 4AKIed