/[ascend]/trunk/base/generic/compiler/instance_types.h
ViewVC logotype

Diff of /trunk/base/generic/compiler/instance_types.h

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 33 by ben.allan, Sun Dec 26 20:06:01 2004 UTC revision 54 by jds, Tue Aug 2 11:20:09 2005 UTC
# Line 1  Line 1 
1  /**<  /*
2   *  Real Ascend Instance Types   *  Real Ascend Instance Types
3   *  by Tom Epperly   *  by Tom Epperly
4   *  Version: $Revision: 1.29 $   *  Version: $Revision: 1.29 $
# Line 25  Line 25 
25   *  along with the program; if not, write to the Free Software Foundation,   *  along with the program; if not, write to the Free Software Foundation,
26   *  Inc., 675 Mass Ave, Cambridge, MA 02139 USA.  Check the file named   *  Inc., 675 Mass Ave, Cambridge, MA 02139 USA.  Check the file named
27   *  COPYING.   *  COPYING.
28     */
29    
30    #ifndef __INSTANCE_TYPES_H_SEEN__
31    #define __INSTANCE_TYPES_H_SEEN__
32    
33    /** @file
34     *  Real Ascend Instance Types.
35     *  <pre>
36     *  When #including instance_types.h, make sure these files are #included first:
37     *         #include "instance_enum.h"
38   *   *
39   *  Fields not to be accessed by any client program   *  Fields not to be accessed by any client program
40   *  except by the read-only functions in headers.   *  except by the read-only functions in headers.
41   *  The write functions in atomvalue.h are also reasonable for   *  The write functions in atomvalue.h are also reasonable for
42   *  clients to use.   *  clients to use.
43   *  Clients should never have to include much beyond instance_enum.h.   *  Clients should never have to include much beyond instance_enum.h.
44   */   *
   
 #ifndef __INSTANCE_TYPES_H_SEEN__  
 #define __INSTANCE_TYPES_H_SEEN__  
   
   
 /**<  
45   *  All of the following structures should be a multiple of *8*;   *  All of the following structures should be a multiple of *8*;
46   *  being a multiple of 4 is not sufficient. Pad if necessary.   *  being a multiple of 4 is not sufficient. Pad if necessary.
47   *      RealInstance   *  RealInstance
48   *  IntegerInstance   *  IntegerInstance
49   *  BooleanInstance   *  BooleanInstance
50   *  SymbolInstance   *  SymbolInstance
# Line 54  Line 58 
58   *  start children in an 8 byte.   *  start children in an 8 byte.
59   *   *
60   *  This has to hold for both 4 and 8 byte ptr/long machines.   *  This has to hold for both 4 and 8 byte ptr/long machines.
61     *  </pre>
62   */   */
63    
64  #if SIZEOF_VOID_P == 8  #if SIZEOF_VOID_P == 8
# Line 63  Line 68 
68  #endif  #endif
69  /**< if LONGCHILDREN, then pointers are 8 bytes */  /**< if LONGCHILDREN, then pointers are 8 bytes */
70    
71  /**< at present, I don't believe the following define is needed */  /* at present, I don't believe the following define is needed */
72  /**< # if defined(_HPUX_SOURCE) || defined(_SGI_SOURCE) */  /* # if defined(_HPUX_SOURCE) || defined(_SGI_SOURCE) */
73  /**< # define ALIGNSTUPID 1 */  /* # define ALIGNSTUPID 1 */
74  /**< # endif */  /* # endif */
75  /**< if ALIGNSTUPID, then 4 byte ptrs must fall on 8 byte boundaries */  /* if ALIGNSTUPID, then 4 byte ptrs must fall on 8 byte boundaries */
76  /**< any architecture with such a restrict should be summarily torched */  /* any architecture with such a restrict should be summarily torched */
77    
78    
79  /**< FUNDAMENTAL INSTANCES */  /* FUNDAMENTAL INSTANCES */
80    
81  /**< this aligns to 8 bytes with 4 or 8 byte pointers. size 32/40 */  /** this aligns to 8 bytes with 4 or 8 byte pointers. size 32/40 */
82  struct RealInstance {  struct RealInstance {
83    enum inst_t t;        /**< must always be first */    enum inst_t t;          /**< must always be first */
84    unsigned assigned;        /**< the number of times it has been assigned */    unsigned assigned;      /**< the number of times it has been assigned */
85    struct Instance *parent_offset;    struct Instance *parent_offset;
86    CONST dim_type *dimen;    CONST dim_type *dimen;
87    double value;    double value;
88    unsigned depth;       /**< the depth of the assignment */    unsigned depth;         /**< the depth of the assignment */
89    int padding;  /**< required for either type of pointer */    int padding;            /**< required for either type of pointer */
90  };  };
91    
92  /**< this aligns to 8 bytes with 4 or 8 byte pointers. size 24/32 */  /** this aligns to 8 bytes with 4 or 8 byte pointers. size 24/32 */
93  struct IntegerInstance {  struct IntegerInstance {
94    enum inst_t t;        /**< must always be first */    enum inst_t t;         /**< must always be first */
95    unsigned assigned;        /**< the number of times it has been assigned */    unsigned assigned;     /**< the number of times it has been assigned */
96    struct Instance *parent_offset;    struct Instance *parent_offset;
97    long value;    long value;
98    unsigned depth;       /**< the depth of the last assignment */    unsigned depth;        /**< the depth of the last assignment */
99    int padding;  /**< required for either type of pointer */    int padding;           /**< required for either type of pointer */
100  };  };
101    
102  /**< size 24/24 */  /** size 24/24 */
103  struct BooleanInstance {  struct BooleanInstance {
104    enum inst_t t;    enum inst_t t;
105    unsigned assigned;        /**< the number of times it has been assigned */    unsigned assigned;     /**< the number of times it has been assigned */
106    struct Instance *parent_offset;    struct Instance *parent_offset;
107    unsigned value;       /**< 0 false, 1 true */    unsigned value;        /**< 0 false, 1 true */
108    unsigned depth;       /**< the depth of the last assignment */    unsigned depth;        /**< the depth of the last assignment */
109  #if (LONGCHILDREN == 0)  #if (LONGCHILDREN == 0)
110    int padding;    int padding;
111  #endif  #endif
112  };  };
113    
114  /**< this aligns to 8 bytes with 4 or 8 byte pointers. size 16/24 */  /** this aligns to 8 bytes with 4 or 8 byte pointers. size 16/24 */
115  struct SetInstance {  struct SetInstance {
116    enum inst_t t;    enum inst_t t;
117    unsigned int_set;     /**< 0 indicates string set, 1 indicates an */    unsigned int_set;      /**< 0 indicates string set,
118      /**< integer set */                              1 indicates an integer set */
119    struct Instance *parent_offset;    struct Instance *parent_offset;
120    struct set_t *list;       /**< list of enumerated values, NULL */    struct set_t *list;  /**< list of enumerated values, NULL
121      /**< indicates that it has not been assigned */                              indicates that it has not been assigned
122    /**<                              if HP_sUX 9/10 or SGI is stupid enough to misalign
123     * if HP_sUX 9/10 or SGI is stupid enough to misalign this structure,                              this structure, we will have to pad it with an int
124     * we will have to pad it with an int on both sides of *list                              on both sides of *list */
    */  
125  };  };
126    
127  /**< this aligns to 8 bytes with 4 or 8 byte pointers. size 16/24 */  /** this aligns to 8 bytes with 4 or 8 byte pointers. size 16/24 */
128  struct SymbolInstance {  struct SymbolInstance {
129    enum inst_t t;    enum inst_t t;
130    unsigned assigned;        /**< the number of times it has been assigned */    unsigned assigned;        /**< the number of times it has been assigned */
131    struct Instance *parent_offset;    struct Instance *parent_offset;
132    symchar *value;       /**< NULL indicates unassigned */    symchar *value;         /**< NULL indicates unassigned */
133  };  };
134    
135    
136  /**< TRUE ATOM INSTANCES */  /* TRUE ATOM INSTANCES */
137  /**<  the first one is a dummy of some importance. All the atomic  /** the first one is a dummy of some importance. All the atomic
138   *  variable types should be conformable to this structure. It   *  variable types should be conformable to this structure. It
139   *  is not by itself a structure that should ever exist.   *  is not by itself a structure that should ever exist.
140   */   */
141  struct CommonAtomInstance {  struct CommonAtomInstance {
142    enum inst_t t;    enum inst_t t;
143    VOIDPTR interface_ptr;    VOIDPTR interface_ptr;
144    struct gl_list_t *parents;    /**< link to parents */    struct gl_list_t *parents;    /**< link to parents */
145    struct Instance *alike_ptr;   /**< circular linked list of clique members */    struct Instance *alike_ptr;   /**< circular linked list of clique members */
146    struct TypeDescription *desc; /**< list of children pointers */    struct TypeDescription *desc; /**< list of children pointers */
147    unsigned long visited;    /**< visited counter */    unsigned long visited;        /**< visited counter */
148    unsigned long tmp_num;    /**< used when an instance tree is being copied*/    unsigned long tmp_num;        /**< used when an instance tree is being copied*/
149    unsigned int anon_flags;  /**< anonymous field to be manipulated */    unsigned int anon_flags;      /**< anonymous field to be manipulated */
150  };  };
151    
152  /**<  /**
153   * The RealAtomInstance should be reimplemented with a number of   * The RealAtomInstance should be reimplemented with a number of
154   * supported attributes (bounds, nominal, several boolean flags)   * supported attributes (bounds, nominal, several boolean flags)
155   * and then an explicit pointer to the child space since children   * and then an explicit pointer to the child space since children
156   * are expected to be rare. Making this pointer explicit will allow   * are expected to be rare. Making this pointer explicit will allow
157   * the real atoms (of which there are a lot) to be pooled and save   * the real atoms (of which there are a lot) to be pooled and save
158   * a fair amount of memory on large problems.   * a fair amount of memory on large problems.<br><br>
159     *
160     * aligns to 8 byte boundaries on 4 or 8 byte machines. size 56/96
161   */   */
 /**< aligns to 8 byte boundaries on 4 or 8 byte machines. size 56/96 */  
