libpsynth 0.2.1
/home/raskolnikov/dev/psynth/trunk/src/psynth/sound/typedefs.hpp
Go to the documentation of this file.
00001 
00012 /*
00013  *  Copyright (C) 2010 Juan Pedro Bolivar Puente
00014  *
00015  *  This file is part of Psychosynh.
00016  *   
00017  *  Psychosynh is free software: you can redistribute it and/or modify
00018  *  it under the terms of the GNU General Public License as published by
00019  *  the Free Software Foundation, either version 3 of the License, or
00020  *  (at your option) any later version.
00021  *
00022  *  Psychosynh is distributed in the hope that it will be useful,
00023  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
00024  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00025  *  GNU General Public License for more details.
00026  *
00027  *  You should have received a copy of the GNU General Public License
00028  *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
00029  *
00030  */
00031 
00032 /*
00033  *  Copyright 2005-2007 Adobe Systems Incorporated
00034  * 
00035  *  Use, modification and distribution are subject to the Boost
00036  *  Software License, Version 1.0. (See accompanying file
00037  *  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt).
00038  */
00039 
00040 #ifndef PSYNTH_SOUND_TYPEDEFS_H
00041 #define PSYNTH_SOUND_TYPEDEFS_H
00042 
00043 #include <boost/cstdint.hpp>
00044 #include <memory>
00045 
00046 #include <psynth/base/compat.hpp>
00047 #include <psynth/sound/mono.hpp>
00048 #include <psynth/sound/stereo.hpp>
00049 #include <psynth/sound/quad.hpp>
00050 #include <psynth/sound/surround.hpp>
00051 #include <psynth/sound/device_n.hpp>
00052 
00053 // CS = 'bgr' LAYOUT='bgr_layout_t'
00054 #define PSYNTH_SOUND_DEFINE_BASE_TYPEDEFS_INTERNAL(T,CS,LAYOUT)         \
00055     template <typename, typename>    struct frame;                      \
00056     template <typename, typename>    struct planar_frame_reference;     \
00057     template <typename, typename>    struct planar_frame_iterator;      \
00058     template <typename>              class memory_based_step_iterator;  \
00059     template <typename>              class buffer_range;                \
00060     template <typename, bool, typename>     class buffer;               \
00061     template <typename>              class ring_buffer_range;           \
00062     template <typename>              class ring_buffer;                 \
00063     typedef frame<bits##T, LAYOUT >         CS##T##_frame;              \
00064     typedef const frame<bits##T, LAYOUT >   CS##T##c_frame;             \
00065     typedef frame<bits##T, LAYOUT >&        CS##T##_ref;                \
00066     typedef const frame<bits##T, LAYOUT >&  CS##T##c_ref;               \
00067     typedef CS##T##_frame*                CS##T##_ptr;          \
00068     typedef CS##T##c_frame*               CS##T##c_ptr;         \
00069     typedef memory_based_step_iterator<CS##T##_ptr>                     \
00070     CS##T##_step_ptr;                                                   \
00071     typedef memory_based_step_iterator<CS##T##c_ptr>                    \
00072     CS##T##c_step_ptr;                                                  \
00073     typedef buffer_range<CS##T##_ptr>            CS##T##_range;         \
00074     typedef buffer_range<CS##T##c_ptr>           CS##T##c_range;        \
00075     typedef buffer_range<CS##T##_step_ptr>       CS##T##_step_range;    \
00076     typedef buffer_range<CS##T##c_step_ptr>      CS##T##c_step_range;   \
00077     typedef buffer<CS##T##_frame,false,std::allocator<unsigned char> >  \
00078     CS##T##_buffer;                                                     \
00079     typedef ring_buffer_range<CS##T##_range> CS##T##_ring_range;        \
00080     typedef ring_buffer_range<CS##T##c_range> CS##T##c_ring_range;      \
00081     typedef ring_buffer<CS##T##_buffer> CS##T##_ring_buffer;            
00082 
00083 // CS = 'bgr' CS_FULL = 'rgb' LAYOUT='bgr_layout'
00084 #define PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS_INTERNAL(T,CS,CS_FULL,LAYOUT)  \
00085     PSYNTH_SOUND_DEFINE_BASE_TYPEDEFS_INTERNAL(T,CS,LAYOUT)             \
00086     typedef planar_frame_reference<bits##T&,CS_FULL >                   \
00087     CS##T##_planar_ref;                                                 \
00088     typedef planar_frame_reference<const bits##T&,CS_FULL >             \
00089     CS##T##c_planar_ref;                                                \
00090     typedef planar_frame_iterator<bits##T*,CS_FULL >                    \
00091     CS##T##_planar_ptr;                                                 \
00092     typedef planar_frame_iterator<const bits##T*,CS_FULL >              \
00093     CS##T##c_planar_ptr;                                                \
00094     typedef memory_based_step_iterator<CS##T##_planar_ptr>              \
00095     CS##T##_planar_step_ptr;                                            \
00096     typedef memory_based_step_iterator<CS##T##c_planar_ptr>             \
00097     CS##T##c_planar_step_ptr;                                           \
00098     typedef buffer_range<CS##T##_planar_ptr>                            \
00099     CS##T##_planar_range;                                               \
00100     typedef buffer_range<CS##T##c_planar_ptr>                           \
00101     CS##T##c_planar_range;                                              \
00102     typedef buffer_range<CS##T##_planar_step_ptr>                       \
00103     CS##T##_planar_step_range;                                          \
00104     typedef buffer_range<CS##T##c_planar_step_ptr>                      \
00105     CS##T##c_planar_step_range;                                         \
00106     typedef buffer<CS##T##_frame,true,std::allocator<unsigned char> >   \
00107     CS##T##_planar_buffer;                                              \
00108     typedef ring_buffer_range<CS##T##_planar_range> CS##T##_planar_ring_range; \
00109     typedef ring_buffer_range<CS##T##c_planar_range> CS##T##c_planar_ring_range; \
00110     typedef ring_buffer<CS##T##_planar_buffer> CS##T##_planar_ring_buffer;
00111 
00112 
00113 #define PSYNTH_SOUND_DEFINE_BASE_TYPEDEFS(T,CS)        \
00114     PSYNTH_SOUND_DEFINE_BASE_TYPEDEFS_INTERNAL(T,CS,CS##_layout)
00115 
00116 #define PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS(T,CS)         \
00117     PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS_INTERNAL(T,CS,CS##_space,CS##_layout)
00118 
00119 namespace psynth
00120 {
00121 namespace sound
00122 {
00123 
00124 // forward declarations
00125 template <typename B, typename Mn, typename Mx, typename Zx>
00126 struct scoped_sample_value;
00127 
00128 struct float_zero;
00129 struct float_one;
00130 typedef scoped_sample_value<
00131     float, float_zero, float_one, float_half> bits32f;
00132 typedef scoped_sample_value<
00133     float, float_minus_one, float_one, float_zero> bits32sf;
00134 typedef uint8_t  bits8;
00135 typedef uint16_t bits16;
00136 typedef uint32_t bits32;
00137 typedef int8_t   bits8s;
00138 typedef int16_t  bits16s;
00139 typedef int32_t  bits32s;
00140 
00141 PSYNTH_SOUND_DEFINE_BASE_TYPEDEFS(8,    mono)
00142 PSYNTH_SOUND_DEFINE_BASE_TYPEDEFS(8s,   mono)
00143 PSYNTH_SOUND_DEFINE_BASE_TYPEDEFS(16,   mono)
00144 PSYNTH_SOUND_DEFINE_BASE_TYPEDEFS(16s,  mono)
00145 PSYNTH_SOUND_DEFINE_BASE_TYPEDEFS(32,   mono)
00146 PSYNTH_SOUND_DEFINE_BASE_TYPEDEFS(32s,  mono)
00147 PSYNTH_SOUND_DEFINE_BASE_TYPEDEFS(32f,  mono)
00148 PSYNTH_SOUND_DEFINE_BASE_TYPEDEFS(32sf, mono)
00149 PSYNTH_SOUND_DEFINE_BASE_TYPEDEFS(8,    stereo)
00150 PSYNTH_SOUND_DEFINE_BASE_TYPEDEFS(8s,   stereo)
00151 PSYNTH_SOUND_DEFINE_BASE_TYPEDEFS(16,   stereo)
00152 PSYNTH_SOUND_DEFINE_BASE_TYPEDEFS(16s,  stereo)
00153 PSYNTH_SOUND_DEFINE_BASE_TYPEDEFS(32,   stereo)
00154 PSYNTH_SOUND_DEFINE_BASE_TYPEDEFS(32s,  stereo)
00155 PSYNTH_SOUND_DEFINE_BASE_TYPEDEFS(32f,  stereo)
00156 PSYNTH_SOUND_DEFINE_BASE_TYPEDEFS(32sf, stereo)
00157 PSYNTH_SOUND_DEFINE_BASE_TYPEDEFS(8,    rlstereo)
00158 PSYNTH_SOUND_DEFINE_BASE_TYPEDEFS(8s,   rlstereo)
00159 PSYNTH_SOUND_DEFINE_BASE_TYPEDEFS(16,   rlstereo)
00160 PSYNTH_SOUND_DEFINE_BASE_TYPEDEFS(16s,  rlstereo)
00161 PSYNTH_SOUND_DEFINE_BASE_TYPEDEFS(32 ,  rlstereo)
00162 PSYNTH_SOUND_DEFINE_BASE_TYPEDEFS(32s,  rlstereo)
00163 PSYNTH_SOUND_DEFINE_BASE_TYPEDEFS(32f,  rlstereo)
00164 PSYNTH_SOUND_DEFINE_BASE_TYPEDEFS(32sf, rlstereo)
00165 PSYNTH_SOUND_DEFINE_BASE_TYPEDEFS(8,    quad)
00166 PSYNTH_SOUND_DEFINE_BASE_TYPEDEFS(8s,   quad)
00167 PSYNTH_SOUND_DEFINE_BASE_TYPEDEFS(16,   quad)
00168 PSYNTH_SOUND_DEFINE_BASE_TYPEDEFS(16s,  quad)
00169 PSYNTH_SOUND_DEFINE_BASE_TYPEDEFS(32,   quad)
00170 PSYNTH_SOUND_DEFINE_BASE_TYPEDEFS(32s,  quad)
00171 PSYNTH_SOUND_DEFINE_BASE_TYPEDEFS(32f,  quad)
00172 PSYNTH_SOUND_DEFINE_BASE_TYPEDEFS(32sf, quad)
00173 PSYNTH_SOUND_DEFINE_BASE_TYPEDEFS(8,    surround)
00174 PSYNTH_SOUND_DEFINE_BASE_TYPEDEFS(8s,   surround)
00175 PSYNTH_SOUND_DEFINE_BASE_TYPEDEFS(16,   surround)
00176 PSYNTH_SOUND_DEFINE_BASE_TYPEDEFS(16s,  surround)
00177 PSYNTH_SOUND_DEFINE_BASE_TYPEDEFS(32 ,  surround)
00178 PSYNTH_SOUND_DEFINE_BASE_TYPEDEFS(32s,  surround)
00179 PSYNTH_SOUND_DEFINE_BASE_TYPEDEFS(32f,  surround)
00180 PSYNTH_SOUND_DEFINE_BASE_TYPEDEFS(32sf, surround)
00181 
00182 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS(8,    stereo)
00183 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS(8s,   stereo)
00184 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS(16,   stereo)
00185 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS(16s,  stereo)
00186 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS(32 ,  stereo)
00187 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS(32s,  stereo)
00188 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS(32f,  stereo)
00189 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS(32sf, stereo)
00190 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS(8,    quad)
00191 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS(8s,   quad)
00192 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS(16,   quad)
00193 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS(16s,  quad)
00194 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS(32 ,  quad)
00195 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS(32s,  quad)
00196 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS(32f,  quad)
00197 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS(32sf, quad)
00198 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS(8,    surround)
00199 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS(8s,   surround)
00200 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS(16,   surround)
00201 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS(16s,  surround)
00202 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS(32 ,  surround)
00203 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS(32s,  surround)
00204 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS(32f,  surround)
00205 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS(32sf, surround)
00206 
00207 
00208 template <int N> struct devicen_space;
00209 template <int N> struct devicen_layout;
00210 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS_INTERNAL(8,    dev2n, devicen_space<2>, devicen_layout<2>)
00211 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS_INTERNAL(8s,   dev2n, devicen_space<2>, devicen_layout<2>)
00212 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS_INTERNAL(16,   dev2n, devicen_space<2>, devicen_layout<2>)
00213 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS_INTERNAL(16s,  dev2n, devicen_space<2>, devicen_layout<2>)
00214 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS_INTERNAL(32 ,  dev2n, devicen_space<2>, devicen_layout<2>)
00215 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS_INTERNAL(32s,  dev2n, devicen_space<2>, devicen_layout<2>)
00216 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS_INTERNAL(32f,  dev2n, devicen_space<2>, devicen_layout<2>)
00217 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS_INTERNAL(32sf,  dev2n, devicen_space<2>, devicen_layout<2>)
00218 
00219 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS_INTERNAL(8,    dev3n, devicen_space<3>, devicen_layout<3>)
00220 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS_INTERNAL(8s,   dev3n, devicen_space<3>, devicen_layout<3>)
00221 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS_INTERNAL(16,   dev3n, devicen_space<3>, devicen_layout<3>)
00222 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS_INTERNAL(16s,  dev3n, devicen_space<3>, devicen_layout<3>)
00223 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS_INTERNAL(32 ,  dev3n, devicen_space<3>, devicen_layout<3>)
00224 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS_INTERNAL(32s,  dev3n, devicen_space<3>, devicen_layout<3>)
00225 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS_INTERNAL(32f,  dev3n, devicen_space<3>, devicen_layout<3>)
00226 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS_INTERNAL(32sf,  dev3n, devicen_space<3>, devicen_layout<3>)
00227 
00228 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS_INTERNAL(8,    dev4n, devicen_space<4>, devicen_layout<4>)
00229 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS_INTERNAL(8s,   dev4n, devicen_space<4>, devicen_layout<4>)
00230 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS_INTERNAL(16,   dev4n, devicen_space<4>, devicen_layout<4>)
00231 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS_INTERNAL(16s,  dev4n, devicen_space<4>, devicen_layout<4>)
00232 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS_INTERNAL(32 ,  dev4n, devicen_space<4>, devicen_layout<4>)
00233 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS_INTERNAL(32s,  dev4n, devicen_space<4>, devicen_layout<4>)
00234 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS_INTERNAL(32f,  dev4n, devicen_space<4>, devicen_layout<4>)
00235 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS_INTERNAL(32sf,  dev4n, devicen_space<4>, devicen_layout<4>)
00236 
00237 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS_INTERNAL(8,    dev5n, devicen_space<5>, devicen_layout<5>)
00238 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS_INTERNAL(8s,   dev5n, devicen_space<5>, devicen_layout<5>)
00239 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS_INTERNAL(16,   dev5n, devicen_space<5>, devicen_layout<5>)
00240 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS_INTERNAL(16s,  dev5n, devicen_space<5>, devicen_layout<5>)
00241 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS_INTERNAL(32 ,  dev5n, devicen_space<5>, devicen_layout<5>)
00242 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS_INTERNAL(32s,  dev5n, devicen_space<5>, devicen_layout<5>)
00243 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS_INTERNAL(32f,  dev5n, devicen_space<5>, devicen_layout<5>)
00244 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS_INTERNAL(32sf,  dev5n, devicen_space<5>, devicen_layout<5>)
00245 
00246 } /* namespace sound */
00247 } /* namespace psynth */
00248 
00249 #endif /* PSYNTH_SOUND_TYPEDEFS */