⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 function.h

📁 这是一个做pdf阅读器的源代码文件,是大家学习阅读器资料的很好参考
💻 H
字号:
//========================================================================//// Function.h//// Copyright 2001-2003 Glyph & Cog, LLC////========================================================================#ifndef FUNCTION_H#define FUNCTION_H#include <aconf.h>#ifdef USE_GCC_PRAGMAS#pragma interface#endif#include "gtypes.h"#include "Object.h"class Dict;class Stream;struct PSObject;class PSStack;//------------------------------------------------------------------------// Function//------------------------------------------------------------------------#define funcMaxInputs        32#define funcMaxOutputs       32#define sampledFuncMaxInputs 16class Function {public:  Function();  virtual ~Function();  // Construct a function.  Returns NULL if unsuccessful.  static Function *parse(Object *funcObj);  // Initialize the entries common to all function types.  GBool init(Dict *dict);  virtual Function *copy() = 0;  // Return the function type:  //   -1 : identity  //    0 : sampled  //    2 : exponential  //    3 : stitching  //    4 : PostScript  virtual int getType() = 0;  // Return size of input and output tuples.  int getInputSize() { return m; }  int getOutputSize() { return n; }  double getDomainMin(int i) { return domain[i][0]; }  double getDomainMax(int i) { return domain[i][1]; }  double getRangeMin(int i) { return range[i][0]; }  double getRangeMax(int i) { return range[i][1]; }  GBool getHasRange() { return hasRange; }  // Transform an input tuple into an output tuple.  virtual void transform(double *in, double *out) = 0;  virtual GBool isOk() = 0;protected:  int m, n;			// size of input and output tuples  double			// min and max values for function domain    domain[funcMaxInputs][2];  double			// min and max values for function range    range[funcMaxOutputs][2];  GBool hasRange;		// set if range is defined};//------------------------------------------------------------------------// IdentityFunction//------------------------------------------------------------------------class IdentityFunction: public Function {public:  IdentityFunction();  virtual ~IdentityFunction();  virtual Function *copy() { return new IdentityFunction(); }  virtual int getType() { return -1; }  virtual void transform(double *in, double *out);  virtual GBool isOk() { return gTrue; }private:};//------------------------------------------------------------------------// SampledFunction//------------------------------------------------------------------------class SampledFunction: public Function {public:  SampledFunction(Object *funcObj, Dict *dict);  virtual ~SampledFunction();  virtual Function *copy() { return new SampledFunction(this); }  virtual int getType() { return 0; }  virtual void transform(double *in, double *out);  virtual GBool isOk() { return ok; }  int getSampleSize(int i) { return sampleSize[i]; }  double getEncodeMin(int i) { return encode[i][0]; }  double getEncodeMax(int i) { return encode[i][1]; }  double getDecodeMin(int i) { return decode[i][0]; }  double getDecodeMax(int i) { return decode[i][1]; }  double *getSamples() { return samples; }private:  SampledFunction(SampledFunction *func);  int				// number of samples for each domain element    sampleSize[funcMaxInputs];  double			// min and max values for domain encoder    encode[funcMaxInputs][2];  double			// min and max values for range decoder    decode[funcMaxOutputs][2];  double			// input multipliers    inputMul[funcMaxInputs];  int idxMul[funcMaxInputs];	// sample array index multipliers  double *samples;		// the samples  int nSamples;			// size of the samples array  double *sBuf;			// buffer for the transform function  GBool ok;};//------------------------------------------------------------------------// ExponentialFunction//------------------------------------------------------------------------class ExponentialFunction: public Function {public:  ExponentialFunction(Object *funcObj, Dict *dict);  virtual ~ExponentialFunction();  virtual Function *copy() { return new ExponentialFunction(this); }  virtual int getType() { return 2; }  virtual void transform(double *in, double *out);  virtual GBool isOk() { return ok; }  double *getC0() { return c0; }  double *getC1() { return c1; }  double getE() { return e; }private:  ExponentialFunction(ExponentialFunction *func);  double c0[funcMaxOutputs];  double c1[funcMaxOutputs];  double e;  GBool ok;};//------------------------------------------------------------------------// StitchingFunction//------------------------------------------------------------------------class StitchingFunction: public Function {public:  StitchingFunction(Object *funcObj, Dict *dict);  virtual ~StitchingFunction();  virtual Function *copy() { return new StitchingFunction(this); }  virtual int getType() { return 3; }  virtual void transform(double *in, double *out);  virtual GBool isOk() { return ok; }  int getNumFuncs() { return k; }  Function *getFunc(int i) { return funcs[i]; }  double *getBounds() { return bounds; }  double *getEncode() { return encode; }  double *getScale() { return scale; }private:  StitchingFunction(StitchingFunction *func);  int k;  Function **funcs;  double *bounds;  double *encode;  double *scale;  GBool ok;};//------------------------------------------------------------------------// PostScriptFunction//------------------------------------------------------------------------class PostScriptFunction: public Function {public:  PostScriptFunction(Object *funcObj, Dict *dict);  virtual ~PostScriptFunction();  virtual Function *copy() { return new PostScriptFunction(this); }  virtual int getType() { return 4; }  virtual void transform(double *in, double *out);  virtual GBool isOk() { return ok; }  GString *getCodeString() { return codeString; }private:  PostScriptFunction(PostScriptFunction *func);  GBool parseCode(Stream *str, int *codePtr);  GString *getToken(Stream *str);  void resizeCode(int newSize);  void exec(PSStack *stack, int codePtr);  GString *codeString;  PSObject *code;  int codeSize;  GBool ok;};#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -