fontservices/freetypefontrasteriser/freetype2/include/freetype/internal/ftcalc.h
author hgs
Wed, 27 Oct 2010 16:14:22 +0800
changeset 71 6cc5529d4a89
permissions -rw-r--r--
201033_10
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
71
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
     1
/***************************************************************************/
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
     2
/*                                                                         */
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
     3
/*  ftcalc.h                                                               */
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
     4
/*                                                                         */
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
     5
/*    Arithmetic computations (specification).                             */
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
     6
/*                                                                         */
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
     7
/*  Copyright 1996-2001, 2002, 2003, 2004, 2005, 2006 by                   */
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
     8
/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
     9
/*                                                                         */
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
    10
/*  This file is part of the FreeType project, and may only be used,       */
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
    11
/*  modified, and distributed under the terms of the FreeType project      */
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
    12
/*  license, FTL.TXT.  By continuing to use, modify, or distribute     */
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
    13
/*  this file you indicate that you have read the license and              */
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
    14
/*  understand and accept it fully.                                        */
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
    15
/*                                                                         */
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
    16
/***************************************************************************/
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
    17
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
    18
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
    19
#ifndef __FTCALC_H__
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
    20
#define __FTCALC_H__
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
    21
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
    22
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
    23
#include <ft2build.h>
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
    24
#include FT_FREETYPE_H
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
    25
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
    26
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
    27
FT_BEGIN_HEADER
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
    28
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
    29
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
    30
  /*************************************************************************/
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
    31
  /*                                                                       */
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
    32
  /* <Function>                                                            */
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
    33
  /*    FT_FixedSqrt                                                       */
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
    34
  /*                                                                       */
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
    35
  /* <Description>                                                         */
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
    36
  /*    Computes the square root of a 16.16 fixed point value.             */
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
    37
  /*                                                                       */
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
    38
  /* <Input>                                                               */
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
    39
  /*    x :: The value to compute the root for.                            */
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
    40
  /*                                                                       */
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
    41
  /* <Return>                                                              */
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
    42
  /*    The result of `sqrt(x)'.                                           */
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
    43
  /*                                                                       */
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
    44
  /* <Note>                                                                */
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
    45
  /*    This function is not very fast.                                    */
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
    46
  /*                                                                       */
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
    47
  FT_BASE( FT_Int32 )
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
    48
  FT_SqrtFixed( FT_Int32  x );
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
    49
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
    50
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
    51
#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
    52
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
    53
  /*************************************************************************/
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
    54
  /*                                                                       */
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
    55
  /* <Function>                                                            */
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
    56
  /*    FT_Sqrt32                                                          */
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
    57
  /*                                                                       */
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
    58
  /* <Description>                                                         */
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
    59
  /*    Computes the square root of an Int32 integer (which will be        */
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
    60
  /*    handled as an unsigned long value).                                */
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
    61
  /*                                                                       */
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
    62
  /* <Input>                                                               */
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
    63
  /*    x :: The value to compute the root for.                            */
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
    64
  /*                                                                       */
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
    65
  /* <Return>                                                              */
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
    66
  /*    The result of `sqrt(x)'.                                           */
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
    67
  /*                                                                       */
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
    68
  FT_EXPORT( FT_Int32 )
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
    69
  FT_Sqrt32( FT_Int32  x );
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
    70
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
    71
#endif /* FT_CONFIG_OPTION_OLD_INTERNALS */
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
    72
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
    73
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
    74
  /*************************************************************************/
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
    75
  /*                                                                       */
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
    76
  /* FT_MulDiv() and FT_MulFix() are declared in freetype.h.               */
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
    77
  /*                                                                       */
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
    78
  /*************************************************************************/
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
    79
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
    80
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
    81
#ifdef TT_CONFIG_OPTION_BYTECODE_INTERPRETER
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
    82
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
    83
  /*************************************************************************/
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
    84
  /*                                                                       */
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
    85
  /* <Function>                                                            */
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
    86
  /*    FT_MulDiv_No_Round                                                 */
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
    87
  /*                                                                       */
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
    88
  /* <Description>                                                         */
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
    89
  /*    A very simple function used to perform the computation `(a*b)/c'   */
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
    90
  /*    (without rounding) with maximal accuracy (it uses a 64-bit         */
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
    91
  /*    intermediate integer whenever necessary).                          */
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
    92
  /*                                                                       */
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
    93
  /*    This function isn't necessarily as fast as some processor specific */
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
    94
  /*    operations, but is at least completely portable.                   */
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
    95
  /*                                                                       */
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
    96
  /* <Input>                                                               */
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
    97
  /*    a :: The first multiplier.                                         */
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
    98
  /*    b :: The second multiplier.                                        */
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
    99
  /*    c :: The divisor.                                                  */
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
   100
  /*                                                                       */
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
   101
  /* <Return>                                                              */
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
   102
  /*    The result of `(a*b)/c'.  This function never traps when trying to */
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
   103
  /*    divide by zero; it simply returns `MaxInt' or `MinInt' depending   */
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
   104
  /*    on the signs of `a' and `b'.                                       */
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
   105
  /*                                                                       */
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
   106
  FT_BASE( FT_Long )
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
   107
  FT_MulDiv_No_Round( FT_Long  a,
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
   108
                      FT_Long  b,
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
   109
                      FT_Long  c );
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
   110
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
   111
#endif /* TT_CONFIG_OPTION_BYTECODE_INTERPRETER */
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
   112
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
   113
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
   114
#define INT_TO_F26DOT6( x )    ( (FT_Long)(x) << 6  )
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
   115
#define INT_TO_F2DOT14( x )    ( (FT_Long)(x) << 14 )
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
   116
#define INT_TO_FIXED( x )      ( (FT_Long)(x) << 16 )
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
   117
#define F2DOT14_TO_FIXED( x )  ( (FT_Long)(x) << 2  )
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
   118
#define FLOAT_TO_FIXED( x )    ( (FT_Long)( x * 65536.0 ) )
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
   119
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
   120
#define ROUND_F26DOT6( x )     ( x >= 0 ? (    ( (x) + 32 ) & -64 )     \
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
   121
                                        : ( -( ( 32 - (x) ) & -64 ) ) )
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
   122
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
   123
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
   124
FT_END_HEADER
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
   125
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
   126
#endif /* __FTCALC_H__ */
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
   127
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
   128
6cc5529d4a89 201033_10
hgs
parents:
diff changeset
   129
/* END */