XFA: merge patch from CL 815103002
[pdfium.git] / third_party / freetype / src / raster / ftmisc.h
1 /***************************************************************************/
2 /*                                                                         */
3 /*  ftmisc.h                                                               */
4 /*                                                                         */
5 /*    Miscellaneous macros for stand-alone rasterizer (specification       */
6 /*    only).                                                               */
7 /*                                                                         */
8 /*  Copyright 2005, 2009, 2010 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/freetype2/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 #define FT_MAKE_TAG( _x1, _x2, _x3, _x4 ) \
51           ( ( (FT_ULong)_x1 << 24 ) |     \
52             ( (FT_ULong)_x2 << 16 ) |     \
53             ( (FT_ULong)_x3 <<  8 ) |     \
54               (FT_ULong)_x4         )
55
56
57   /* from include/freetype2/ftsystem.h */
58
59   typedef struct FT_MemoryRec_*  FT_Memory;
60
61   typedef void* (*FT_Alloc_Func)( FT_Memory  memory,
62                                   long       size );
63
64   typedef void (*FT_Free_Func)( FT_Memory  memory,
65                                 void*      block );
66
67   typedef void* (*FT_Realloc_Func)( FT_Memory  memory,
68                                     long       cur_size,
69                                     long       new_size,
70                                     void*      block );
71
72   typedef struct FT_MemoryRec_
73   {
74     void*            user;
75
76     FT_Alloc_Func    alloc;
77     FT_Free_Func     free;
78     FT_Realloc_Func  realloc;
79
80   } FT_MemoryRec;
81
82
83   /* from src/ftcalc.c */
84
85 #if ( defined _WIN32 || defined _WIN64 )
86
87   typedef __int64  FT_Int64;
88
89 #else
90
91 #include "inttypes.h"
92
93   typedef int64_t  FT_Int64;
94
95 #endif
96
97
98   static FT_Long
99   FT_MulDiv( FT_Long  a,
100              FT_Long  b,
101              FT_Long  c )
102   {
103     FT_Int   s;
104     FT_Long  d;
105
106
107     s = 1;
108     if ( a < 0 ) { a = -a; s = -1; }
109     if ( b < 0 ) { b = -b; s = -s; }
110     if ( c < 0 ) { c = -c; s = -s; }
111
112     d = (FT_Long)( c > 0 ? ( (FT_Int64)a * b + ( c >> 1 ) ) / c
113                          : 0x7FFFFFFFL );
114
115     return ( s > 0 ) ? d : -d;
116   }
117
118
119   static FT_Long
120   FT_MulDiv_No_Round( FT_Long  a,
121                       FT_Long  b,
122                       FT_Long  c )
123   {
124     FT_Int   s;
125     FT_Long  d;
126
127
128     s = 1;
129     if ( a < 0 ) { a = -a; s = -1; }
130     if ( b < 0 ) { b = -b; s = -s; }
131     if ( c < 0 ) { c = -c; s = -s; }
132
133     d = (FT_Long)( c > 0 ? (FT_Int64)a * b / c
134                          : 0x7FFFFFFFL );
135
136     return ( s > 0 ) ? d : -d;
137   }
138
139 #endif /* __FTMISC_H__ */
140
141
142 /* END */