10 #ifndef IWAFIELD_H_INCLUDED    11 #define IWAFIELD_H_INCLUDED    16 #include <boost/container/deque.hpp>    17 #include <boost/optional.hpp>    18 #include <boost/shared_ptr.hpp>    53   virtual Tag tag() 
const = 0;
    56   virtual bool empty() 
const = 0;
    57   virtual std::size_t 
size() 
const = 0;
    60   virtual bool is() 
const = 0;
    61   operator bool() 
const;
    72 template<IWAField::Tag TagV, 
typename ValueT, 
typename Reader>
    94   virtual bool is()
 const    96     return !m_values.empty();
    99   const_reference_type 
get() 
const   101     if (m_values.empty())
   102       throw std::logic_error(
"the field is unset");
   110     return m_values.empty();
   113   virtual std::size_t 
size()
 const   115     return m_values.size();
   118   const_reference_type 
operator[](
const std::size_t index)
 const   120     if (index >= m_values.size())
   121       throw std::out_of_range(
"index is out of range");
   122     return m_values[index];
   127     return m_values.begin();
   130   const_iterator 
end()
 const   132     return m_values.end();
   137     return m_values.rbegin();
   140   const_reverse_iterator 
rend()
 const   142     return m_values.rend();
   150     const std::deque<value_type> values(m_values.begin(), m_values.end());
   156     return m_values.empty() ? 
boost::none : boost::make_optional(m_values.front());
   165       const long start = input->tell();
   166       while (!input->isEnd() && (length > 
static_cast<unsigned long>(input->tell() - start)))
   168         const value_type value(Reader::read(input, length));
   169         m_values.push_back(value);
   174       m_values.push_back(value_type());
   184 template<IWAField::Tag TagV, 
typename ValueT, 
typename Reader>
   190 template<IWAField::Tag TagV, 
typename ValueT, 
typename Reader>
   193   return bool(field) ? field.
get() : value;
   196 template<IWAField::Tag TagV, 
typename ValueT, 
typename Reader, 
typename DefaultValueT>
   199   return bool(field) ? field.
get() : ValueT(value);
   220   const IWAUInt32Field &uint32(std::size_t field) 
const;
   221   const IWAUInt64Field &uint64(std::size_t field) 
const;
   222   const IWASInt32Field &sint32(std::size_t field) 
const;
   223   const IWASInt64Field &sint64(std::size_t field) 
const;
   224   const IWABoolField &bool_(std::size_t field) 
const;
   226   const IWAFixed64Field &fixed64(std::size_t field) 
const;
   227   const IWADoubleField &
double_(std::size_t field) 
const;
   229   const IWAStringField &
string(std::size_t field) 
const;
   230   const IWABytesField &bytes(std::size_t field) 
const;
   233   const IWAFixed32Field &fixed32(std::size_t field) 
const;
   234   const IWAFloatField &float_(std::size_t field) 
const;
 virtual bool empty() const =0
