Mercurial > hg > index.fcgi > lj > lj046
diff src/ljtypes.h @ 0:c84446dfb3f5
initial add
author | paulo@localhost |
---|---|
date | Fri, 13 Mar 2009 00:39:12 -0700 |
parents | |
children |
line diff
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/src/ljtypes.h Fri Mar 13 00:39:12 2009 -0700 1.3 @@ -0,0 +1,61 @@ 1.4 +/* Basic data types for LOCKJAW, an implementation of the Soviet Mind Game 1.5 + 1.6 +Copyright (C) 2006 Damian Yerrick <tepples+lj@spamcop.net> 1.7 + 1.8 +This work is free software; you can redistribute it and/or modify 1.9 +it under the terms of the GNU General Public License as published by 1.10 +the Free Software Foundation; either version 2 of the License, or 1.11 +(at your option) any later version. 1.12 + 1.13 +This program is distributed in the hope that it will be useful, 1.14 +but WITHOUT ANY WARRANTY; without even the implied warranty of 1.15 +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 1.16 +GNU General Public License for more details. 1.17 + 1.18 +You should have received a copy of the GNU General Public License 1.19 +along with this program; if not, write to the Free Software 1.20 +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 1.21 + 1.22 +Original game concept and design by Alexey Pajitnov. 1.23 +The Software is not sponsored or endorsed by Alexey Pajitnov, Elorg, 1.24 +or The Tetris Company LLC. 1.25 + 1.26 +*/ 1.27 + 1.28 +#ifndef LJTYPES_H 1.29 +#define LJTYPES_H 1.30 + 1.31 +/** 1.32 + * A 16.16 signed number. Used commonly for Y piece positions. 1.33 + */ 1.34 +typedef signed int LJFixed; 1.35 + 1.36 +static inline signed int ljfixfloor(LJFixed f) __attribute__((const)); 1.37 + 1.38 +static inline signed int ljfixfloor(LJFixed f) { 1.39 + return f >> 16; 1.40 +} 1.41 + 1.42 +static inline LJFixed ljitofix(signed int f) __attribute__((const)); 1.43 + 1.44 +static inline LJFixed ljitofix(signed int f) { 1.45 + return f << 16; 1.46 +} 1.47 + 1.48 +/* 1.49 + * In most cases, macros are deprecated in favor of static inline functions 1.50 + * because the latter allow the compiler to perform more type checks. 1.51 + * However, the C language forbids calling a function in an inline 1.52 + * constructor, even if it is a static inline function with no side effects. 1.53 + * For example, GCC gives the misleading error message 1.54 + * "error: initializer element is not constant". 1.55 + * Therefore, I have to provide a second implementation of ljitofix() 1.56 + * as a macro for use in global variable initializers. 1.57 + */ 1.58 +#define LJITOFIX(f) ((LJFixed)((f) << 16)) 1.59 + 1.60 + 1.61 +typedef unsigned int LJBits; 1.62 + 1.63 +#endif 1.64 +