162  struct RealAtomInstance {  struct RealAtomInstance {
163    enum inst_t t;    enum inst_t t;
164    VOIDPTR interface_ptr;    VOIDPTR interface_ptr;
165    struct gl_list_t *parents;    /**< link to parents */    struct gl_list_t *parents;    /**< link to parents */
166    struct Instance *alike_ptr;   /**< circular linked list of clique members */    struct Instance *alike_ptr;   /**< circular linked list of clique members */
167    struct TypeDescription *desc; /**< list of children pointers */    struct TypeDescription *desc; /**< list of children pointers */
168    unsigned long visited;    /**< visited counter */    unsigned long visited;        /**< visited counter */
169    unsigned long tmp_num;    /**< used when an instance tree is being copied*/    unsigned long tmp_num;        /**< used when an instance tree is being copied*/
170    unsigned int anon_flags;  /**< anonymous field to be manipulated */    unsigned int anon_flags;      /**< anonymous field to be manipulated */
171    /**< above should match with CommonAtomInstance */    /* above should match with CommonAtomInstance */
172    /**< atom value part */    /* atom value part */
173    double value;         /**< value of real variable */    double value;                 /**< value of real variable */
174    CONST dim_type *dimen;    /**< dimensions */    CONST dim_type *dimen;        /**< dimensions */
175    struct gl_list_t *relations;  /**< relations where this real appears */    struct gl_list_t *relations;  /**< relations where this real appears */
176    unsigned int assigned;    /**< the number of times it has been assigned */    unsigned int assigned;        /**< the number of times it has been assigned */
177    unsigned int depth;       /**< the depth of the last assignment */    unsigned int depth;           /**< the depth of the last assignment */
178    /**<    /* An even number of child pointers are packed here, the last of which
    * An even number of child pointers are packed here, the last of which  
179     * may not be valid because the number of children may be odd.     * may not be valid because the number of children may be odd.
180     * This extra should be eliminated for LONG pointer machines.     * This extra should be eliminated for LONG pointer machines.
181     */     */
182    /**< After the child pointers comes the data space for the actual    /* After the child pointers comes the data space for the actual
183     * children.     * children.
184     */     */
185  };  };
186    
187  /**< future work. needs parser and interpretter support. Not yet used. */  /** future work.
188     * needs parser and interpretter support. Not yet used.
189     * @todo Implement SolverAtomInstance.
190     */
191  struct SolverAtomInstance {  struct SolverAtomInstance {
192    enum inst_t t;    enum inst_t t;
193    VOIDPTR interface_ptr;    VOIDPTR interface_ptr;
194    struct gl_list_t *parents;    /**< link to parents */    struct gl_list_t *parents;    /**< link to parents */
195    struct Instance *alike_ptr;   /**< circular linked list of clique members */    struct Instance *alike_ptr;   /**< circular linked list of clique members */
196    struct TypeDescription *desc; /**< list of slow children pointers, by name */    struct TypeDescription *desc; /**< list of slow children pointers, by name */
197    unsigned long visited;    /**< visited counter */    unsigned long visited;        /**< visited counter */
198    unsigned long tmp_num;    /**< used when an instance tree is being copied*/    unsigned long tmp_num;        /**< used when an instance tree is being copied */
199    /**< above should match with CommonAtomInstance */    /* above should match with CommonAtomInstance */
200    /**< atom value part */    /* atom value part */
201    struct gl_list_t *relations;  /**< relations where this real appears */    struct gl_list_t *relations;  /**< relations where this real appears */
202    double value;         /**< value of variable */    double value;                 /**< value of variable
203    /**< fast children, all sharing dimens */                                       fast children, all sharing dimens */
204    double nominal;       /**< value of variable scaling */    double nominal;               /**< value of variable scaling */
205    double lower;         /**< value of variable lower bound */    double lower;                 /**< value of variable lower bound */
206    double upper;         /**< value of variable upper bound */    double upper;                 /**< value of variable upper bound */
207    CONST dim_type *dimen;    /**< dimensions */    CONST dim_type *dimen;        /**< dimensions */
208    struct Instance **carray; /**< array of pointers to slow children.    struct Instance **carray;     /**< array of pointers to slow children.
209      Keep slow children in pools by type.                                       Keep slow children in pools by type.
210      This should be NULL most of the time. */                                       This should be NULL most of the time. */
211    unsigned int flags;       /**< boolean flags of the variable, both    unsigned int flags;           /**< boolean flags of the variable, both
212      internal and external. must be at least                                       internal and external. must be at least
213      32 bit int */                                       32 bit int */
214    unsigned int depth;       /**< the depth of the last assignment */    unsigned int depth;           /**< the depth of the last assignment */
215    /**<    /*
216     * An even number of child pointers are packed here, the last of which     * An even number of child pointers are packed here, the last of which
217     * may not be real because the number of children may be odd.     * may not be real because the number of children may be odd.
218     * This extra should be eliminated for LONG pointer machines.     * This extra should be eliminated for LONG pointer machines.
219     */     */
220    /**< After the child pointers comes the data space for the actual    /* After the child pointers comes the data space for the actual
221     * children.     * children.
222     */     */
223  };  };
224  /**<  
225    /*
226   * Bit field definition for boolean attributes. room to grow.   * Bit field definition for boolean attributes. room to grow.
227   * Define all these fields so that a default value of (0,OFF,FALSE)   * Define all these fields so that a default value of (0,OFF,FALSE)
228   * is the appropriate setting for 'typical' uses of ASCEND.   * is the appropriate setting for 'typical' uses of ASCEND.
229   */   */
230  /**< internal flags (compiler use) for solveratominstances: */  /* internal flags (compiler use) for solveratominstances: */
231  #define SOL_ASSIGNED    0x1 /**< atom value ever assigned */  #define SOL_ASSIGNED    0x1       /**< atom value ever assigned */
232  /**< external flags (user interface/solver use) for solveratominstances: */  /* external flags (user interface/solver use) for solveratominstances: */
233  #define SOL_FIXED   0x2 /**< variable fixed for solvers */  #define SOL_FIXED       0x2       /**< variable fixed for solvers */
234  #define SOL_INACTIVELB  0x4 /**< lower bound to be ignored in solving */  #define SOL_INACTIVELB  0x4       /**< lower bound to be ignored in solving */
235  #define SOL_INACTIVEUB  0x8 /**< upper bound to be ignored in solving */  #define SOL_INACTIVEUB  0x8       /**< upper bound to be ignored in solving */
236  #define SOL_ODESTATE    0x10    /**< variable state for ivp solver */  #define SOL_ODESTATE    0x10      /**< variable state for ivp solver */
237  #define SOL_ODEOBSERVE  0x20    /**< variable recording for ivp */  #define SOL_ODEOBSERVE  0x20      /**< variable recording for ivp */
238  #define SOL_ISZERO  0x40    /**< semicontinuous set 0 for sciconic */  #define SOL_ISZERO      0x40      /**< semicontinuous set 0 for sciconic */
239  #define SOL_INTEGER 0x80    /**< integer variable */  #define SOL_INTEGER     0x80      /**< integer variable */
240  #define SOL_RELAXEDINT  0x100   /**< integer variable treat as relaxed */  #define SOL_RELAXEDINT  0x100     /**< integer variable treat as relaxed */
241  #define SOL_INTERVAL    0x200   /**< interval real variable */  #define SOL_INTERVAL    0x200     /**< interval real variable */
242  #define SOL_COMPLEX 0x400   /**< complex variable. lower -> imaginary part  #define SOL_COMPLEX     0x400     /**< complex variable. lower -> imaginary part
243         upper -> magnitude bound. ASCEND -> pot */                                         upper -> magnitude bound. ASCEND -> pot */
244  #define SOL_DOMAIN  0x800   /**< continuous variable defines domain */  #define SOL_DOMAIN      0x800     /**< continuous variable defines domain */
245  #define SOL_ODEINDEP    0x1000  /**< independent variable in ODE/BVP */  #define SOL_ODEINDEP    0x1000    /**< independent variable in ODE/BVP */
246  #define SOL_NODOF   0x2000  /**< user doesn't want to see var in DOF */  #define SOL_NODOF       0x2000    /**< user doesn't want to see var in DOF */
247  #define SOL_PARAMETRIC  0x4000  /**< whatever that means to a solver */  #define SOL_PARAMETRIC  0x4000    /**< whatever that means to a solver */
248  #define SOL_INTENSIVE   0x8000  /**< physics/che intensive property variable */  #define SOL_INTENSIVE   0x8000    /**< physics/che intensive property variable */
249  #define SOL_NONBASIC    0x10000 /**< in DOF of optimization problem */  #define SOL_NONBASIC    0x10000   /**< in DOF of optimization problem
250  /**< 2,4,8-0000 reserved for future */                                         2,4,8-0000 reserved for future */
251  /**< external flags (solver/interface tool use) for solveratominstances: */  /* external flags (solver/interface tool use) for solveratominstances: */
252  #define SOL_TIGHTLB 0x100000    /**< value at or near lower */  #define SOL_TIGHTLB     0x100000  /**< value at or near lower */
253  #define SOL_TIGHTUB 0x200000    /**< value at or near upper */  #define SOL_TIGHTUB     0x200000  /**< value at or near upper */
254  #define SOL_NOELIG  0x400000 /**< variable not eligible to be fixed in DOF */  #define SOL_NOELIG      0x400000  /**< variable not eligible to be fixed in DOF */
255  /**< note that the above bit positions need to be settled on still. */  /* note that the above bit positions need to be settled on still. */
256    
257  /**< aligns to 8 on 4 and 8 byte compilers with compiler pad after t, depth */  /** aligns to 8 on 4 and 8 byte compilers with compiler pad after t, depth */
258  struct IntegerAtomInstance {  struct IntegerAtomInstance {
259    enum inst_t t;    enum inst_t t;
260    VOIDPTR interface_ptr;    VOIDPTR interface_ptr;
261    struct gl_list_t *parents;    /**< link to parents */    struct gl_list_t *parents;    /**< link to parents */
262    struct Instance *alike_ptr;    struct Instance *alike_ptr;
263    struct TypeDescription *desc; /**< usefull type description information */    struct TypeDescription *desc; /**< usefull type description information */
264    unsigned long visited;    unsigned long visited;
265    unsigned long tmp_num;    /**< used when an instance tree is being copied*/    unsigned long tmp_num;        /**< used when an instance tree is being copied*/
266    unsigned int anon_flags;  /**< anonymous field to be manipulated */    unsigned int anon_flags;      /**< anonymous field to be manipulated */
267    /**< above should match with CommonAtomInstance  */    /* above should match with CommonAtomInstance */
268    /**< atom value part */    /* atom value part */
269    unsigned int assigned;    /**< the number of times it has been assigned */    unsigned int assigned;        /**< the number of times it has been assigned */
270    struct gl_list_t *whens;  /**< link to whens on which it appears */    struct gl_list_t *whens;      /**< link to whens on which it appears */
271    unsigned int depth;       /**< the depth of the last assignment */    unsigned int depth;           /**< the depth of the last assignment */
272    long value;           /**< integer value */    long value;                   /**< integer value */
273    /**<    /*
274     * An even number of child pointers are packed here, the last of which     * An even number of child pointers are packed here, the last of which
275     * may not be real because the number of children may be odd.     * may not be real because the number of children may be odd.
276     * This extra should be eliminated for LONG pointer machines.     * This extra should be eliminated for LONG pointer machines.
277     */     */
278    /**< After the child pointers comes the data space for the actual    /* After the child pointers comes the data space for the actual
279     * children.     * children.
280     */     */
281  };  };
282    
283  /**< this structure aligns (with compiler generated pad after t and flags  /** this structure aligns (with compiler generated pad after t and flags
284   * on 4 or 8 byte ptr machines.   * on 4 or 8 byte ptr machines. */
  */  
