(root)/
freetype-2.13.2/
src/
raster/
ftmisc.h
       1  /****************************************************************************
       2   *
       3   * ftmisc.h
       4   *
       5   *   Miscellaneous macros for stand-alone rasterizer (specification
       6   *   only).
       7   *
       8   * Copyright (C) 2005-2023 by
       9   * David Turner, Robert Wilhelm, and Werner Lemberg.
      10   *
      11   * This file is part of the FreeType project, and may only be used
      12   * modified and distributed under the terms of the FreeType project
      13   * license, LICENSE.TXT.  By continuing to use, modify, or distribute
      14   * this file you indicate that you have read the license and
      15   * understand and accept it fully.
      16   *
      17   */
      18  
      19  
      20    /****************************************************
      21     *
      22     * This file is *not* portable!  You have to adapt
      23     * its definitions to your platform.
      24     *
      25     */
      26  
      27  #ifndef FTMISC_H_
      28  #define FTMISC_H_
      29  
      30  
      31    /* memset */
      32  #include FT_CONFIG_STANDARD_LIBRARY_H
      33  
      34  #define FT_BEGIN_HEADER
      35  #define FT_END_HEADER
      36  
      37  #define FT_LOCAL_DEF( x )   static x
      38  
      39  
      40    /* from include/freetype/fttypes.h */
      41  
      42    typedef unsigned char  FT_Byte;
      43    typedef signed int     FT_Int;
      44    typedef unsigned int   FT_UInt;
      45    typedef signed long    FT_Long;
      46    typedef unsigned long  FT_ULong;
      47    typedef signed long    FT_F26Dot6;
      48    typedef int            FT_Error;
      49  
      50  
      51  #define FT_STATIC_BYTE_CAST( type, var )  (type)(FT_Byte)(var)
      52  
      53  
      54    /* from include/freetype/ftsystem.h */
      55  
      56    typedef struct FT_MemoryRec_*  FT_Memory;
      57  
      58    typedef void* (*FT_Alloc_Func)( FT_Memory  memory,
      59                                    long       size );
      60  
      61    typedef void (*FT_Free_Func)( FT_Memory  memory,
      62                                  void*      block );
      63  
      64    typedef void* (*FT_Realloc_Func)( FT_Memory  memory,
      65                                      long       cur_size,
      66                                      long       new_size,
      67                                      void*      block );
      68  
      69    typedef struct FT_MemoryRec_
      70    {
      71      void*            user;
      72  
      73      FT_Alloc_Func    alloc;
      74      FT_Free_Func     free;
      75      FT_Realloc_Func  realloc;
      76  
      77    } FT_MemoryRec;
      78  
      79  
      80    /* from src/ftcalc.c */
      81  
      82  #if ( defined _WIN32 || defined _WIN64 )
      83  
      84    typedef __int64  FT_Int64;
      85  
      86  #else
      87  
      88  #include "inttypes.h"
      89  
      90    typedef int64_t  FT_Int64;
      91  
      92  #endif
      93  
      94  
      95    static FT_Long
      96    FT_MulDiv( FT_Long  a,
      97               FT_Long  b,
      98               FT_Long  c )
      99    {
     100      FT_Int   s;
     101      FT_Long  d;
     102  
     103  
     104      s = 1;
     105      if ( a < 0 ) { a = -a; s = -1; }
     106      if ( b < 0 ) { b = -b; s = -s; }
     107      if ( c < 0 ) { c = -c; s = -s; }
     108  
     109      d = (FT_Long)( c > 0 ? ( (FT_Int64)a * b + ( c >> 1 ) ) / c
     110                           : 0x7FFFFFFFL );
     111  
     112      return ( s > 0 ) ? d : -d;
     113    }
     114  
     115  
     116    static FT_Long
     117    FT_MulDiv_No_Round( FT_Long  a,
     118                        FT_Long  b,
     119                        FT_Long  c )
     120    {
     121      FT_Int   s;
     122      FT_Long  d;
     123  
     124  
     125      s = 1;
     126      if ( a < 0 ) { a = -a; s = -1; }
     127      if ( b < 0 ) { b = -b; s = -s; }
     128      if ( c < 0 ) { c = -c; s = -s; }
     129  
     130      d = (FT_Long)( c > 0 ? (FT_Int64)a * b / c
     131                           : 0x7FFFFFFFL );
     132  
     133      return ( s > 0 ) ? d : -d;
     134    }
     135  
     136  #endif /* FTMISC_H_ */
     137  
     138  
     139  /* END */