const std::deque< value_type > repeated() const
Definition: IWAField.h:148
Definition: IWORKBezierElement.cpp:18
Definition: IWAField.h:44
virtual std::size_t size() const
Definition: IWAField.h:113
detail::IWAFieldImpl< IWAField::TAG_FIXED64, uint64_t, IWAReader::Fixed64 > IWAFixed64Field
Definition: IWAField.h:208
Definition: IWAField.h:33
detail::IWAFieldImpl< IWAField::TAG_BOOL, bool, IWAReader::Bool > IWABoolField
Definition: IWAField.h:206
const_reference_type get() const
Definition: IWAField.h:99
virtual IWAField::Tag tag() const
Definition: IWAField.h:87
detail::IWAFieldImpl< IWAField::TAG_STRING, std::string, IWAReader::String > IWAStringField
Definition: IWAField.h:211
detail::IWAFieldImpl< IWAField::TAG_UINT64, uint64_t, IWAReader::UInt64 > IWAUInt64Field
Definition: IWAField.h:203
boost::container::deque< ValueT > container_type
Definition: IWAField.h:75
Definition: IWAField.h:37
detail::IWAFieldImpl< IWAField::TAG_UINT32, uint32_t, IWAReader::UInt32 > IWAUInt32Field
Definition: IWAField.h:202
Definition: IWAField.h:34
virtual std::size_t size() const =0
const_iterator end() const
Definition: IWAField.h:130
virtual bool is() const =0
virtual ~IWAField()=0
Definition: IWAField.cpp:16
Definition: IWAField.h:32
ValueT value_type
Definition: IWAField.h:78
Definition: IWORKToken.h:380
const boost::optional< value_type > optional() const
Definition: IWAField.h:154
Definition: IWAField.h:46
virtual void parse(const RVNGInputStreamPtr_t &input, unsigned long length, bool allowEmpty)=0
detail::IWAFieldImpl< IWAField::TAG_FLOAT, float, IWAReader::Float > IWAFloatField
Definition: IWAField.h:215
Definition: IWAField.h:31
detail::IWAFieldImpl< IWAField::TAG_SINT32, int32_t, IWAReader::SInt32 > IWASInt32Field
Definition: IWAField.h:204
Tag
Definition: IWAField.h:29
const_reference_type operator[](const std::size_t index) const
Definition: IWAField.h:118
Definition: IWAField.h:41
Definition: IWAField.h:45
detail::IWAFieldImpl< IWAField::TAG_BYTES, RVNGInputStreamPtr_t, IWAReader::Bytes > IWABytesField
Definition: IWAField.h:212
container_type m_values
Definition: IWAField.h:179
detail::IWAFieldImpl< IWAField::TAG_DOUBLE, double, IWAReader::Double > IWADoubleField
Definition: IWAField.h:209
Definition: IWAField.h:47
container_type::const_reverse_iterator const_reverse_iterator
Definition: IWAField.h:82
Definition: IWAField.h:43
const ValueT & get_optional_value_or(const detail::IWAFieldImpl< TagV, ValueT, Reader > &field, const ValueT &value)
Definition: IWAField.h:191
const_reverse_iterator rend() const
Definition: IWAField.h:140
boost::shared_ptr< IWAField > IWAFieldPtr_t
Definition: IWAField.h:67
virtual bool is() const
Definition: IWAField.h:94
const_reverse_iterator rbegin() const
Definition: IWAField.h:135
Definition: IWAField.h:36
const_iterator begin() const
Definition: IWAField.h:125
Definition: IWAField.h:73
boost::shared_ptr< librevenge::RVNGInputStream > RVNGInputStreamPtr_t
Definition: libetonyek_utils.h:111
const ValueT & const_reference_type
Definition: IWAField.h:80
Definition: IWORKToken.h:371
Definition: IWAField.h:217
Definition: IWAField.h:40
Definition: IWORKToken.h:252
Definition: IWAField.h:26
ValueT & reference_type
Definition: IWAField.h:79
virtual void parse(const RVNGInputStreamPtr_t &input, const unsigned long length, const bool allowEmpty)
Definition: IWAField.h:161
Definition: IWAField.h:35
detail::IWAFieldImpl< IWAField::TAG_SINT64, int64_t, IWAReader::SInt64 > IWASInt64Field
Definition: IWAField.h:205
bool operator!() const
Definition: IWAField.cpp:25
Definition: IWAField.h:42
virtual bool empty() const
Definition: IWAField.h:108
Definition: IWAField.h:38
Definition: IWAField.h:39
container_type::const_iterator const_iterator
Definition: IWAField.h:81
detail::IWAFieldImpl< IWAField::TAG_FIXED32, uint32_t, IWAReader::Fixed32 > IWAFixed32Field
Definition: IWAField.h:214
virtual Tag tag() const =0