📄 function.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 + -