/***************************************************************************/
/*                                                                         */
/*  cf2fixed.h                                                             */
/*                                                                         */
/*    Adobe's code for Fixed Point Mathematics (specification only).       */
/*                                                                         */
/*  Copyright 2007-2013 Adobe Systems Incorporated.                        */
/*                                                                         */
/*  This software, and all works of authorship, whether in source or       */
/*  object code form as indicated by the copyright notice(s) included      */
/*  herein (collectively, the "Work") is made available, and may only be   */
/*  used, modified, and distributed under the FreeType Project License,    */
/*  LICENSE.TXT.  Additionally, subject to the terms and conditions of the */
/*  FreeType Project License, each contributor to the Work hereby grants   */
/*  to any individual or legal entity exercising permissions granted by    */
/*  the FreeType Project License and this section (hereafter, "You" or     */
/*  "Your") a perpetual, worldwide, non-exclusive, no-charge,              */
/*  royalty-free, irrevocable (except as stated in this section) patent    */
/*  license to make, have made, use, offer to sell, sell, import, and      */
/*  otherwise transfer the Work, where such license applies only to those  */
/*  patent claims licensable by such contributor that are necessarily      */
/*  infringed by their contribution(s) alone or by combination of their    */
/*  contribution(s) with the Work to which such contribution(s) was        */
/*  submitted.  If You institute patent litigation against any entity      */
/*  (including a cross-claim or counterclaim in a lawsuit) alleging that   */
/*  the Work or a contribution incorporated within the Work constitutes    */
/*  direct or contributory patent infringement, then any patent licenses   */
/*  granted to You under this License for that Work shall terminate as of  */
/*  the date such litigation is filed.                                     */
/*                                                                         */
/*  By using, modifying, or distributing the Work you indicate that you    */
/*  have read and understood the terms and conditions of the               */
/*  FreeType Project License as well as those provided in this section,    */
/*  and you accept them fully.                                             */
/*                                                                         */
/***************************************************************************/


#ifndef __CF2FIXED_H__
#define __CF2FIXED_H__


FT_BEGIN_HEADER


  /* rasterizer integer and fixed point arithmetic must be 32-bit */

#define   CF2_Fixed  CF2_F16Dot16
  typedef FT_Int32   CF2_Frac;   /* 2.30 fixed point */


#define CF2_FIXED_MAX      ( (CF2_Fixed)0x7FFFFFFFL )
#define CF2_FIXED_MIN      ( (CF2_Fixed)0x80000000L )
#define CF2_FIXED_ONE      0x10000L
#define CF2_FIXED_EPSILON  0x0001

  /* in C 89, left and right shift of negative numbers is  */
  /* implementation specific behaviour in the general case */

#define cf2_intToFixed( i )                                              \
          ( (CF2_Fixed)( (FT_UInt32)(i) << 16 ) )
#define cf2_fixedToInt( x )                                              \
          ( (FT_Short)( ( (FT_UInt32)(x) + 0x8000U ) >> 16 ) )
#define cf2_fixedRound( x )                                              \
          ( (CF2_Fixed)( ( (FT_UInt32)(x) + 0x8000U ) & 0xFFFF0000UL ) )
#define cf2_floatToFixed( f )                                            \
          ( (CF2_Fixed)( (f) * 65536.0 + 0.5 ) )
#define cf2_fixedAbs( x )                                                \
          ( (x) < 0 ? -(x) : (x) )
#define cf2_fixedFloor( x )                                              \
          ( (CF2_Fixed)( (FT_UInt32)(x) & 0xFFFF0000UL ) )
#define cf2_fixedFraction( x )                                           \
          ( (x) - cf2_fixedFloor( x ) )
#define cf2_fracToFixed( x )                                             \
          ( (x) < 0 ? -( ( -(x) + 0x2000 ) >> 14 )                       \
                    :  ( (  (x) + 0x2000 ) >> 14 ) )


  /* signed numeric types */
  typedef enum  CF2_NumberType_
  {
    CF2_NumberFixed,    /* 16.16 */
    CF2_NumberFrac,     /*  2.30 */
    CF2_NumberInt       /* 32.0  */

  } CF2_NumberType;


FT_END_HEADER


#endif /*  __CF2FIXED_H__ */


/* END */
