34 #ifndef __INCLUDE_MIST_STEREO__
35 #define __INCLUDE_MIST_STEREO__
38 #ifndef __INCLUDE_MIST_CONF_H__
42 #ifndef __INCLUDE_MIST_TYPE_TRAIT_H__
128 template <
class TT >
132 template <
class TT >
136 template <
class TT >
140 template <
class TT >
144 const stereo &operator %=(
const stereo &s ){ l %= s.
l; r %= s.
r;
return( *
this ); }
147 const stereo &operator |=(
const stereo &s ){ l |= s.
l; r |= s.
r;
return( *
this ); }
150 const stereo &operator &=(
const stereo &s ){ l &= s.
l; r &= s.
r;
return( *
this ); }
153 const stereo &operator ^=(
const stereo &s ){ l ^= s.
l; r ^= s.
r;
return( *
this ); }
158 #if defined( __MIST_MSVC__ ) && __MIST_MSVC__ < 7
161 template <
class TT >
171 #if defined( __MIST_MSVC__ ) && __MIST_MSVC__ < 7
174 template <
class TT >
184 #if defined( __MIST_MSVC__ ) && __MIST_MSVC__ < 7
187 template <
class TT >
197 #if defined( __MIST_MSVC__ ) && __MIST_MSVC__ < 7
200 template <
class TT >
219 bool operator ==(
const stereo &s )
const {
return( l == s.
l && r == s.
r ); }
230 bool operator !=(
const stereo &s )
const {
return( !( *
this == s ) ); }
241 bool operator < (
const stereo &s )
const
262 bool operator <=(
const stereo &s )
const {
return( s >= *
this ); }
273 bool operator > (
const stereo &s )
const {
return( s < *
this ); }
284 bool operator >=(
const stereo &s )
const {
return( !( *
this < s ) ); }
290 return( static_cast< value_type >( ( l + r ) / 2.0 ) );
356 template < class T > inline std::ostream &operator <<( std::ostream &out, const stereo< T > &s )
369 _MIST_CONST(
bool, value,
false );
375 struct _stereo_converter_
377 typedef T value_type;
379 enum{ channel_num = 1 };
381 static value_type convert_to( value_type l, value_type r )
383 return( stereo_type( l, r ).get_value( ) );
386 static stereo_type convert_from(
const value_type &mono )
388 return( stereo_type( mono, mono ) );
392 #if defined(__MIST_MSVC__) && __MIST_MSVC__ < 7
394 #define IS_STEREO( type ) \
396 struct is_stereo< stereo< type > >\
398 enum{ value = true };\
402 #define __STEREO_CONVERTER__( type ) \
404 struct _stereo_converter_< stereo< type > >\
406 typedef type value_type;\
407 typedef stereo< type > stereo_type;\
408 enum{ channel_num = 2 };\
410 static stereo_type convert_to( value_type l, value_type r )\
412 return( stereo_type( l, r ) );\
415 static stereo_type convert_from( const stereo_type &sound )\
422 IS_STEREO(
unsigned char)
423 IS_STEREO(
unsigned short)
424 IS_STEREO(
unsigned int)
425 IS_STEREO(
unsigned long)
426 IS_STEREO(
signed char)
427 IS_STEREO(
signed short)
428 IS_STEREO(
signed int)
429 IS_STEREO(
signed long)
434 IS_STEREO(
long double)
435 __STEREO_CONVERTER__(
unsigned char)
436 __STEREO_CONVERTER__(
unsigned short)
437 __STEREO_CONVERTER__(
unsigned int)
438 __STEREO_CONVERTER__(
unsigned long)
439 __STEREO_CONVERTER__(
signed char)
440 __STEREO_CONVERTER__(
signed short)
441 __STEREO_CONVERTER__(
signed int)
442 __STEREO_CONVERTER__(
signed long)
443 __STEREO_CONVERTER__(
bool)
444 __STEREO_CONVERTER__(
char)
445 __STEREO_CONVERTER__(
float)
446 __STEREO_CONVERTER__(
double)
447 __STEREO_CONVERTER__(
long double)
450 #undef __STEREO_CONVERTER__
455 struct is_stereo< stereo< T > >
457 _MIST_CONST(
bool, value,
true );
461 struct _stereo_converter_< stereo< T > >
463 typedef T value_type;
464 typedef stereo< T > stereo_type;
465 enum{ channel_num = 2 };
467 static stereo_type convert_to( value_type l, value_type r )
469 return( stereo_type( l, r ) );
472 static stereo_type convert_from(
const stereo_type &sound )
484 #endif // __INCLUDE_MIST_STEREO__