00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef _CONTENTMODELH
00021 #define _CONTENTMODELH
00022
00023 #include <list>
00024 #include <utility>
00025 #include "xmlpull/wsdlpull_export.h"
00026 #include "xmlpull/Qname.h"
00027 #include "xmlpull/XmlUtils.h"
00028 #include "schemaparser/Schema.h"
00029 #include "schemaparser/SchemaParserException.h"
00030
00031 namespace Schema {
00032
00033 class Group;
00034 class Element;
00035
00036 class WSDLPULL_EXPORT ContentModel
00037 {
00038 public:
00039
00040 typedef union
00041 {
00042 Element* e;
00043 Group * g;
00044 ContentModel *c;
00045 }ContentType;
00046
00047 typedef enum {
00048 Particle,
00049 ParticleGroup,
00050 Container
00051 } ContentDiscriminator;
00052
00053 typedef std::pair<ContentType,ContentDiscriminator> ContentHolder;
00054 typedef std::list<ContentHolder> Contents;
00055 typedef std::list<ContentHolder>::iterator ContentsIterator;
00056
00057
00058 ContentModel(Schema::Compositor);
00059 ~ContentModel();
00060 Schema::Compositor getCompositor()const;
00061 ContentsIterator begin();
00062 ContentsIterator end();
00063 void addElement(const Element & e);
00064 void addGroup(const Group & e ,bool own=false);
00065 void addContentModel(const ContentModel* c);
00066 void setMin(const int & m);
00067 void setMax(const int & m);
00068 int getMin()const;
00069 int getMax()const;
00070 int getNumParticles()const;
00071 bool anyContents()const;
00072 void matchforwardRef(const std::string &name,Element &e);
00073
00074 private:
00075 Schema::Compositor m_compositor;
00076 Contents contents_;
00077 int minOccurs,maxOccurs;
00078 int nParticles;
00079 bool anyContent_;
00080 };
00081
00082 inline
00083 Schema::Compositor
00084 ContentModel::getCompositor()const
00085 {
00086 return m_compositor;
00087 }
00088
00089 inline
00090 ContentModel::ContentsIterator
00091 ContentModel::begin()
00092 {
00093 return contents_.begin();
00094 }
00095
00096 inline
00097 ContentModel::ContentsIterator
00098 ContentModel::end()
00099 {
00100 return contents_.end();
00101 }
00102
00103
00104 inline
00105 int
00106 ContentModel::getMin()const
00107 {
00108 return minOccurs;
00109
00110 }
00111
00112 inline
00113 int
00114 ContentModel::getMax()const
00115 {
00116 return maxOccurs;
00117
00118 }
00119
00120 inline
00121 void
00122 ContentModel::setMin(const int & m)
00123 {
00124 minOccurs=m;
00125
00126 }
00127
00128 inline
00129 void
00130 ContentModel::setMax(const int & m)
00131 {
00132 maxOccurs=m;
00133
00134 }
00135
00136 inline
00137 int
00138 ContentModel::getNumParticles()const
00139 {
00140 return nParticles;
00141 }
00142
00143 inline
00144 bool
00145 ContentModel::anyContents()const
00146 {
00147 return anyContent_;
00148 }
00149 }
00150 #endif