1 /* ScummVM - Graphic Adventure Engine 2 * 3 * ScummVM is the legal property of its developers, whose names 4 * are too numerous to list here. Please refer to the COPYRIGHT 5 * file distributed with this source distribution. 6 * 7 * This program is free software; you can redistribute it and/or 8 * modify it under the terms of the GNU General Public License 9 * as published by the Free Software Foundation; either version 2 10 * of the License, or (at your option) any later version. 11 * 12 * This program is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 * GNU General Public License for more details. 16 * 17 * You should have received a copy of the GNU General Public License 18 * along with this program; if not, write to the Free Software 19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 20 * 21 */ 22 23 #ifndef COMMON_SINETABLES_H 24 #define COMMON_SINETABLES_H 25 26 namespace Common { 27 28 /** 29 * @defgroup common_sinetables Sine tables 30 * @ingroup common 31 * 32 * @brief API for managing sine tables. 33 * 34 * @{ 35 */ 36 37 class SineTable { 38 public: 39 /** 40 * Construct a sine table given the number of points 41 * 42 * @param nPoints Number of distinct radian points, which must be in range [16,65536] and be divisible by 4 43 */ 44 SineTable(int nPoints); 45 ~SineTable(); 46 47 /** 48 * Get pointer to table 49 * 50 * This table contains nPoints/2 entries. 51 * Prefer to use at() 52 * The layout of this table is as follows: 53 * - Entries 0 up to (excluding) nPoints/4: 54 * sin(0) till (excluding) sin(1/2*pi) 55 * - Entries 2_nPoints/4 up to nPoints/2: 56 * sin(pi) till (excluding) sin(3/2*pi) 57 */ getTable()58 const float *getTable() { return _tableEOS; } 59 60 /** 61 * Returns sin(2*pi * index / nPoints ) 62 * Index must be in range [0, nPoints - 1] 63 * Faster than atLegacy 64 */ 65 float at(int index) const; 66 67 /** 68 * Returns sin(2*pi * index / nPoints ) 69 * Index must be in range [0, nPoints - 1] 70 */ 71 float atLegacy(int index) const; 72 73 private: 74 float *_tableEOS; 75 float *_table; 76 double _radResolution; // Smallest radian increment 77 int _refSize; // _nPoints / 4 78 int _nPoints; // range of operator[] 79 }; 80 81 /** @} */ 82 83 } // End of namespace Common 84 85 #endif // COMMON_SINETABLES_H 86