11#include "PdfDataContainer.h"
16using PdfArrayList = std::vector<PdfObject>;
21template <
typename TObject,
typename TListIterator>
37 using difference_type =
void;
40 using reference =
void;
41 using iterator_category = std::forward_iterator_tag;
47 Iterator(
const Iterator&) =
default;
48 Iterator& operator=(
const Iterator&) =
default;
49 bool operator==(
const Iterator&
rhs)
const;
50 bool operator!=(
const Iterator&
rhs)
const;
51 Iterator& operator++();
52 Iterator operator++(
int);
53 value_type operator*();
54 value_type operator->();
63 Iterator begin()
const;
90 using iterator = PdfArrayList::iterator;
91 using const_iterator = PdfArrayList::const_iterator;
92 using reverse_iterator = PdfArrayList::reverse_iterator;
93 using const_reverse_iterator = PdfArrayList::const_reverse_iterator;
106 template <
typename TReal,
typename = std::enable_if_t<std::is_
floating_po
int_v<TReal>>>
109 template <
typename TInt,
typename = std::enable_if_t<std::is_
integral_v<TInt>>>
124 unsigned GetSize()
const;
129 bool IsEmpty()
const;
138 template <
typename T>
139 T GetAtAs(
unsigned idx)
const;
141 template <
typename T>
142 T GetAtAsSafe(
unsigned idx,
const std::common_type_t<T>&
defvalue = { })
const;
144 template <
typename T>
145 bool TryGetAtAs(
unsigned idx, T& value)
const;
162 template <
typename T>
163 T FindAtAs(
unsigned idx,
const std::common_type_t<T>&
defvalue = { })
const;
165 template <
typename T>
166 T FindAtAsSafe(
unsigned idx,
const std::common_type_t<T>&
defvalue = { })
const;
168 template <
typename T>
169 bool TryFindAtAs(
unsigned idx, T& value)
const;
171 void RemoveAt(
unsigned idx);
200 void Reserve(
unsigned n);
227 const_iterator begin()
const;
241 const_iterator end()
const;
248 reverse_iterator rbegin();
255 const_reverse_iterator rbegin()
const;
262 reverse_iterator rend();
269 const_reverse_iterator rend()
const;
271 void resize(
size_t size);
273 void reserve(
size_t size);
278 template<
typename InputIterator>
281 void erase(
const iterator&
pos);
282 void erase(
const iterator&
first,
const iterator&
last);
313 void resetDirty()
override;
314 void setChildrenParent()
override;
329 PdfArrayList m_Objects;
332template<
typename TReal,
typename>
337 for (
unsigned i = 0; i <
reals.size(); i++)
343template<
typename TInt,
typename>
344PdfArray PdfArray::FromNumbers(cspan<TInt> numbers)
347 arr.reserve(numbers.size());
348 for (
unsigned i = 0; i < numbers.size(); i++)
349 arr.Add(PdfObject(
static_cast<int64_t
>(numbers[i])));
355T PdfArray::GetAtAs(
unsigned idx)
const
357 return Object<T>::Get(getAt(idx));
361T PdfArray::GetAtAsSafe(
unsigned idx,
const std::common_type_t<T>& defvalue)
const
364 if (Object<T>::TryGet(getAt(idx), value))
371bool PdfArray::TryGetAtAs(
unsigned idx, T& value)
const
373 if (Object<T>::TryGet(getAt(idx), value))
385T PdfArray::FindAtAs(
unsigned idx,
const std::common_type_t<T>& defvalue)
const
387 auto obj = findAt(idx);
391 return Object<T>::Get(*obj);
395T PdfArray::FindAtAsSafe(
unsigned idx,
const std::common_type_t<T>& defvalue)
const
398 auto obj = findAt(idx);
399 if (obj !=
nullptr && Object<T>::TryGet(*obj, value))
406bool PdfArray::TryFindAtAs(
unsigned idx, T& value)
const
408 auto obj = findAt(idx);
409 if (obj !=
nullptr && Object<T>::TryGet(*obj, value))
420template<
typename InputIterator>
421void PdfArray::insert(
const PdfArray::iterator& pos,
422 const InputIterator& first,
423 const InputIterator& last)
426 auto document = GetObjectDocument();
427 InputIterator it1 = first;
429 for (; it1 != last; it1++, it2++)
431 it2 = m_Objects.insert(it2, *it1);
432 it2->SetDocument(document);
438template<
typename TObject,
typename TListIterator>
439PdfArrayIndirectIterableBase<TObject, TListIterator>::PdfArrayIndirectIterableBase()
442template<
typename TObject,
typename TListIterator>
443PdfArrayIndirectIterableBase<TObject, TListIterator>::PdfArrayIndirectIterableBase(PdfArray& arr)
444 : PdfIndirectIterableBase(arr), m_arr(&arr) { }
446template<
typename TObject,
typename TListIterator>
447typename PdfArrayIndirectIterableBase<TObject, TListIterator>::Iterator PdfArrayIndirectIterableBase<TObject, TListIterator>::begin()
const
449 if (m_arr ==
nullptr)
452 return Iterator(m_arr->begin(), GetObjects());
455template<
typename TObject,
typename TListIterator>
456typename PdfArrayIndirectIterableBase<TObject, TListIterator>::Iterator PdfArrayIndirectIterableBase<TObject, TListIterator>::end()
const
458 if (m_arr ==
nullptr)
461 return Iterator(m_arr->end(), GetObjects());
464template<
typename TObject,
typename TListIterator>
465PdfArrayIndirectIterableBase<TObject, TListIterator>::Iterator::Iterator() : m_objects(nullptr) { }
467template<
typename TObject,
typename TListIterator>
468PdfArrayIndirectIterableBase<TObject, TListIterator>::Iterator::Iterator(TListIterator&& iterator, PdfIndirectObjectList* objects)
469 : m_iterator(std::move(iterator)), m_objects(objects) { }
471template<
typename TObject,
typename TListIterator>
472bool PdfArrayIndirectIterableBase<TObject, TListIterator>::Iterator::operator==(
const Iterator& rhs)
const
474 return m_iterator == rhs.m_iterator;
477template<
typename TObject,
typename TListIterator>
478bool PdfArrayIndirectIterableBase<TObject, TListIterator>::Iterator::operator!=(
const Iterator& rhs)
const
480 return m_iterator != rhs.m_iterator;
483template<
typename TObject,
typename TListIterator>
484typename PdfArrayIndirectIterableBase<TObject, TListIterator>::Iterator& PdfArrayIndirectIterableBase<TObject, TListIterator>::Iterator::operator++()
490template<
typename TObject,
typename TListIterator>
491typename PdfArrayIndirectIterableBase<TObject, TListIterator>::Iterator PdfArrayIndirectIterableBase<TObject, TListIterator>::Iterator::operator++(
int)
498template<
typename TObject,
typename TListIterator>
499typename PdfArrayIndirectIterableBase<TObject, TListIterator>::Iterator::value_type PdfArrayIndirectIterableBase<TObject, TListIterator>::Iterator::operator*()
504template<
typename TObject,
typename TListIterator>
505typename PdfArrayIndirectIterableBase<TObject, TListIterator>::Iterator::value_type PdfArrayIndirectIterableBase<TObject, TListIterator>::Iterator::operator->()
510template<
typename TObject,
typename TListIterator>
511typename PdfArrayIndirectIterableBase<TObject, TListIterator>::Iterator::value_type PdfArrayIndirectIterableBase<TObject, TListIterator>::Iterator::resolve()
513 TObject& robj = *m_iterator;
514 TObject* indirectobj;
516 if (m_objects !=
nullptr
517 && robj.TryGetReference(ref)
519 && (indirectobj = GetObject(*m_objects, ref)) !=
nullptr)
SPDX-FileCopyrightText: (C) 2005 Dominik Seichter domseichter@web.de SPDX-FileCopyrightText: (C) 2020...
An interface for writing blocks of data to a data source.
Definition OutputStream.h:18
Helper class to iterate through array indirect objects.
Definition PdfArray.h:23
This class represents a PdfArray Use it for all arrays that are written to a PDF file.
Definition PdfArray.h:81
PdfArray()
Create an empty array.
Definition PdfArray.cpp:15
A PdfDataProvider object with a PdfObject owner, specialized in holding objects.
Definition PdfDataContainer.h:22
A list of PdfObjects that constitutes the indirect object list of the document The PdfParser will rea...
Definition PdfIndirectObjectList.h:30
This class represents a PDF indirect Object in memory.
Definition PdfObject.h:35
A simple tokenizer for PDF files and PDF content streams.
Definition PdfTokenizer.h:36
Convenient type for char array storage and/or buffer with std::string compatibility.
Definition basetypes.h:38
SPDX-FileCopyrightText: (C) 2022 Francesco Pretto ceztko@gmail.com SPDX-License-Identifier: LGPL-2....
Definition basetypes.h:16
PdfWriteFlags
Specify additional options for writing the PDF.
Definition PdfDeclarations.h:149