9#include "PdfDataContainer.h"
14using PdfArrayList = std::vector<PdfObject>;
17template <
typename TObject,
typename TListIterator>
33 using difference_type =
void;
36 using reference =
void;
37 using iterator_category = std::forward_iterator_tag;
43 Iterator(
const Iterator&) =
default;
44 Iterator& operator=(
const Iterator&) =
default;
45 bool operator==(
const Iterator&
rhs)
const;
46 bool operator!=(
const Iterator&
rhs)
const;
47 Iterator& operator++();
48 Iterator operator++(
int);
49 value_type operator*();
50 value_type operator->();
59 Iterator begin()
const;
85 using iterator = PdfArrayList::iterator;
86 using const_iterator = PdfArrayList::const_iterator;
87 using reverse_iterator = PdfArrayList::reverse_iterator;
88 using const_reverse_iterator = PdfArrayList::const_reverse_iterator;
99 template <
typename TReal,
typename = std::enable_if_t<std::is_
floating_po
int_v<TReal>>>
102 template <
typename TInt,
typename = std::enable_if_t<std::is_
integral_v<TInt>>>
114 unsigned GetSize()
const;
117 bool IsEmpty()
const;
125 template <
typename T>
126 const typename ObjectAdapter<T>::TRet GetAtAs(
unsigned idx)
const;
128 template <
typename T>
129 typename ObjectAdapter<T>::TRet GetAtAs(
unsigned idx);
131 template <
typename T>
132 const typename ObjectAdapter<T>::TRet GetAtAsSafe(
unsigned idx,
const std::common_type_t<T>&
fallback = { })
const;
134 template <
typename T>
135 typename ObjectAdapter<T>::TRet GetAtAsSafe(
unsigned idx,
const std::common_type_t<T>&
fallback = { });
137 template <
typename T>
138 bool TryGetAtAs(
unsigned idx, T& value)
const;
140 template <
typename T>
141 bool TryGetAtAs(
unsigned idx, T& value);
157 template <
typename T>
158 const typename ObjectAdapter<T>::TRet FindAtAs(
unsigned idx)
const;
160 template <
typename T>
161 typename ObjectAdapter<T>::TRet FindAtAs(
unsigned idx);
163 template <
typename T>
164 const typename ObjectAdapter<T>::TRet FindAtAsSafe(
unsigned idx,
const std::common_type_t<T>&
fallback = { })
const;
166 template <
typename T>
167 typename ObjectAdapter<T>::TRet FindAtAsSafe(
unsigned idx,
const std::common_type_t<T>&
fallback = { });
169 template <
typename T>
170 bool TryFindAtAs(
unsigned idx, T& value)
const;
172 template <
typename T>
173 bool TryFindAtAs(
unsigned idx, T& value);
175 void RemoveAt(
unsigned idx);
202 void Reserve(
unsigned n);
229 const_iterator begin()
const;
239 const_iterator end()
const;
244 reverse_iterator rbegin();
249 const_reverse_iterator rbegin()
const;
254 reverse_iterator rend();
259 const_reverse_iterator rend()
const;
261 void resize(
size_t size);
263 void reserve(
size_t size);
268 template<
typename InputIterator>
271 void erase(
const iterator&
pos);
272 void erase(
const iterator&
first,
const iterator&
last);
295 void resetDirty()
override;
296 void setChildrenParent()
override;
311 PdfArrayList m_Objects;
314template<
typename TReal,
typename>
319 for (
unsigned i = 0; i <
reals.size(); i++)
325template<
typename TInt,
typename>
326PdfArray PdfArray::FromNumbers(cspan<TInt> numbers)
329 arr.reserve(numbers.size());
330 for (
unsigned i = 0; i < numbers.size(); i++)
331 arr.Add(PdfObject(
static_cast<int64_t
>(numbers[i])));
337const typename ObjectAdapter<T>::TRet PdfArray::GetAtAs(
unsigned idx)
const
339 return ObjectAdapter<T>::Get(
const_cast<const PdfObject&
>(getAt(idx)));
343typename ObjectAdapter<T>::TRet PdfArray::GetAtAs(
unsigned idx)
345 return ObjectAdapter<T>::Get(getAt(idx));
349const typename ObjectAdapter<T>::TRet PdfArray::GetAtAsSafe(
unsigned idx,
const std::common_type_t<T>& fallback)
const
351 return ObjectAdapter<T>::Get(
const_cast<const PdfObject&
>(getAt(idx)), fallback);
355typename ObjectAdapter<T>::TRet PdfArray::GetAtAsSafe(
unsigned idx,
const std::common_type_t<T>& fallback)
357 return ObjectAdapter<T>::Get(getAt(idx), fallback);
361bool PdfArray::TryGetAtAs(
unsigned idx, T& value)
const
363 if (ObjectAdapter<T>::TryGet(
const_cast<const PdfObject&
>(getAt(idx)), value))
375bool PdfArray::TryGetAtAs(
unsigned idx, T& value)
377 if (ObjectAdapter<T>::TryGet(getAt(idx), value))
389const typename ObjectAdapter<T>::TRet PdfArray::FindAtAs(
unsigned idx)
const
391 return ObjectAdapter<T>::Get(MustFindAt(idx));
395inline typename ObjectAdapter<T>::TRet PdfArray::FindAtAs(
unsigned idx)
397 return ObjectAdapter<T>::Get(MustFindAt(idx));
401const typename ObjectAdapter<T>::TRet PdfArray::FindAtAsSafe(
unsigned idx,
const std::common_type_t<T>& fallback)
const
403 auto obj = findAt(idx);
407 return ObjectAdapter<T>::Get(
const_cast<const PdfObject&
>(*obj), fallback);
411inline typename ObjectAdapter<T>::TRet PdfArray::FindAtAsSafe(
unsigned idx,
const std::common_type_t<T>& fallback)
413 auto obj = findAt(idx);
417 return ObjectAdapter<T>::Get(*obj, fallback);
421bool PdfArray::TryFindAtAs(
unsigned idx, T& value)
const
423 auto obj = findAt(idx);
424 if (obj !=
nullptr && ObjectAdapter<T>::TryGet(
const_cast<const PdfObject&
>(*obj), value))
436inline bool PdfArray::TryFindAtAs(
unsigned idx, T& value)
438 auto obj = findAt(idx);
439 if (obj !=
nullptr && ObjectAdapter<T>::TryGet(*obj, value))
450template<
typename InputIterator>
451void PdfArray::insert(
const PdfArray::iterator& pos,
452 const InputIterator& first,
453 const InputIterator& last)
456 auto document = GetObjectDocument();
457 InputIterator it1 = first;
459 for (; it1 != last; it1++, it2++)
461 it2 = m_Objects.insert(it2, *it1);
462 it2->SetDocument(document);
468template<
typename TObject,
typename TListIterator>
469PdfArrayIndirectIterableBase<TObject, TListIterator>::PdfArrayIndirectIterableBase()
472template<
typename TObject,
typename TListIterator>
473PdfArrayIndirectIterableBase<TObject, TListIterator>::PdfArrayIndirectIterableBase(PdfArray& arr)
474 : PdfIndirectIterableBase(arr), m_arr(&arr) { }
476template<
typename TObject,
typename TListIterator>
477typename PdfArrayIndirectIterableBase<TObject, TListIterator>::Iterator PdfArrayIndirectIterableBase<TObject, TListIterator>::begin()
const
479 if (m_arr ==
nullptr)
482 return Iterator(m_arr->begin(), GetObjects());
485template<
typename TObject,
typename TListIterator>
486typename PdfArrayIndirectIterableBase<TObject, TListIterator>::Iterator PdfArrayIndirectIterableBase<TObject, TListIterator>::end()
const
488 if (m_arr ==
nullptr)
491 return Iterator(m_arr->end(), GetObjects());
494template<
typename TObject,
typename TListIterator>
495PdfArrayIndirectIterableBase<TObject, TListIterator>::Iterator::Iterator() : m_objects(nullptr) { }
497template<
typename TObject,
typename TListIterator>
498PdfArrayIndirectIterableBase<TObject, TListIterator>::Iterator::Iterator(TListIterator&& iterator, PdfIndirectObjectList* objects)
499 : m_iterator(std::move(iterator)), m_objects(objects) { }
501template<
typename TObject,
typename TListIterator>
502bool PdfArrayIndirectIterableBase<TObject, TListIterator>::Iterator::operator==(
const Iterator& rhs)
const
504 return m_iterator == rhs.m_iterator;
507template<
typename TObject,
typename TListIterator>
508bool PdfArrayIndirectIterableBase<TObject, TListIterator>::Iterator::operator!=(
const Iterator& rhs)
const
510 return m_iterator != rhs.m_iterator;
513template<
typename TObject,
typename TListIterator>
514typename PdfArrayIndirectIterableBase<TObject, TListIterator>::Iterator& PdfArrayIndirectIterableBase<TObject, TListIterator>::Iterator::operator++()
520template<
typename TObject,
typename TListIterator>
521typename PdfArrayIndirectIterableBase<TObject, TListIterator>::Iterator PdfArrayIndirectIterableBase<TObject, TListIterator>::Iterator::operator++(
int)
528template<
typename TObject,
typename TListIterator>
529typename PdfArrayIndirectIterableBase<TObject, TListIterator>::Iterator::value_type PdfArrayIndirectIterableBase<TObject, TListIterator>::Iterator::operator*()
534template<
typename TObject,
typename TListIterator>
535typename PdfArrayIndirectIterableBase<TObject, TListIterator>::Iterator::value_type PdfArrayIndirectIterableBase<TObject, TListIterator>::Iterator::operator->()
540template<
typename TObject,
typename TListIterator>
541typename PdfArrayIndirectIterableBase<TObject, TListIterator>::Iterator::value_type PdfArrayIndirectIterableBase<TObject, TListIterator>::Iterator::resolve()
543 TObject& robj = *m_iterator;
544 TObject* indirectobj;
546 if (m_objects !=
nullptr
547 && robj.TryGetReference(ref)
549 && (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:19
This class represents a PdfArray Use it for all arrays that are written to a PDF file.
Definition PdfArray.h:76
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