X-Git-Url: http://git.asbjorn.biz/?p=swftools.git;a=blobdiff_plain;f=pdf2swf%2Fxpdf%2FFunction.h;h=bfaf83e300e1a42e88444c2b18aae0c33ef3eb34;hp=0ceb03515c352493f275de75afd010e6a2c7fea1;hb=85c46a8011c7fd5e4bda282266006c972ea7606b;hpb=b0d012f83219d898e9cd92281d9996bc9ff13b5f diff --git a/pdf2swf/xpdf/Function.h b/pdf2swf/xpdf/Function.h index 0ceb035..bfaf83e 100644 --- a/pdf2swf/xpdf/Function.h +++ b/pdf2swf/xpdf/Function.h @@ -45,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; @@ -74,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; } @@ -90,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); @@ -103,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; }; @@ -117,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); @@ -140,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); @@ -164,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); @@ -175,6 +216,7 @@ private: void resizeCode(int newSize); void exec(PSStack *stack, int codePtr); + GString *codeString; PSObject *code; int codeSize; GBool ok;