File: ComponentList.h

package info (click to toggle)
maria 1.3.5-2
  • links: PTS
  • area: main
  • in suites: squeeze
  • size: 3,980 kB
  • ctags: 5,458
  • sloc: cpp: 43,402; yacc: 8,080; ansic: 436; sh: 404; lisp: 395; makefile: 291; perl: 21
file content (138 lines) | stat: -rw-r--r-- 4,394 bytes parent folder | download | duplicates (5)
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
// Struct or union component list class -*- c++ -*-

#ifndef COMPONENTLIST_H_
# define COMPONENTLIST_H_
# ifdef __GNUC__
#  pragma interface
# endif // __GNUC__

# include <assert.h>
# include "Type.h"

/** @file ComponentList.h
 * List of struct or union components
 */

/* Copyright  1998-2003 Marko Mkel (msmakela@tcs.hut.fi).

   This file is part of MARIA, a reachability analyzer and model checker
   for high-level Petri nets.

   MARIA 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, or (at your option)
   any later version.

   MARIA 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.

   The GNU General Public License is often shipped with GNU software, and
   is generally kept in a file called COPYING or LICENSE.  If you do not
   have a copy of the license, write to the Free Software Foundation,
   59 Temple Place, Suite 330, Boston, MA 02111 USA. */

/** Struct or union component list */
class ComponentList
{
public:
  /** Constructor */
  ComponentList ();
  /** Copy constructor */
  ComponentList (const class ComponentList& old);
private:
  /** Assignment operator */
  class ComponentList& operator= (const class ComponentList& old);
public:
  /** Destructor */
  ~ComponentList ();

  /** Determine the number of components in the list */
  card_t getSize () const { return mySize; }
  /** Determine whether all components are ordered types */
  bool isOrdered () const {
    for (card_t i =  mySize; i--; )
      if (!(*this)[i].isOrdered ())
	return false;
    return true;
  }

  /** Get a component by name
   * @param name	name of the component
   * @return		pointer to the component, or NULL if not found
   */
  const class Type* operator[] (const char* name) const;

  /** Get a component by index number
   * @param i		index to the component
   * @return		reference to the component
   */
  const class Type& operator[] (card_t i) const {
    assert (i < getSize ());
    return *myTypes[i];
  }

  /** Get the index number of a component
   * @param name	name of the component
   * @return		index of the component
   */
  card_t getIndex (const char* name) const;

  /** Get the name of a component
   * @param i		index of the component
   */
  const char* getName (card_t i) const {
    assert (i < getSize ());
    return myNames[i];
  }

  /** See if the component list is assignable to another component list
   * @param other	the list this list should be assignable to
   * @return		true if this list is assignable to the list
   */
  bool isAssignable (const class ComponentList& other) const;
  /** See if the component list is always assignable to another component list
   * @param other	the list this list should always be assignable to
   * @return		true if this list always is assignable to the list
   */
  bool isAlwaysAssignable (const class ComponentList& other) const;

  /** See if a component in the list is assignable to a type
   * @param type	the type this list should be assignable to
   * @return		true if this list is assignable to the type
   */
  bool isAssignable (const class Type& type) const;

  /** See if a component in the list is assignable from a type
   * @param type	the type this list should be assignable from
   * @return		true if a component is assignable from the type
   */
  bool isAssignableFrom (const class Type& type) const;
  /** See if a component in the list is always assignable from a type
   * @param type	the type the list should always be assignable from
   * @return		true if a component always is assignable from the type
   */
  bool isAlwaysAssignableFrom (const class Type& type) const;

  /** Add a component
   * @param name	name of the component
   * @param type	type of the component
   */
  void addComponent (char* name, const class Type& type);

  /** Display the component list
   * @param printer	the printer object
   */
  void display (const class Printer& printer) const;

private:
  /** Number of components in the list */
  card_t mySize;
  /** Component names */
  char** myNames;
  /** Component types */
  const class Type** myTypes;
};

#endif // COMPONENTLIST_H_