285  struct BooleanAtomInstance {  struct BooleanAtomInstance {
286    enum inst_t t;    enum inst_t t;
287    VOIDPTR interface_ptr;    VOIDPTR interface_ptr;
288    struct gl_list_t *parents;    /**< link to parent instances */    struct gl_list_t *parents;    /**< link to parent instances */
289    struct Instance *alike_ptr;    struct Instance *alike_ptr;
290    struct TypeDescription *desc; /**< description of name,children, and size */    struct TypeDescription *desc; /**< description of name,children, and size */
291    unsigned long visited;    unsigned long visited;
292    unsigned long tmp_num;    /**< used when an instance tree is being copied*/    unsigned long tmp_num;        /**< used when an instance tree is being copied*/
293    unsigned int anon_flags;  /**< anonymous field to be manipulated */    unsigned int anon_flags;      /**< anonymous field to be manipulated */
294    /**< above should match with CommonAtomInstance  */    /* above should match with CommonAtomInstance */
295    /**< atom value part */    /* atom value part */
296    struct gl_list_t *logrelations; /**< logrelations where this boolean appears */    struct gl_list_t *logrelations; /**< logrelations where this boolean appears */
297    struct gl_list_t *whens;      /**< whens where this boolean appears*/    struct gl_list_t *whens;      /**< whens where this boolean appears*/
298    unsigned assigned;        /**< the number of times it has been assigned */    unsigned assigned;            /**< the number of times it has been assigned */
299    unsigned depth;       /**< the depth of the assignment */    unsigned depth;               /**< the depth of the assignment */
300    unsigned value;       /**< 0 false, 1 true */    unsigned value;               /**< 0 false, 1 true */
301    int padding;      /**< so that children have a square address */    int padding;                  /**< so that children have a square address */
302    /**<    /*
303     * An even number of child pointers are packed here, the last of which     * An even number of child pointers are packed here, the last of which
304     * may not be real because the number of children may be odd.     * may not be real because the number of children may be odd.
305     * This extra should be eliminated for LONG pointer machines.     * This extra should be eliminated for LONG pointer machines.
306     */     */
307    /**< After the child pointers comes the data space for the actual    /* After the child pointers comes the data space for the actual
308     * children.     * children.
309     */     */
310  };  };
311    
312  /**< this aligns to 8 on 4 or 8 byte compilers with compiler pad after t */  /** this aligns to 8 on 4 or 8 byte compilers with compiler pad after t */
313  struct SetAtomInstance {  struct SetAtomInstance {
314    enum inst_t t;        /**< type */    enum inst_t t;                /**< type */
315    VOIDPTR interface_ptr;    VOIDPTR interface_ptr;
316    struct gl_list_t *parents;    /**< link to parents instances */    struct gl_list_t *parents;    /**< link to parents instances */
317    struct Instance *alike_ptr;    struct Instance *alike_ptr;
318    struct TypeDescription *desc; /**< description of name,children, and size */    struct TypeDescription *desc; /**< description of name,children, and size */
319    unsigned long visited;    unsigned long visited;
320    unsigned long tmp_num;    /**< used when an instance tree is being copied*/    unsigned long tmp_num;        /**< used when an instance tree is being copied */
321    unsigned int anon_flags;  /**< anonymous field to be manipulated */    unsigned int anon_flags;      /**< anonymous field to be manipulated */
322    /**< above should match with CommonAtomInstance  */    /* above should match with CommonAtomInstance */
323    /**< atom value part */    /* atom value part */
324    unsigned int_set;     /**< 0 indicates string set, 1 indicates */    unsigned int_set;             /**< 0 indicates string set,
325    struct set_t *list;       /**< list of enumerated values NULL indicates */                                       1 indicates integer set */
326      /**< that is has not been assigned */    struct set_t *list;           /**< list of enumerated values NULL indicates
327      /**< integer set */                                       that is has not been assigned */
328    /**<    /*
329     * An even number of child pointers are packed here, the last of which     * An even number of child pointers are packed here, the last of which
330     * may not be real because the number of children may be odd.     * may not be real because the number of children may be odd.
331     * This extra should be eliminated for LONG pointer machines.     * This extra should be eliminated for LONG pointer machines.
332     */     */
333    /**< After the child pointers comes the data space for the actual    /* After the child pointers comes the data space for the actual
334     * children.     * children.
335     */     */
336  };  };
337    
338  /**< this aligns to 8 on 4 or 8 byte compilers with compiler pad after t, flags*/  /** this aligns to 8 on 4 or 8 byte compilers with compiler pad after t, flags */
339  struct SymbolAtomInstance {  struct SymbolAtomInstance {
340    enum inst_t t;        /**< type */    enum inst_t t;                /**< type */
341    VOIDPTR interface_ptr;    VOIDPTR interface_ptr;
342    struct gl_list_t *parents;    /**< link to parent instances */    struct gl_list_t *parents;    /**< link to parent instances */
343    struct Instance *alike_ptr;   /**< ALIKE clique link */    struct Instance *alike_ptr;   /**< ALIKE clique link */
344    struct TypeDescription *desc; /**< description of name, children, and size */    struct TypeDescription *desc; /**< description of name, children, and size */
345    unsigned long visited;    unsigned long visited;
346    unsigned long tmp_num;    /**< used when an instance  is being copied */    unsigned long tmp_num;        /**< used when an instance  is being copied */
347    unsigned int anon_flags;  /**< anonymous field to be manipulated */    unsigned int anon_flags;      /**< anonymous field to be manipulated */
348    /**< above should match with CommonAtomInstance  */    /* above should match with CommonAtomInstance  */
349    struct gl_list_t *whens;  /**< link to whens on which it appears */    struct gl_list_t *whens;      /**< link to whens on which it appears */
350    /**< atom value part */    /* atom value part */
351    symchar *value;       /**< NULL indicates unassigned */    symchar *value;               /**< NULL indicates unassigned */
352    /**<    /*
353     * An even number of child pointers are packed here, the last of which     * An even number of child pointers are packed here, the last of which
354     * may not be real because the number of children may be odd.     * may not be real because the number of children may be odd.
355     * This extra should be eliminated for LONG pointer machines.     * This extra should be eliminated for LONG pointer machines.
356     */     */
357    /**< After the child pointers comes the data space for the actual    /* After the child pointers comes the data space for the actual
358     * children.     * children.
359     */     */
360  };  };
361    
362  /**< CONSTANT INSTANCES */  /* CONSTANT INSTANCES */
363  /**< The first one is a dummy of some importance. All the Constant  /** The first one is a dummy of some importance. All the Constant
364   * types should be conformable to this structure. It   * types should be conformable to this structure. It
365   * is not by itself a structure that should ever exist.   * is not by itself a structure that should ever exist.
366   */   */
367  struct CommonConstantInstance {  struct CommonConstantInstance {
368    enum inst_t t;    enum inst_t t;
369    unsigned int vflag;    unsigned int vflag;
370    unsigned long visited;    /**< visited counter */    unsigned long visited;    /**< visited counter */
371    unsigned long tmp_num;    /**< used when an instance tree is being copied*/    unsigned long tmp_num;    /**< used when an instance tree is being copied*/
372    VOIDPTR interface_ptr;    VOIDPTR interface_ptr;
373    unsigned int anon_flags;  /**< anonymous field to be manipulated */    unsigned int anon_flags;  /**< anonymous field to be manipulated
374  /**< vflag is 32 bits with particular meanings: */                                   vflag is 32 bits with particular meanings: */
375  #define ci_ASSIGNED 0x1     /**< instance assigned yet? */  #define ci_ASSIGNED 0x1     /**< instance assigned yet? */
376  #define ci_BVAL 0x2     /**< boolean const instance value, reserved */  #define ci_BVAL 0x2         /**< boolean const instance value, reserved */
377  /**< other binary flags constants need to be added here. */  /* other binary flags constants need to be added here. */
378  };  };
379    
380  /**< RealConstantInstance should probably be pooled, but isn't yet */  /** @todo RealConstantInstance should probably be pooled, but isn't yet */
381  struct RealConstantInstance {  struct RealConstantInstance {
382    enum inst_t t;    enum inst_t t;
383    unsigned vflag;       /**< assigned? */    unsigned vflag;               /**< assigned? */
384    unsigned long visited;    /**< visited counter */    unsigned long visited;        /**< visited counter */
385    unsigned long tmp_num;    /**< used when an instance tree is being copied*/    unsigned long tmp_num;        /**< used when an instance tree is being copied*/
386    VOIDPTR interface_ptr;    VOIDPTR interface_ptr;
387    unsigned int anon_flags;  /**< anonymous field to be manipulated */    unsigned int anon_flags;      /**< anonymous field to be manipulated */
388    /**< above should match with CommonConstantInstance */    /* above should match with CommonConstantInstance */
389    double value;    double value;
390    struct gl_list_t *parents;    /**< link to parents */    struct gl_list_t *parents;    /**< link to parents */
391    struct Instance *alike_ptr;   /**< circular linked list of clique members?*/    struct Instance *alike_ptr;   /**< circular linked list of clique members?*/
392    struct TypeDescription *desc; /**< description of name, size */    struct TypeDescription *desc; /**< description of name, size */
393    CONST dim_type *dimen;    CONST dim_type *dimen;
394  };  };
395    
396  struct IntegerConstantInstance {  struct IntegerConstantInstance {
397    enum inst_t t;    enum inst_t t;
398    unsigned vflag;       /**< assigned? */    unsigned vflag;               /**< assigned? */
399    unsigned long visited;    /**< visited counter */    unsigned long visited;        /**< visited counter */
400    unsigned long tmp_num;    /**< used when an instance tree is being copied*/    unsigned long tmp_num;        /**< used when an instance tree is being copied*/
401    VOIDPTR interface_ptr;    VOIDPTR interface_ptr;
402    unsigned int anon_flags;  /**< anonymous field to be manipulated */    unsigned int anon_flags;      /**< anonymous field to be manipulated */
403    /**< above should match with CommonConstantInstance */    /* above should match with CommonConstantInstance */
404    long value;    long value;
405    struct gl_list_t *parents;    /**< link to parents */    struct gl_list_t *parents;    /**< link to parents */
406    struct gl_list_t *whens;      /**< whens where this integer appears*/    struct gl_list_t *whens;      /**< whens where this integer appears*/
407    struct Instance *alike_ptr;   /**< circular linked list of clique members?*/    struct Instance *alike_ptr;   /**< circular linked list of clique members?*/
408    struct TypeDescription *desc; /**< description of name, size */    struct TypeDescription *desc; /**< description of name, size */
409  };  };
410    
411  struct BooleanConstantInstance {  struct BooleanConstantInstance {
412    enum inst_t t;    enum inst_t t;
413    unsigned vflag;       /**< assigned? */    unsigned vflag;               /**< assigned? */
414    unsigned long visited;    /**< visited counter */    unsigned long visited;        /**< visited counter */
415    unsigned long tmp_num;    /**< used when an instance tree is being copied*/    unsigned long tmp_num;        /**< used when an instance tree is being copied*/
416    VOIDPTR interface_ptr;    VOIDPTR interface_ptr;
417    /**< above should match with CommonConstantInstance */    /* above should match with CommonConstantInstance */
418    unsigned int anon_flags;  /**< anonymous field to be manipulated */    unsigned int anon_flags;      /**< anonymous field to be manipulated */
419    struct gl_list_t *parents;    /**< link to parents */    struct gl_list_t *parents;    /**< link to parents */
420    struct gl_list_t *whens;      /**< whens where this boolean appears*/    struct gl_list_t *whens;      /**< whens where this boolean appears*/
421    struct Instance *alike_ptr;   /**< circular linked list of clique members?*/    struct Instance *alike_ptr;   /**< circular linked list of clique members?*/
422    struct TypeDescription *desc; /**< description of name, size */    struct TypeDescription *desc; /**< description of name, size */
423  };  };
424    
425  struct SymbolConstantInstance {  struct SymbolConstantInstance {
426    enum inst_t t;    enum inst_t t;
427    unsigned vflag;       /**< assigned */    unsigned vflag;               /**< assigned */
428    unsigned long visited;    /**< visited counter */    unsigned long visited;        /**< visited counter */
429    unsigned long tmp_num;    /**< used when an instance tree is being copied*/    unsigned long tmp_num;        /**< used when an instance tree is being copied*/
430    VOIDPTR interface_ptr;    VOIDPTR interface_ptr;
431    unsigned int anon_flags;  /**< anonymous field to be manipulated */    unsigned int anon_flags;      /**< anonymous field to be manipulated */
432    /**< above should match with CommonConstantInstance */    /* above should match with CommonConstantInstance */
433    struct gl_list_t *parents;    /**< link to parents */    struct gl_list_t *parents;    /**< link to parents */
434    struct gl_list_t *whens;      /**< whens where this symbol appears*/    struct gl_list_t *whens;      /**< whens where this symbol appears*/
435    struct Instance *alike_ptr;   /**< circular linked list of clique members?*/    struct Instance *alike_ptr;   /**< circular linked list of clique members?*/
436    struct TypeDescription *desc; /**< description of name, size */    struct TypeDescription *desc; /**< description of name, size */
437    symchar *value;    symchar *value;
438  };  };
439    
440  /**< RelationInstance should probably be pooled, as RealAtomInstance,  /** aligns on 4 or 8 byte ptr machines. size 48/88
441   * but isn't yet for the same reasons.   *
442     * @todo RelationInstance should probably be pooled, as RealAtomInstance,
443     *       but isn't yet for the same reasons.
444   */   */
 /**< aligns on 4 or 8 byte ptr machines. size 48/88 */  
