00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef __BxUnion__
00018 #define __BxUnion__
00019
00020 #include "BxDataObject.h"
00021 #include "BxUnionCases.h"
00022
00056 class DECLSPEC BxUnion : public BxDataObject
00057 {
00058 public:
00059 BxUnion();
00060 BxUnion(const BxUnion& copy);
00061 virtual ~BxUnion();
00062
00063 virtual char * className() const { return "BxUnion"; }
00064 virtual BxUnion* clone() const;
00065 virtual void readFromBuffer(const byte *);
00066 virtual bool readFromFile();
00067 virtual char* toString(bool xml);
00068 virtual bool toStream(FILE*);
00069 virtual bool toStreamBinary(FILE*);
00070
00071
00072 virtual bool toStreamBinary(FILE*, BxByteOrder);
00073 virtual void setBinaryFilePtr(BxBinaryFile* fp);
00074
00075 void setDiscriminant(BxDataObject *);
00076 void setAssignedCase(BxUnionCase *p);
00077 void setAssignedCase(int index);
00078 void setAssignedCase();
00079
00080 const BxUnionCases& getUnionCases() { return cases_; }
00081 BxDataObject * getDiscriminant() const { return discriminant_; }
00082 BxUnionCase * getAssignedCase() const { return assigned_; }
00083 BxDataObject * getDataObject();
00084
00085 void addUnionCase(BxUnionCase * uc);
00086 void addUnionCase(const char * sDiscriminantValue, BxDataObject * pArmObject);
00087
00088 protected:
00089 BxDataObject * getArmDataObject() const;
00090 void resize();
00091
00092 private:
00093 BxDataObject * discriminant_;
00094 BxUnionCase * assigned_;
00095 BxUnionCases cases_;
00096
00097 };
00098
00099 #endif