4#ifndef PDF_FUNCTION_DEFINITION_H
5#define PDF_FUNCTION_DEFINITION_H
7#include "PdfEncodingCommon.h"
12 class PdfIndirectObjectList;
15 enum class PdfFunctionType : uint8_t
21 PostScriptCalculator = 4
24 class PODOFO_API PdfFunctionDefinition
26 friend class PdfFunction;
27 friend class PdfSampledFunctionDefinition;
28 friend class PdfExponentialFunctionDefinition;
29 friend class PdfStitchingFunctionDefinition;
30 friend class PdfPostScriptCalculatorFunctionDefinition;
32 virtual ~PdfFunctionDefinition();
34 PdfFunctionDefinition(PdfFunctionType type, std::vector<double>&& domain, std::vector<double>&& range);
36 unsigned GetInputCount()
const;
37 virtual unsigned GetOutputCount()
const;
38 const std::vector<double>& GetDomain()
const {
return m_Domain; }
39 const std::vector<double>& GetRange()
const {
return m_Range; }
40 PdfFunctionType GetType()
const {
return m_Type; }
42 PdfFunctionDefinition(
const PdfFunctionDefinition&) =
default;
43 virtual void fillExportDictionary(PdfDictionary& dict)
const = 0;
45 const PdfFunctionDefinition& operator=(
const PdfFunctionDefinition&) =
delete;
46 void FillExportDictionary(PdfDictionary& dict)
const;
48 std::vector<double> m_Domain;
49 std::vector<double> m_Range;
50 PdfFunctionType m_Type;
56 class PODOFO_API PdfFunctionListInitializer
final
58 friend class PdfStitchingFunctionDefinition;
59 friend class PdfShadingDefinition;
62 PdfFunctionListInitializer();
64 PdfFunctionListInitializer(
const PdfFunction&
func);
66 PdfFunctionListInitializer(
cspan<std::reference_wrapper<const PdfFunction>>
funcs);
68 template <
typename...
Args>
69 PdfFunctionListInitializer(
const PdfFunction&
func,
const Args& ...
more);
74 void pushBack(
const PdfFunction&
func);
76 PdfFunctionListInitializer(
const PdfFunctionListInitializer&) =
delete;
77 PdfFunctionListInitializer& operator=(
const PdfFunctionListInitializer&) =
delete;
83 std::vector<PdfFunctionDefinitionPtr> m_Definitions;
87 enum class PdfSampledFunctionOrder : uint8_t
93 class PODOFO_API PdfSampledFunctionDefinition final :
public PdfFunctionDefinition
96 PdfSampledFunctionDefinition(std::vector<unsigned> size,
unsigned char bitsPerSample, std::vector<unsigned> samples,
97 std::vector<double> domain, std::vector<double> range,
98 PdfSampledFunctionOrder order = PdfSampledFunctionOrder::Linear,
99 std::vector<double> encode = { }, std::vector<double> decode = { });
101 PdfSampledFunctionDefinition(
const PdfSampledFunctionDefinition&) =
default;
103 unsigned GetSampleCount()
const;
104 unsigned char GetBitsPerSample()
const {
return m_BitsPerSample; }
105 PdfSampledFunctionOrder GetOrder()
const {
return m_Order; }
106 const std::vector<unsigned>& GetSize()
const {
return m_Size; }
107 const std::vector<unsigned>& GetSamples()
const {
return m_Samples; }
108 const std::vector<double>& GetEncode()
const {
return m_Encode; }
109 const std::vector<double>& GetDecode()
const {
return m_Decode; }
111 void fillExportDictionary(PdfDictionary& dict)
const override;
113 unsigned char m_BitsPerSample;
114 PdfSampledFunctionOrder m_Order;
115 std::vector<unsigned> m_Size;
116 std::vector<unsigned> m_Samples;
117 std::vector<double> m_Encode;
118 std::vector<double> m_Decode;
121 class PODOFO_API PdfExponentialFunctionDefinition final :
public PdfFunctionDefinition
126 PdfExponentialFunctionDefinition(
double interpolationExponent, std::vector<double> domain,
127 std::vector<double> c0 = { },
128 std::vector<double> c1 = { },
129 std::vector<double> range = { });
131 PdfExponentialFunctionDefinition(
const PdfExponentialFunctionDefinition&) =
default;
133 unsigned GetOutputCount()
const override;
134 double GetInterpolationExponent()
const {
return m_InterpolationExponent; }
135 const std::vector<double>& GetC0()
const {
return m_C0; }
136 const std::vector<double>& GetC1()
const {
return m_C1; }
138 void fillExportDictionary(PdfDictionary& dict)
const override;
140 double m_InterpolationExponent;
141 std::vector<double> m_C0;
142 std::vector<double> m_C1;
145 class PODOFO_API PdfStitchingFunctionDefinition final :
public PdfFunctionDefinition
148 PdfStitchingFunctionDefinition(PdfFunctionListInitializer&& functions,
149 std::vector<double> bounds, std::vector<double> encode,
150 std::vector<double> domain, std::vector<double> range = { });
153 PdfStitchingFunctionDefinition(std::vector<PdfFunctionDefinitionPtr>&& functions,
154 std::vector<double>&& bounds, std::vector<double>&& encode,
155 std::vector<double>&& domain, std::vector<double>&& range);
157 PdfStitchingFunctionDefinition(
const PdfStitchingFunctionDefinition&) =
default;
160 const std::vector<std::shared_ptr<const PdfFunctionDefinition>>& GetFunctions()
const {
return m_Functions; }
161 const std::vector<double>& GetBounds()
const {
return m_Bounds; }
162 const std::vector<double>& GetEncode()
const {
return m_Encode; }
164 void fillExportDictionary(PdfDictionary& dict)
const override;
166 std::vector<std::shared_ptr<const PdfFunctionDefinition>> m_Functions;
167 PdfVariant m_functionsExpVar;
168 std::vector<double> m_Bounds;
169 std::vector<double> m_Encode;
172 class PODOFO_API PdfPostScriptCalculatorFunctionDefinition final :
public PdfFunctionDefinition
175 PdfPostScriptCalculatorFunctionDefinition(std::vector<double> domain, std::vector<double> range);
177 PdfPostScriptCalculatorFunctionDefinition(
const PdfPostScriptCalculatorFunctionDefinition&) =
default;
179 void fillExportDictionary(PdfDictionary& dict)
const override;
182 template<
typename ...Args>
183 PdfFunctionListInitializer::PdfFunctionListInitializer(
const PdfFunction& func,
const Args& ...more)
184 : PdfFunctionListInitializer(1 + sizeof...(more))
187 (pushBack(more), ...);
A variant data type which supports all data types supported by the PDF standard.
Definition PdfVariant.h:29
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
tcb::span< const T, Extent > cspan
Constant span.
Definition span.h:18
std::shared_ptr< const PdfFunctionDefinition > PdfFunctionDefinitionPtr
Convenience alias for a constant PdfFunction shared ptr.
Definition PdfFunctionDefinition.h:54