445  struct RelationInstance {  struct RelationInstance {
446    enum inst_t t;    enum inst_t t;
447    /**< on long pointer machines, we expect C compiler to pad 4 bytes here */    /* on long pointer machines, we expect C compiler to pad 4 bytes here */
448    VOIDPTR interface_ptr;    VOIDPTR interface_ptr;
449    struct Instance *parent[2];   /**< relations can have only two parents and */    struct Instance *parent[2];   /**< relations can have only two parents and
450      /**< normally they only have one.  They have */                                       normally they only have one.  They have
451      /**< two only during an ARE_THE_SAME */                                       two only during an ARE_THE_SAME */
452    struct TypeDescription *desc; /**< holds the child list stuff */    struct TypeDescription *desc; /**< holds the child list stuff */
453    unsigned long visited;    unsigned long visited;
454    unsigned long tmp_num;    /**< used when an instance tree is being copied*/    unsigned long tmp_num;        /**< used when an instance tree is being copied*/
455    unsigned int anon_flags;  /**< anonymous field to be manipulated */    unsigned int anon_flags;      /**< anonymous field to be manipulated */
456    enum Expr_enum type;      /**< what kind of the 5 possible types of reln */    enum Expr_enum type;          /**< what kind of the 5 possible types of reln
457                                  /**< type should be down in union RelationUnion*/                                       type should be down in union RelationUnion*/
458    struct relation *ptr;     /**< pointer to an instance relation */    struct relation *ptr;         /**< pointer to an instance relation */
459    struct gl_list_t *whens;  /**< link to whens on which the rel appears */    struct gl_list_t *whens;      /**< link to whens on which the rel appears */
460    struct gl_list_t *logrels;    /**< link to satified's on which rel appears */    struct gl_list_t *logrels;    /**< link to satified's on which rel appears */
461    /**< So child insts start packing on 8byte address after child ptrs, of    /* So child insts start packing on 8byte address after child ptrs, of
462     * which there are (currently, 2/97) always an even number.     * which there are (currently, 2/97) always an even number.
463     */     */
464    /**< Not required anymore:    /* Not required anymore:
465     *     *
466     * #if (LONGCHILDREN == 0)     * #if (LONGCHILDREN == 0)
467     * int padding;     * int padding;
# Line 466  struct RelationInstance { Line 474  struct RelationInstance {
474     * This extra should be eliminated for LONG pointer machines.     * This extra should be eliminated for LONG pointer machines.
475     */     */
476    
477    /**< After the child pointers comes the data space for the actual    /* After the child pointers comes the data space for the actual
478     * children.     * children.
479     */     */
480  };  };
481    
482    /** this aligns to 8 bytes with 4 or 8 byte pointers. size 48/88 */
 /**< this aligns to 8 bytes with 4 or 8 byte pointers. size 48/88 */  
