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

📄 fixedpoint.h

📁 这是一个做pdf阅读器的源代码文件,是大家学习阅读器资料的很好参考
💻 H
字号:
//========================================================================//// FixedPoint.h//// Fixed point type, with C++ operators.//// Copyright 2004 Glyph & Cog, LLC////========================================================================#ifndef FIXEDPOINT_H#define FIXEDPOINT_H#include <aconf.h>#if USE_FIXEDPOINT#ifdef USE_GCC_PRAGMAS#pragma interface#endif#include <stdio.h>#include <stdlib.h>#include "gtypes.h"#define fixptShift 16#define fixptMaskL ((1 << fixptShift) - 1)#define fixptMaskH (~fixptMaskL)typedef long long FixPtInt64;class FixedPoint {public:  FixedPoint() { val = 0; }  FixedPoint(const FixedPoint &x) { val = x.val; }  FixedPoint(double x) { val = (int)(x * (1 << fixptShift) + 0.5); }  FixedPoint(int x) { val = x << fixptShift; }  FixedPoint(long x) { val = x << fixptShift; }  operator float()    { return (float) val * ((float)1 / (float)(1 << fixptShift)); }  operator double()    { return (double) val * (1.0 / (double)(1 << fixptShift)); }  operator int()    { return val >> fixptShift; }  int getRaw() { return val; }  FixedPoint operator =(FixedPoint x) { val = x.val; return *this; }  int operator ==(FixedPoint x) { return val == x.val; }  int operator ==(double x) { return *this == (FixedPoint)x; }  int operator ==(int x) { return *this == (FixedPoint)x; }  int operator ==(long x) { return *this == (FixedPoint)x; }  int operator !=(FixedPoint x) { return val != x.val; }  int operator !=(double x) { return *this != (FixedPoint)x; }  int operator !=(int x) { return *this != (FixedPoint)x; }  int operator !=(long x) { return *this != (FixedPoint)x; }  int operator <(FixedPoint x) { return val < x.val; }  int operator <(double x) { return *this < (FixedPoint)x; }  int operator <(int x) { return *this < (FixedPoint)x; }  int operator <(long x) { return *this < (FixedPoint)x; }  int operator <=(FixedPoint x) { return val <= x.val; }  int operator <=(double x) { return *this <= (FixedPoint)x; }  int operator <=(int x) { return *this <= (FixedPoint)x; }  int operator <=(long x) { return *this <= (FixedPoint)x; }  int operator >(FixedPoint x) { return val > x.val; }  int operator >(double x) { return *this > (FixedPoint)x; }  int operator >(int x) { return *this > (FixedPoint)x; }  int operator >(long x) { return *this > (FixedPoint)x; }  int operator >=(FixedPoint x) { return val >= x.val; }  int operator >=(double x) { return *this >= (FixedPoint)x; }  int operator >=(int x) { return *this >= (FixedPoint)x; }  int operator >=(long x) { return *this >= (FixedPoint)x; }  FixedPoint operator -() { return make(-val); }  FixedPoint operator +(FixedPoint x) { return make(val + x.val); }  FixedPoint operator +(double x) { return *this + (FixedPoint)x; }  FixedPoint operator +(int x) { return *this + (FixedPoint)x; }  FixedPoint operator +(long x) { return *this + (FixedPoint)x; }  FixedPoint operator +=(FixedPoint x) { val = val + x.val; return *this; }  FixedPoint operator +=(double x) { return *this += (FixedPoint)x; }  FixedPoint operator +=(int x) { return *this += (FixedPoint)x; }  FixedPoint operator +=(long x) { return *this += (FixedPoint)x; }  FixedPoint operator -(FixedPoint x) { return make(val - x.val); }  FixedPoint operator -(double x) { return *this - (FixedPoint)x; }  FixedPoint operator -(int x) { return *this - (FixedPoint)x; }  FixedPoint operator -(long x) { return *this - (FixedPoint)x; }  FixedPoint operator -=(FixedPoint x) { val = val - x.val; return *this; }  FixedPoint operator -=(double x) { return *this -= (FixedPoint)x; }  FixedPoint operator -=(int x) { return *this -= (FixedPoint)x; }  FixedPoint operator -=(long x) { return *this -= (FixedPoint)x; }  FixedPoint operator *(FixedPoint x) { return make(mul(val, x.val)); }  FixedPoint operator *(double x) { return *this * (FixedPoint)x; }  FixedPoint operator *(int x) { return *this * (FixedPoint)x; }  FixedPoint operator *(long x) { return *this * (FixedPoint)x; }  FixedPoint operator *=(FixedPoint x) { val = mul(val, x.val); return *this; }  FixedPoint operator *=(double x) { return *this *= (FixedPoint)x; }  FixedPoint operator *=(int x) { return *this *= (FixedPoint)x; }  FixedPoint operator *=(long x) { return *this *= (FixedPoint)x; }  FixedPoint operator /(FixedPoint x) { return make(div(val, x.val)); }  FixedPoint operator /(double x) { return *this / (FixedPoint)x; }  FixedPoint operator /(int x) { return *this / (FixedPoint)x; }  FixedPoint operator /(long x) { return *this / (FixedPoint)x; }  FixedPoint operator /=(FixedPoint x) { val = div(val, x.val); return *this; }  FixedPoint operator /=(double x) { return *this /= (FixedPoint)x; }  FixedPoint operator /=(int x) { return *this /= (FixedPoint)x; }  FixedPoint operator /=(long x) { return *this /= (FixedPoint)x; }  static FixedPoint abs(FixedPoint x) { return make(::abs(x.val)); }  static int floor(FixedPoint x) { return x.val >> fixptShift; }  static int ceil(FixedPoint x)    { return (x.val & fixptMaskL) ? ((x.val >> fixptShift) + 1)	                          : (x.val >> fixptShift); }  static int round(FixedPoint x)    { return (x.val + (1 << (fixptShift - 1))) >> fixptShift; }  static FixedPoint sqrt(FixedPoint x);  static FixedPoint pow(FixedPoint x, FixedPoint y);  // Compute *result = x/y; return false if there is an underflow or  // overflow.  static GBool divCheck(FixedPoint x, FixedPoint y, FixedPoint *result);private:  static FixedPoint make(int valA) { FixedPoint x; x.val = valA; return x; }  static int mul(int x, int y);  static int div(int x, int y);  int val;			// 16.16 fixed point};#endif // USE_FIXEDPOINT#endif

⌨️ 快捷键说明

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