10 #ifndef IWAFIELD_H_INCLUDED
11 #define IWAFIELD_H_INCLUDED
16 #include <boost/optional.hpp>
17 #include <boost/shared_ptr.hpp>
52 virtual Tag tag()
const = 0;
55 virtual bool empty()
const = 0;
56 virtual std::size_t
size()
const = 0;
59 virtual bool is()
const = 0;
60 operator bool()
const;
71 template<IWAField::Tag TagV,
typename ValueT,
typename Reader>
93 virtual bool is()
const
98 const_reference_type
get()
const
101 throw std::logic_error(
"the field is unset");
112 virtual std::size_t
size()
const
117 const_reference_type
operator[](
const std::size_t index)
const
120 throw std::out_of_range(
"index is out of range");
129 const_iterator
end()
const
139 const_reverse_iterator
rend()
const
153 return m_values.empty() ? boost::none : boost::make_optional(
m_values.front());
160 const long start = input->tell();
161 while (!input->isEnd() && (length >
static_cast<unsigned long>(input->tell() - start)))
163 const value_type value(Reader::read(input, length));
174 template<IWAField::Tag TagV,
typename ValueT,
typename Reader>
180 template<IWAField::Tag TagV,
typename ValueT,
typename Reader>
183 return bool(field) ? field.
get() : value;
186 template<IWAField::Tag TagV,
typename ValueT,
typename Reader,
typename DefaultValueT>
189 return bool(field) ? field.
get() : ValueT(value);
210 const IWAUInt32Field &
uint32(std::size_t field)
const;
211 const IWAUInt64Field &
uint64(std::size_t field)
const;
212 const IWASInt32Field &
sint32(std::size_t field)
const;
213 const IWASInt64Field &
sint64(std::size_t field)
const;
214 const IWABoolField &
bool_(std::size_t field)
const;
216 const IWAFixed64Field &
fixed64(std::size_t field)
const;
217 const IWADoubleField &
double_(std::size_t field)
const;
219 const IWAStringField &
string(std::size_t field)
const;
220 const IWABytesField &
bytes(std::size_t field)
const;
223 const IWAFixed32Field &
fixed32(std::size_t field)
const;
224 const IWAFloatField &
float_(std::size_t field)
const;
virtual std::size_t size() const =0
Definition: IWORKBezierElement.cpp:18
const IWAUInt64Field & uint64(std::size_t field) const
Definition: IWAField.cpp:35
const IWAFixed32Field & fixed32(std::size_t field) const
Definition: IWAField.cpp:75
virtual bool is() const
Definition: IWAField.h:93
Definition: IWAField.h:43
detail::IWAFieldImpl< IWAField::TAG_FIXED64, uint64_t, IWAReader::Fixed64 > IWAFixed64Field
Definition: IWAField.h:198
Definition: IWAField.h:32
const_reference_type operator[](const std::size_t index) const
Definition: IWAField.h:117
detail::IWAFieldImpl< IWAField::TAG_BOOL, bool, IWAReader::Bool > IWABoolField
Definition: IWAField.h:196
detail::IWAFieldImpl< IWAField::TAG_STRING, std::string, IWAReader::String > IWAStringField
Definition: IWAField.h:201
bool operator!() const
Definition: IWAField.cpp:25
detail::IWAFieldImpl< IWAField::TAG_UINT64, uint64_t, IWAReader::UInt64 > IWAUInt64Field
Definition: IWAField.h:193
Definition: IWAField.h:36
detail::IWAFieldImpl< IWAField::TAG_UINT32, uint32_t, IWAReader::UInt32 > IWAUInt32Field
Definition: IWAField.h:192
Definition: IWAField.h:33
virtual Tag tag() const =0
const IWASInt32Field & sint32(std::size_t field) const
Definition: IWAField.cpp:40
virtual ~IWAField()=0
Definition: IWAField.cpp:16
Definition: IWAField.h:31
ValueT value_type
Definition: IWAField.h:77
virtual void parse(const RVNGInputStreamPtr_t &input, unsigned long length)=0
std::deque< ValueT > container_type
Definition: IWAField.h:74
Definition: IWAField.h:45
detail::IWAFieldImpl< IWAField::TAG_FLOAT, float, IWAReader::Float > IWAFloatField
Definition: IWAField.h:205
Definition: IWAField.h:30
detail::IWAFieldImpl< IWAField::TAG_SINT32, int32_t, IWAReader::SInt32 > IWASInt32Field
Definition: IWAField.h:194
std::deque< ValueT > m_values
Definition: IWAField.h:169
Tag
Definition: IWAField.h:28
virtual std::size_t size() const
Definition: IWAField.h:112
Definition: IWAField.h:40
Definition: IWAField.h:44
detail::IWAFieldImpl< IWAField::TAG_BYTES, RVNGInputStreamPtr_t, IWAReader::Bytes > IWABytesField
Definition: IWAField.h:202
detail::IWAFieldImpl< IWAField::TAG_DOUBLE, double, IWAReader::Double > IWADoubleField
Definition: IWAField.h:199
Definition: IWAField.h:46
virtual bool is() const =0
container_type::const_reverse_iterator const_reverse_iterator
Definition: IWAField.h:81
Definition: IWAField.h:42
const std::deque< value_type > & repeated() const
Definition: IWAField.h:146
const ValueT & get_optional_value_or(const detail::IWAFieldImpl< TagV, ValueT, Reader > &field, const ValueT &value)
Definition: IWAField.h:181
const IWASInt64Field & sint64(std::size_t field) const
Definition: IWAField.cpp:45
virtual void parse(const RVNGInputStreamPtr_t &input, const unsigned long length)
Definition: IWAField.h:158
const IWAUInt32Field & uint32(std::size_t field) const
Definition: IWAField.cpp:30
const_reverse_iterator rend() const
Definition: IWAField.h:139
boost::shared_ptr< IWAField > IWAFieldPtr_t
Definition: IWAField.h:66
const IWADoubleField & double_(std::size_t field) const
Definition: IWAField.cpp:60
Definition: IWAField.h:35
virtual IWAField::Tag tag() const
Definition: IWAField.h:86
const IWABoolField & bool_(std::size_t field) const
Definition: IWAField.cpp:50
virtual bool empty() const =0
Definition: IWAField.h:72
boost::shared_ptr< librevenge::RVNGInputStream > RVNGInputStreamPtr_t
Definition: libetonyek_utils.h:111
const ValueT & const_reference_type
Definition: IWAField.h:79
Definition: IWAField.h:207
Definition: IWAField.h:39
const_reverse_iterator rbegin() const
Definition: IWAField.h:134
const IWAMessageField & message(std::size_t field) const
Definition: IWAField.cpp:70
const IWAFixed64Field & fixed64(std::size_t field) const
Definition: IWAField.cpp:55
Definition: IWAField.h:25
ValueT & reference_type
Definition: IWAField.h:78
Definition: IWAField.h:34
const IWABytesField & bytes(std::size_t field) const
detail::IWAFieldImpl< IWAField::TAG_SINT64, int64_t, IWAReader::SInt64 > IWASInt64Field
Definition: IWAField.h:195
Definition: IWAField.h:41
const_reference_type get() const
Definition: IWAField.h:98
const IWAFloatField & float_(std::size_t field) const
Definition: IWAField.cpp:80
const boost::optional< value_type > optional() const
Definition: IWAField.h:151
Definition: IWAField.h:37
virtual bool empty() const
Definition: IWAField.h:107
Definition: IWAField.h:38
container_type::const_iterator const_iterator
Definition: IWAField.h:80
const_iterator begin() const
Definition: IWAField.h:124
detail::IWAFieldImpl< IWAField::TAG_FIXED32, uint32_t, IWAReader::Fixed32 > IWAFixed32Field
Definition: IWAField.h:204
const IWAStringField & string(std::size_t field) const
Definition: IWAField.cpp:65
const_iterator end() const
Definition: IWAField.h:129