Home | History | Annotate | Download | only in page
      1 // Copyright 2017 PDFium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
      6 
      7 #ifndef CORE_FPDFAPI_PAGE_CPDF_FUNCTION_H_
      8 #define CORE_FPDFAPI_PAGE_CPDF_FUNCTION_H_
      9 
     10 #include <memory>
     11 
     12 class CPDF_ExpIntFunc;
     13 class CPDF_Object;
     14 class CPDF_SampledFunc;
     15 class CPDF_StitchFunc;
     16 
     17 class CPDF_Function {
     18  public:
     19   enum class Type {
     20     kTypeInvalid = -1,
     21     kType0Sampled = 0,
     22     kType2ExpotentialInterpolation = 2,
     23     kType3Stitching = 3,
     24     kType4PostScript = 4,
     25   };
     26 
     27   static std::unique_ptr<CPDF_Function> Load(CPDF_Object* pFuncObj);
     28   static Type IntegerToFunctionType(int iType);
     29 
     30   virtual ~CPDF_Function();
     31 
     32   bool Call(float* inputs,
     33             uint32_t ninputs,
     34             float* results,
     35             int* nresults) const;
     36   uint32_t CountInputs() const { return m_nInputs; }
     37   uint32_t CountOutputs() const { return m_nOutputs; }
     38   float GetDomain(int i) const { return m_pDomains[i]; }
     39   float GetRange(int i) const { return m_pRanges[i]; }
     40   float Interpolate(float x,
     41                     float xmin,
     42                     float xmax,
     43                     float ymin,
     44                     float ymax) const;
     45 
     46   const CPDF_SampledFunc* ToSampledFunc() const;
     47   const CPDF_ExpIntFunc* ToExpIntFunc() const;
     48   const CPDF_StitchFunc* ToStitchFunc() const;
     49 
     50  protected:
     51   explicit CPDF_Function(Type type);
     52 
     53   bool Init(CPDF_Object* pObj);
     54   virtual bool v_Init(CPDF_Object* pObj) = 0;
     55   virtual bool v_Call(float* inputs, float* results) const = 0;
     56 
     57   uint32_t m_nInputs;
     58   uint32_t m_nOutputs;
     59   float* m_pDomains;
     60   float* m_pRanges;
     61   const Type m_Type;
     62 };
     63 
     64 #endif  // CORE_FPDFAPI_PAGE_CPDF_FUNCTION_H_
     65