Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1. /*******************************************************************
  2.  *
  3.  *  ttcalc.h
  4.  *
  5.  *    Arithmetic Computations (specification).
  6.  *
  7.  *  Copyright 1996-1999 by
  8.  *  David Turner, Robert Wilhelm, and Werner Lemberg.
  9.  *
  10.  *  This file is part of the FreeType project, and may only be used
  11.  *  modified and distributed under the terms of the FreeType project
  12.  *  license, LICENSE.TXT.  By continuing to use, modify, or distribute
  13.  *  this file you indicate that you have read the license and
  14.  *  understand and accept it fully.
  15.  *
  16.  ******************************************************************/
  17.  
  18. #ifndef TTCALC_H
  19. #define TTCALC_H
  20.  
  21. #include "ttconfig.h"
  22. #include "freetype.h"
  23.  
  24.  
  25. #ifdef __cplusplus
  26.   extern "C" {
  27. #endif
  28.  
  29. #ifdef LONG64
  30.  
  31.   typedef INT64  TT_Int64;
  32.  
  33. #define ADD_64( x, y, z )  z = x + y
  34. #define SUB_64( x, y, z )  z = x - y
  35. #define MUL_64( x, y, z )  z = (TT_Int64)(x) * (y)
  36.  
  37. #define DIV_64( x, y )     ( (x) / (y) )
  38.  
  39. #define SQRT_64( x )       Sqrt64( x )
  40. #define SQRT_32( x )       Sqrt32( x )
  41.  
  42.   LOCAL_DEF TT_Int32  Sqrt64( TT_Int64  l );
  43.  
  44. #else /* LONG64 */
  45.  
  46.   struct  TT_Int64_
  47.   {
  48.     TT_Word32  lo;
  49.     TT_Word32  hi;
  50.   };
  51.  
  52.   typedef struct TT_Int64_  TT_Int64;
  53.  
  54. #define ADD_64( x, y, z )  Add64( &x, &y, &z )
  55. #define SUB_64( x, y, z )  Sub64( &x, &y, &z )
  56. #define MUL_64( x, y, z )  MulTo64( x, y, &z )
  57.  
  58. #define DIV_64( x, y )     Div64by32( &x, y )
  59.  
  60. #define SQRT_64( x )       Sqrt64( &x )
  61. #define SQRT_32( x )       Sqrt32( x )
  62.  
  63.   LOCAL_DEF void  Add64( TT_Int64*  x, TT_Int64*  y, TT_Int64*  z );
  64.   LOCAL_DEF void  Sub64( TT_Int64*  x, TT_Int64*  y, TT_Int64*  z );
  65.  
  66.   LOCAL_DEF void  MulTo64( TT_Int32  x, TT_Int32  y, TT_Int64*  z );
  67.  
  68.   LOCAL_DEF TT_Int32  Div64by32( TT_Int64*  x, TT_Int32  y );
  69.  
  70.   LOCAL_DEF int  Order64( TT_Int64*  z );
  71.  
  72.   LOCAL_DEF TT_Int32  Sqrt64( TT_Int64*  l );
  73.  
  74. #endif /* LONG64 */
  75.  
  76.   /* The two following functions are now part of the API!          */
  77.  
  78.   /* TT_Long  TT_MulDiv( TT_Long  a, TT_Long  b, TT_Long  c );     */
  79.   /* TT_Long  TT_MulFix( TT_Long  a, TT_Long  b );                 */
  80.  
  81.  
  82. #define INT_TO_F26DOT6( x )    ( (Long)(x) << 6  )
  83. #define INT_TO_F2DOT14( x )    ( (Long)(x) << 14 )
  84. #define INT_TO_FIXED( x )      ( (Long)(x) << 16 )
  85. #define F2DOT14_TO_FIXED( x )  ( (Long)(x) << 2  )
  86. #define FLOAT_TO_FIXED( x )    ( (Long)(x * 65536.0) )
  87.  
  88. #define ROUND_F26DOT6( x )     ( x >= 0 ? (   ((x) + 32) & -64) \
  89.                                         : ( -((32 - (x)) & -64) ) )
  90.  
  91. #ifdef __cplusplus
  92.   }
  93. #endif
  94.  
  95. #endif /* TTCALC_H */
  96.  
  97. /* END */
  98.