9#include "PdfDataContainer.h"
18template <
typename TObject,
typename TListIterator>
34 using difference_type =
void;
37 using reference =
void;
38 using iterator_category = std::forward_iterator_tag;
44 Iterator(
const Iterator&) =
default;
45 Iterator& operator=(
const Iterator&) =
default;
46 bool operator==(
const Iterator&
rhs)
const;
47 bool operator!=(
const Iterator&
rhs)
const;
48 Iterator& operator++();
49 Iterator operator++(
int);
50 value_type operator*();
51 value_type operator->();
60 Iterator begin()
const;
88 using reverse_iterator = std::reverse_iterator<iterator>;
89 using const_reverse_iterator = std::reverse_iterator<const_iterator>;
102 template <
typename TReal,
typename = std::enable_if_t<std::is_
floating_po
int_v<TReal>>>
105 template <
typename TInt,
typename = std::enable_if_t<std::is_
integral_v<TInt>>>
117 unsigned GetSize()
const;
120 bool IsEmpty()
const;
128 template <
typename T>
129 const typename ObjectAdapter<T>::TRet GetAtAs(
unsigned idx)
const;
131 template <
typename T>
132 typename ObjectAdapter<T>::TRet GetAtAs(
unsigned idx);
134 template <
typename T>
135 const typename ObjectAdapter<T>::TRet GetAtAsSafe(
unsigned idx,
const std::common_type_t<T>&
fallback = { })
const;
137 template <
typename T>
138 typename ObjectAdapter<T>::TRet GetAtAsSafe(
unsigned idx,
const std::common_type_t<T>&
fallback = { });
140 template <
typename T>
141 bool TryGetAtAs(
unsigned idx, T& value)
const;
143 template <
typename T>
144 bool TryGetAtAs(
unsigned idx, T& value);
160 template <
typename T>
161 const typename ObjectAdapter<T>::TRet FindAtAs(
unsigned idx)
const;
163 template <
typename T>
164 typename ObjectAdapter<T>::TRet FindAtAs(
unsigned idx);
166 template <
typename T>
167 const typename ObjectAdapter<T>::TRet FindAtAsSafe(
unsigned idx,
const std::common_type_t<T>&
fallback = { })
const;
169 template <
typename T>
170 typename ObjectAdapter<T>::TRet FindAtAsSafe(
unsigned idx,
const std::common_type_t<T>&
fallback = { });
172 template <
typename T>
173 bool TryFindAtAs(
unsigned idx, T& value)
const;
175 template <
typename T>
176 bool TryFindAtAs(
unsigned idx, T& value);
178 void RemoveAt(
unsigned idx);
205 void Reserve(
unsigned n);
247 reverse_iterator rbegin();
252 const_reverse_iterator rbegin()
const;
257 reverse_iterator rend();
262 const_reverse_iterator rend()
const;
264 void resize(
size_t size);
266 void reserve(
size_t size);
271 template<
typename InputIterator>
298 void resetDirty()
override;
299 void setChildrenParent()
override;
316 void ensureCapacity(
size_t size);
322 void eraseAt(
unsigned index,
unsigned count);
325 static void relocateBackPointers(
PdfObject* data,
unsigned count);
340template<
typename TReal,
typename>
345 for (
unsigned i = 0; i <
reals.size(); i++)
351template<
typename TInt,
typename>
352PdfArray PdfArray::FromNumbers(cspan<TInt> numbers)
355 arr.reserve(numbers.size());
356 for (
unsigned i = 0; i < numbers.size(); i++)
357 arr.Add(PdfObject(
static_cast<int64_t
>(numbers[i])));
363const typename ObjectAdapter<T>::TRet PdfArray::GetAtAs(
unsigned idx)
const
365 return ObjectAdapter<T>::Get(
const_cast<const PdfObject&
>(getAt(idx)));
369typename ObjectAdapter<T>::TRet PdfArray::GetAtAs(
unsigned idx)
371 return ObjectAdapter<T>::Get(getAt(idx));
375const typename ObjectAdapter<T>::TRet PdfArray::GetAtAsSafe(
unsigned idx,
const std::common_type_t<T>& fallback)
const
377 return ObjectAdapter<T>::Get(
const_cast<const PdfObject&
>(getAt(idx)), fallback);
381typename ObjectAdapter<T>::TRet PdfArray::GetAtAsSafe(
unsigned idx,
const std::common_type_t<T>& fallback)
383 return ObjectAdapter<T>::Get(getAt(idx), fallback);
387bool PdfArray::TryGetAtAs(
unsigned idx, T& value)
const
389 if (ObjectAdapter<T>::TryGet(
const_cast<const PdfObject&
>(getAt(idx)), value))
401bool PdfArray::TryGetAtAs(
unsigned idx, T& value)
403 if (ObjectAdapter<T>::TryGet(getAt(idx), value))
415const typename ObjectAdapter<T>::TRet PdfArray::FindAtAs(
unsigned idx)
const
417 return ObjectAdapter<T>::Get(MustFindAt(idx));
421inline typename ObjectAdapter<T>::TRet PdfArray::FindAtAs(
unsigned idx)
423 return ObjectAdapter<T>::Get(MustFindAt(idx));
427const typename ObjectAdapter<T>::TRet PdfArray::FindAtAsSafe(
unsigned idx,
const std::common_type_t<T>& fallback)
const
429 auto obj = findAt(idx);
433 return ObjectAdapter<T>::Get(
const_cast<const PdfObject&
>(*obj), fallback);
437inline typename ObjectAdapter<T>::TRet PdfArray::FindAtAsSafe(
unsigned idx,
const std::common_type_t<T>& fallback)
439 auto obj = findAt(idx);
443 return ObjectAdapter<T>::Get(*obj, fallback);
447bool PdfArray::TryFindAtAs(
unsigned idx, T& value)
const
449 auto obj = findAt(idx);
450 if (obj !=
nullptr && ObjectAdapter<T>::TryGet(
const_cast<const PdfObject&
>(*obj), value))
462inline bool PdfArray::TryFindAtAs(
unsigned idx, T& value)
464 auto obj = findAt(idx);
465 if (obj !=
nullptr && ObjectAdapter<T>::TryGet(*obj, value))
476template<
typename InputIterator>
477void PdfArray::insert(
const PdfArray::iterator& pos,
478 const InputIterator& first,
479 const InputIterator& last)
482 InputIterator it1 = first;
484 for (; it1 != last; it1++, it2++)
485 it2 = insertAt(it2, PdfObject(*it1));
490template<
typename TObject,
typename TListIterator>
491PdfArrayIndirectIterableBase<TObject, TListIterator>::PdfArrayIndirectIterableBase()
494template<
typename TObject,
typename TListIterator>
495PdfArrayIndirectIterableBase<TObject, TListIterator>::PdfArrayIndirectIterableBase(PdfArray& arr)
496 : PdfIndirectIterableBase(arr), m_arr(&arr) { }
498template<
typename TObject,
typename TListIterator>
499typename PdfArrayIndirectIterableBase<TObject, TListIterator>::Iterator PdfArrayIndirectIterableBase<TObject, TListIterator>::begin()
const
501 if (m_arr ==
nullptr)
504 return Iterator(m_arr->begin(), GetObjects());
507template<
typename TObject,
typename TListIterator>
508typename PdfArrayIndirectIterableBase<TObject, TListIterator>::Iterator PdfArrayIndirectIterableBase<TObject, TListIterator>::end()
const
510 if (m_arr ==
nullptr)
513 return Iterator(m_arr->end(), GetObjects());
516template<
typename TObject,
typename TListIterator>
517PdfArrayIndirectIterableBase<TObject, TListIterator>::Iterator::Iterator() : m_objects(nullptr) { }
519template<
typename TObject,
typename TListIterator>
520PdfArrayIndirectIterableBase<TObject, TListIterator>::Iterator::Iterator(TListIterator&& iterator, PdfIndirectObjectList* objects)
521 : m_iterator(std::move(iterator)), m_objects(objects) { }
523template<
typename TObject,
typename TListIterator>
524bool PdfArrayIndirectIterableBase<TObject, TListIterator>::Iterator::operator==(
const Iterator& rhs)
const
526 return m_iterator == rhs.m_iterator;
529template<
typename TObject,
typename TListIterator>
530bool PdfArrayIndirectIterableBase<TObject, TListIterator>::Iterator::operator!=(
const Iterator& rhs)
const
532 return m_iterator != rhs.m_iterator;
535template<
typename TObject,
typename TListIterator>
536typename PdfArrayIndirectIterableBase<TObject, TListIterator>::Iterator& PdfArrayIndirectIterableBase<TObject, TListIterator>::Iterator::operator++()
542template<
typename TObject,
typename TListIterator>
543typename PdfArrayIndirectIterableBase<TObject, TListIterator>::Iterator PdfArrayIndirectIterableBase<TObject, TListIterator>::Iterator::operator++(
int)
550template<
typename TObject,
typename TListIterator>
551typename PdfArrayIndirectIterableBase<TObject, TListIterator>::Iterator::value_type PdfArrayIndirectIterableBase<TObject, TListIterator>::Iterator::operator*()
556template<
typename TObject,
typename TListIterator>
557typename PdfArrayIndirectIterableBase<TObject, TListIterator>::Iterator::value_type PdfArrayIndirectIterableBase<TObject, TListIterator>::Iterator::operator->()
562template<
typename TObject,
typename TListIterator>
563typename PdfArrayIndirectIterableBase<TObject, TListIterator>::Iterator::value_type PdfArrayIndirectIterableBase<TObject, TListIterator>::Iterator::resolve()
565 TObject& robj = *m_iterator;
566 TObject* indirectobj;
568 if (m_objects !=
nullptr
569 && robj.TryGetReference(ref)
571 && (indirectobj = GetObject(*m_objects, ref)) !=
nullptr)
This file should be included as the FIRST file in every header of PoDoFo lib.
An interface for writing blocks of data to a data source.
Definition OutputStream.h:15
Helper class to iterate through array indirect objects.
Definition PdfArray.h:20
This class represents a PdfArray Use it for all arrays that are written to a PDF file.
Definition PdfArray.h:77
PdfArray()
Create an empty array.
Definition PdfArray.cpp:13
A PdfDataProvider object with a PdfObject owner, specialized in holding objects.
Definition PdfDataContainer.h:18
A list of PdfObjects that constitutes the indirect object list of the document The PdfParser will rea...
Definition PdfIndirectObjectList.h:34
This class represents a PDF indirect Object in memory.
Definition PdfObject.h:31
A simple tokenizer for PDF files and PDF content streams.
Definition PdfTokenizer.h:47
Convenient type for char array storage and/or buffer with std::string compatibility.
Definition basetypes.h:30
All classes, functions, types and enums of PoDoFo are members of these namespace.
Definition basetypes.h:13
PdfWriteFlags
Specify additional options for writing the PDF.
Definition PdfDeclarations.h:136
std::vector< PdfObject > PdfArrayList
Definition PdfArray.h:15