X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=pdf2swf%2Fxpdf%2FFunction.h;h=bfaf83e300e1a42e88444c2b18aae0c33ef3eb34;hb=85c46a8011c7fd5e4bda282266006c972ea7606b;hp=9b0879f3dff152e42aa0e1a3c957723078283361;hpb=3df3a8d12d7a516579a4eae276b077c015df0f70;p=swftools.git diff --git a/pdf2swf/xpdf/Function.h b/pdf2swf/xpdf/Function.h index 9b0879f..bfaf83e 100644 --- a/pdf2swf/xpdf/Function.h +++ b/pdf2swf/xpdf/Function.h @@ -2,14 +2,16 @@ // // Function.h // -// Copyright 2001-2002 Glyph & Cog, LLC +// Copyright 2001-2003 Glyph & Cog, LLC // //======================================================================== #ifndef FUNCTION_H #define FUNCTION_H -#ifdef __GNUC__ +#include + +#ifdef USE_GCC_PRAGMAS #pragma interface #endif @@ -25,8 +27,8 @@ class PSStack; // Function //------------------------------------------------------------------------ -#define funcMaxInputs 8 -#define funcMaxOutputs 8 +#define funcMaxInputs 8 +#define funcMaxOutputs 32 class Function { public: @@ -43,10 +45,24 @@ public: 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; @@ -72,6 +88,7 @@ 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; } @@ -88,9 +105,17 @@ 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); @@ -101,7 +126,11 @@ private: 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 GBool ok; }; @@ -115,9 +144,14 @@ 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); @@ -138,9 +172,15 @@ 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; } + private: StitchingFunction(StitchingFunction *func); @@ -162,9 +202,12 @@ 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); @@ -173,6 +216,7 @@ private: void resizeCode(int newSize); void exec(PSStack *stack, int codePtr); + GString *codeString; PSObject *code; int codeSize; GBool ok;