00001 #ifndef _IT_REFLECT_COMPLEX_TYPE_IMPL_H_
00002 #define _IT_REFLECT_COMPLEX_TYPE_IMPL_H_
00003
00004
00005
00006 #include <it_bus/reflect/complex_type.h>
00007 #include <it_bus/reflect/reflection_impl.h>
00008 #include <it_dsa/vector.h>
00009
00010 namespace IT_Bus
00011 {
00012 class Nillable;
00013 }
00014
00015 namespace IT_Reflect
00016 {
00021 class IT_AFC_API ComplexTypeImpl : public virtual ComplexType
00022 {
00023 public:
00028 ComplexTypeImpl(
00029 IT_Vector<IT_Bus::QName>& attributes
00030 ) IT_THROW_DECL(());
00031
00032 virtual size_t
00033 get_attribute_count() const IT_THROW_DECL(());
00034
00035 virtual const IT_Bus::QName&
00036 get_attribute_name(
00037 size_t i
00038 ) const IT_THROW_DECL(());
00039
00040 virtual Reflection*
00041 use_attribute_value(
00042 const IT_Bus::QName& name
00043 ) IT_THROW_DECL((ReflectException));
00044
00045 protected:
00046
00047 Reflection*
00048 throw_unknown_attribute(
00049 const IT_Bus::QName& name
00050 ) const;
00051
00052 Reflection*
00053 throw_unknown_element(
00054 const IT_Bus::QName& name
00055 ) const;
00056
00057 void
00058 throw_bad_discriminator_if(
00059 IT_Bus::Boolean test
00060 ) const;
00061
00062 const Reflection*
00063 get_nillable_attribute(
00064 const IT_Bus::Nillable& attribute
00065 ) const IT_THROW_DECL((ReflectException));
00066
00067 Reflection*
00068 use_nillable_attribute(
00069 IT_Bus::Nillable& attribute
00070 ) IT_THROW_DECL((ReflectException));
00071
00072 private:
00073 IT_Vector<IT_Bus::QName>& m_attributes;
00074 };
00075 }
00076
00077
00078 #endif