annotate src/ljtypes.h @ 0:c84446dfb3f5

initial add
author paulo@localhost
date Fri, 13 Mar 2009 00:39:12 -0700
parents
children
rev   line source
paulo@0 1 /* Basic data types for LOCKJAW, an implementation of the Soviet Mind Game
paulo@0 2
paulo@0 3 Copyright (C) 2006 Damian Yerrick <tepples+lj@spamcop.net>
paulo@0 4
paulo@0 5 This work is free software; you can redistribute it and/or modify
paulo@0 6 it under the terms of the GNU General Public License as published by
paulo@0 7 the Free Software Foundation; either version 2 of the License, or
paulo@0 8 (at your option) any later version.
paulo@0 9
paulo@0 10 This program is distributed in the hope that it will be useful,
paulo@0 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
paulo@0 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
paulo@0 13 GNU General Public License for more details.
paulo@0 14
paulo@0 15 You should have received a copy of the GNU General Public License
paulo@0 16 along with this program; if not, write to the Free Software
paulo@0 17 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
paulo@0 18
paulo@0 19 Original game concept and design by Alexey Pajitnov.
paulo@0 20 The Software is not sponsored or endorsed by Alexey Pajitnov, Elorg,
paulo@0 21 or The Tetris Company LLC.
paulo@0 22
paulo@0 23 */
paulo@0 24
paulo@0 25 #ifndef LJTYPES_H
paulo@0 26 #define LJTYPES_H
paulo@0 27
paulo@0 28 /**
paulo@0 29 * A 16.16 signed number. Used commonly for Y piece positions.
paulo@0 30 */
paulo@0 31 typedef signed int LJFixed;
paulo@0 32
paulo@0 33 static inline signed int ljfixfloor(LJFixed f) __attribute__((const));
paulo@0 34
paulo@0 35 static inline signed int ljfixfloor(LJFixed f) {
paulo@0 36 return f >> 16;
paulo@0 37 }
paulo@0 38
paulo@0 39 static inline LJFixed ljitofix(signed int f) __attribute__((const));
paulo@0 40
paulo@0 41 static inline LJFixed ljitofix(signed int f) {
paulo@0 42 return f << 16;
paulo@0 43 }
paulo@0 44
paulo@0 45 /*
paulo@0 46 * In most cases, macros are deprecated in favor of static inline functions
paulo@0 47 * because the latter allow the compiler to perform more type checks.
paulo@0 48 * However, the C language forbids calling a function in an inline
paulo@0 49 * constructor, even if it is a static inline function with no side effects.
paulo@0 50 * For example, GCC gives the misleading error message
paulo@0 51 * "error: initializer element is not constant".
paulo@0 52 * Therefore, I have to provide a second implementation of ljitofix()
paulo@0 53 * as a macro for use in global variable initializers.
paulo@0 54 */
paulo@0 55 #define LJITOFIX(f) ((LJFixed)((f) << 16))
paulo@0 56
paulo@0 57
paulo@0 58 typedef unsigned int LJBits;
paulo@0 59
paulo@0 60 #endif
paulo@0 61