483  struct LogRelInstance {  struct LogRelInstance {
484    enum inst_t t;    enum inst_t t;
485    /**< on long pointer machines, we expect C compiler to pad 4 bytes here */    /* on long pointer machines, we expect C compiler to pad 4 bytes here */
486    VOIDPTR interface_ptr;    VOIDPTR interface_ptr;
487    struct Instance *parent[2];   /**< log relations can have only two parents */    struct Instance *parent[2];   /**< log relations can have only two parents
488      /**< and normally they only have one.They have */                                       and normally they only have one.They have
489      /**< two only during an ARE_THE_SAME */                                       two only during an ARE_THE_SAME */
490    struct TypeDescription *desc; /**< holds the child list stuff */    struct TypeDescription *desc; /**< holds the child list stuff */
491    unsigned long visited;    unsigned long visited;
492    unsigned long tmp_num;    /**< used when an instance tree is being copied*/    unsigned long tmp_num;        /**< used when an instance tree is being copied*/
493    struct logrelation *ptr;  /**< pointer to an instance logical relation */    struct logrelation *ptr;      /**< pointer to an instance logical relation */
494    struct gl_list_t *whens;  /**< link to whens on which the logrel appears */    struct gl_list_t *whens;      /**< link to whens on which the logrel appears */
495    struct gl_list_t *logrels;    /**< link to satified's on which lrel appears */    struct gl_list_t *logrels;    /**< link to satified's on which lrel appears */
496    unsigned int anon_flags;  /**< anonymous field to be manipulated */    unsigned int anon_flags;      /**< anonymous field to be manipulated */
497    int padding;    int padding;                  /**< so child insts start packing on 8byte
498    /**< so child insts start packing on 8byte address after child ptrs */                                       address after child ptrs */
499    /**<    /*
500     * All logrelations are the same type/size, because we require     * All logrelations are the same type/size, because we require
501     * exactly 1 refinement of the base definition.     * exactly 1 refinement of the base definition.
502     */     */
503    /**< After the child pointers comes the data space for the actual    /* After the child pointers comes the data space for the actual
504     * children. This space must start on an 8 byte address.     * children. This space must start on an 8 byte address.
505     */     */
506  };  };
507    
508  /**< Never, ever, allocate either one of these types. it's a dummy for the  /** Never, ever, allocate either one of these types. it's a dummy for the
509   * instantiator.   * instantiator.
510   */   */
511  struct PendInstance {  struct PendInstance {
# Line 507  struct PendInstance { Line 514  struct PendInstance {
514  };  };
515    
516    
517  /**< COMPOUND INSTANCES */  /* COMPOUND INSTANCES */
518  /**<   Note: All the compound instance structs, except ArrayChild,  /*   Note: All the compound instance structs, except ArrayChild,
519   *   and Automatic should have   *   and Automatic should have
520    enum inst_t t;    enum inst_t t;
521    VOIDPTR pending_entry;    VOIDPTR pending_entry;
# Line 516  struct PendInstance { Line 523  struct PendInstance {
523   * Relations of any type are NOT compound, other errors in   * Relations of any type are NOT compound, other errors in
524   * this file not withstanding.   * this file not withstanding.
525   */   */
526  /**< this structure doesn't have to align on 4 byte ptr machines. size 48/88 */  /** this structure doesn't have to align on 4 byte ptr machines. size 48/88 */
527  struct ModelInstance {  struct ModelInstance {
528    enum inst_t t;    enum inst_t t;
529    VOIDPTR pending_entry;    /**< hold a word only pending.c can touch */    VOIDPTR pending_entry;      /**< hold a word only pending.c can touch */
530    VOIDPTR interface_ptr;    VOIDPTR interface_ptr;
531    struct gl_list_t *parents;    /**< link to parent instances */    struct gl_list_t *parents;  /**< link to parent instances */
532    struct gl_list_t *whens;  /**< link to whens on which the model appears */    struct gl_list_t *whens;    /**< link to whens on which the model appears */
533    struct TypeDescription *desc;    struct TypeDescription *desc;
534    struct Instance *alike_ptr;    struct Instance *alike_ptr;
535    struct BitList *executed; /**< bit list to keep track of which */    struct BitList *executed;   /**< bit list to keep track of which
536      /**< statements have been executed */                                     statements have been executed */
537    unsigned long visited;    unsigned long visited;
538    unsigned long tmp_num;    /**< used when an instance tree is being copied*/    unsigned long tmp_num;      /**< used when an instance tree is being copied*/
539    unsigned int anon_flags;  /**< anonymous field to be manipulated */    unsigned int anon_flags;    /**< anonymous field to be manipulated */
540  #if (LONGCHILDREN == 1)  #if (LONGCHILDREN == 1)
541    int padding;          /**< so ptrs start packing on 8byte address */    int padding;                /**< so ptrs start packing on 8byte address */
542  #endif  #endif
543    /**< The child pointers of model instances are packed here, but each is    /* The child pointers of model instances are packed here, but each is
544     * different and there may not even be children. They are not     * different and there may not even be children. They are not
545     * accessible through the struct, but only through InstanceChild.     * accessible through the struct, but only through InstanceChild.
    *  
546     */     */
547  };  };
548    
549  /**< This struct not in use anywhere yet, pending more semantics */  /** This struct not in use anywhere yet, pending more semantics */
550  struct AutomaticInstance {  struct AutomaticInstance {
551    enum inst_t t;    enum inst_t t;
552    /**< this object never pending since it has no statements */    /* this object never pending since it has no statements */
553    VOIDPTR interface_ptr;    VOIDPTR interface_ptr;
554    struct Instance *sim_parent;  /**< exactly one of these */    struct Instance *sim_parent;  /**< exactly one of these */
555    struct TypeDescription *desc; /**< UNIVERSAL and made at startup */    struct TypeDescription *desc; /**< UNIVERSAL and made at startup */
556    unsigned long visited;    unsigned long visited;
557    unsigned long tmp_num;    /**< used when an instance tree is being copied*/    unsigned long tmp_num;        /**< used when an instance tree is being copied*/
558    unsigned int anon_flags;  /**< anonymous field to be manipulated */    unsigned int anon_flags;      /**< anonymous field to be manipulated */
559    
560    struct gl_list_t *children;  /**< unique unsorted list of child insts */    struct gl_list_t *children;   /**< unique unsorted list of child insts */
561    
562    /**< struct hashtable *childdata;    /* struct hashtable *childdata;
563     * hash lookup of children.     * hash lookup of children.
564     */     */
565    /**< note that in table there may be multiple names for a child that    /* note that in table there may be multiple names for a child that
566     * occurs once in childdata.     * occurs once in childdata.
567     */     */
568    /**< HANDS OFF!  --Ben */    /* HANDS OFF!  --Ben */
569  };  };
570    
571  /**< First try of a WhenInstance needs to migrate toward the relations */  /** First try of a WhenInstance needs to migrate toward the relations
572  /**< would be nice to have a commoneqninstance type (CE_INST)   *
573     * Would be nice to have a commoneqninstance type (CE_INST)
574   * for rel,log,when.   * for rel,log,when.
575     *
576     * doesn't align as never has children.
577   */   */
 /**< doesn't align as never has children. */  
