1 // Copyright (c) 1994 James Clark
2 // See the file COPYING for copying permission.
3 #pragma ident "%Z%%M% %I% %E% SMI"
4
5 #ifdef __GNUG__
6 #pragma implementation
7 #endif
8 #include "splib.h"
9 #include "ElementType.h"
10 #include "ContentToken.h"
11 #include "macros.h"
12
13 #ifdef SP_NAMESPACE
14 namespace SP_NAMESPACE {
15 #endif
16
ElementType(const StringC & name,size_t index)17 ElementType::ElementType(const StringC &name, size_t index)
18 : Named(name), index_(index), map_(0), defIndex_(0)
19 {
20 }
21
ElementDefinition(const Location & location,size_t index,unsigned char omitFlags,DeclaredContent declaredContent)22 ElementDefinition::ElementDefinition(const Location &location,
23 size_t index,
24 unsigned char omitFlags,
25 DeclaredContent declaredContent)
26 : location_(location),
27 index_(index),
28 omitFlags_(omitFlags),
29 declaredContent_(declaredContent)
30 {
31 computeMode();
32 }
33
ElementDefinition(const Location & location,size_t index,unsigned char omitFlags,DeclaredContent declaredContent,Owner<CompiledModelGroup> & LOCALmodelGroup)34 ElementDefinition::ElementDefinition(const Location &location,
35 size_t index,
36 unsigned char omitFlags,
37 DeclaredContent declaredContent,
38 Owner<CompiledModelGroup> &LOCALmodelGroup)
39 : location_(location),
40 index_(index),
41 omitFlags_(omitFlags),
42 declaredContent_(declaredContent),
43 modelGroup_(LOCALmodelGroup.extract())
44 {
45 computeMode();
46 }
47
computeMode()48 void ElementDefinition::computeMode()
49 {
50 switch (declaredContent_) {
51 case modelGroup:
52 if (!modelGroup_->containsPcdata()) {
53 netMode_ = econnetMode;
54 mode_ = econMode;
55 break;
56 }
57 // fall through
58 case any:
59 netMode_ = mconnetMode;
60 mode_ = mconMode;
61 break;
62 case cdata:
63 netMode_ = cconnetMode;
64 mode_ = cconMode;
65 break;
66 case rcdata:
67 netMode_ = rcconnetMode;
68 mode_ = rcconMode;
69 break;
70 case empty:
71 break;
72 default:
73 CANNOT_HAPPEN();
74 }
75 }
76
swap(ElementType & to)77 void ElementType::swap(ElementType &to)
78 {
79 Named::swap(to);
80 {
81 size_t tem = to.index_;
82 to.index_ = index_;
83 index_ = tem;
84 }
85 {
86 size_t tem = to.defIndex_;
87 to.defIndex_ = defIndex_;
88 defIndex_ = tem;
89 }
90 def_.swap(to.def_);
91 {
92 const ShortReferenceMap *tem = to.map_;
93 to.map_ = map_;
94 map_ = tem;
95 }
96 }
97
RankStem(const StringC & name,size_t index)98 RankStem::RankStem(const StringC &name, size_t index)
99 : Named(name), index_(index)
100 {
101 }
102
addDefinition(const ConstPtr<ElementDefinition> & p)103 void RankStem::addDefinition(const ConstPtr<ElementDefinition> &p)
104 {
105 def_.push_back(p);
106 }
107
108
109 #ifdef SP_NAMESPACE
110 }
111 #endif
112