578  struct WhenInstance {  struct WhenInstance {
579    enum inst_t t;    enum inst_t t;
580    VOIDPTR interface_ptr;    VOIDPTR interface_ptr;
581    struct Instance *parent[2];   /**< relations can have only two parents and */    struct Instance *parent[2];   /**< relations can have only two parents and
582      /**< normally they only have one.  They have */                                       normally they only have one.  They have
583      /**< two only during an ARE_THE_SAME */                                       two only during an ARE_THE_SAME */
584    struct gl_list_t *whens;      /**< used in case of nested whens */    struct gl_list_t *whens;      /**< used in case of nested whens */
585    struct gl_list_t *cases;      /**< list of cases */    struct gl_list_t *cases;      /**< list of cases */
586    struct gl_list_t *bvar ;      /**< list of references to boolean variables  */    struct gl_list_t *bvar;       /**< list of references to boolean variables  */
587    struct TypeDescription *desc; /**< holds the child list stuff */    struct TypeDescription *desc; /**< holds the child list stuff */
588    unsigned long visited;    unsigned long visited;
589    unsigned long tmp_num;    /**< used when an instance tree is being copied*/    unsigned long tmp_num;        /**< used when an instance tree is being copied*/
590    unsigned int anon_flags;  /**< anonymous field to be manipulated */    unsigned int anon_flags;      /**< anonymous field to be manipulated */
591  };  };
592    
593  /**< are pooled, and therefore must align, but does so on its own */  /** are pooled, and therefore must align, but does so on its own */
594  struct ArrayChild {  struct ArrayChild {
595    /**< this object never pending, but member inst may be */    /* this object never pending, but member inst may be */
596    struct Instance *inst;    struct Instance *inst;  /**< The instance. */
597    union {    union {
598      symchar *str;      symchar *str;
599      long index;      long index;           /**< The name, may be string or index. */
600    } name;    } name;
601  };  };
602    
603  /**< never has packed children. see gllist instead. */  /** never has packed children. see gllist instead. */
604  struct ArrayInstance {  struct ArrayInstance {
605    enum inst_t t;    enum inst_t t;
606    VOIDPTR pending_entry;    /**< hold a word only pending.c can touch */    VOIDPTR pending_entry;        /**< hold a word only pending.c can touch */
607    VOIDPTR interface_ptr;    VOIDPTR interface_ptr;
608    struct TypeDescription *desc; /**< holds the child list stuff */    struct TypeDescription *desc; /**< holds the child list stuff */
609    struct gl_list_t *parents;    /**< link to parent instances */    struct gl_list_t *parents;    /**< link to parent instances */
610    struct gl_list_t *children;   /**< link to children */    struct gl_list_t *children;   /**< link to children */
611    unsigned long indirected; /**< number of times of indirected */    unsigned long indirected;     /**< number of times of indirected */
612    unsigned long visited;    unsigned long visited;
613    unsigned long tmp_num;    /**< used when an instance tree is being copied*/    unsigned long tmp_num;        /**< used when an instance tree is being copied*/
614    unsigned int anon_flags;  /**< anonymous field to be manipulated */    unsigned int anon_flags;      /**< anonymous field to be manipulated */
615  };  };
616    
617  /**< CONTAINER INSTANCE for interfaces. never pending. */  /** CONTAINER INSTANCE for interfaces. never pending.
618  /**< no packed children, so never need align */   * no packed children, so never need align
619  struct SimulationInstance {   /**< these have *no* parents, yet */   */
620    struct SimulationInstance {      
621      /* these have *no* parents, yet */
622    enum inst_t t;    enum inst_t t;
623    VOIDPTR interface_ptr;    VOIDPTR interface_ptr;
624    struct TypeDescription *desc; /**< copy of the typedesc of its lone child */    struct TypeDescription *desc; /**< copy of the typedesc of its lone child */
625    symchar *name;        /**< name of its lone child */    symchar *name;                /**< name of its lone child */
626    struct Instance **extvars;    /**< external variables handles hack */    struct Instance **extvars;    /**< external variables handles hack */
627    unsigned long tmp_num;    /**< used when an instance tree is being copied*/    unsigned long tmp_num;        /**< used when an instance tree is being copied*/
628    unsigned int anon_flags;  /**< anonymous field to be manipulated */    unsigned int anon_flags;      /**< anonymous field to be manipulated */
629    /**< add other interesting stuff here */    /* add other interesting stuff here */
630  };  };
631    
632  /**< dummy instance for unselected children of models */  /** dummy instance for unselected children of models
633  /**< no alignment issue */   * no alignment issue
634     */
635  struct GlobalDummyInstance {  struct GlobalDummyInstance {
636    enum inst_t t;    enum inst_t t;
637    /**< never pending */    /* never pending */
638    VOIDPTR interface_ptr;    VOIDPTR interface_ptr;
639    /**< no link to parent instances */    /**no link to parent instances */
640    /**< when instances should ignore dummy completely */    /* when instances should ignore dummy completely */
641    struct TypeDescription *desc;    struct TypeDescription *desc;
642    /**< all dummies are alike -- and the same */    /* all dummies are alike -- and the same */
643    /**< dummy has not statements */    /* dummy has not statements */
644    unsigned long visited;    unsigned long visited;
645    unsigned long ref_count;  /**< mainly for debugging purposes */    unsigned long ref_count;    /**< mainly for debugging purposes */
646    unsigned long tmp_num;    /**< used when an instance tree is being copied*/    unsigned long tmp_num;      /**< used when an instance tree is being copied
647    /**< but CopyDummy==dummy always */                                     but CopyDummy==dummy always */
648    unsigned int anon_flags;  /**< anonymous field to be manipulated */    unsigned int anon_flags;    /**< anonymous field to be manipulated */
649    /**< why make life hell for the unsuspecting client? */    /* why make life hell for the unsuspecting client? */
650    /**<    /*
651     * In particular, the DUMMY_INST doesn't look like any category     * In particular, the DUMMY_INST doesn't look like any category
652     * (EQN,Compound,Atom,Constant)  because a single statically allocated     * (EQN,Compound,Atom,Constant)  because a single statically allocated
653     * instance of it stands in for all UNSELECTED_INSTANCEs that are     * instance of it stands in for all UNSELECTED_INSTANCEs that are
# Line 645  struct GlobalDummyInstance { Line 656  struct GlobalDummyInstance {
656     */     */
657  };  };
658    
659  #endif /**< __INSTANCE_TYPES_H_SEEN__ */  #endif /* __INSTANCE_TYPES_H_SEEN__ */
660    

Legend:
Removed from v.33  
changed lines
  Added in v.54

john.pye@anu.edu.au
ViewVC Help
Powered by ViewVC 1.1.22