1
0
Fork 0
mirror of https://github.com/bolero-MURAKAMI/Sprout synced 2025-08-03 12:49:50 +00:00

fix weed warnings.

add compost library.
This commit is contained in:
bolero-MURAKAMI 2012-11-09 01:09:49 +09:00
parent ac80a04970
commit d01ee064e2
31 changed files with 1566 additions and 120 deletions

View file

@ -0,0 +1,71 @@
#ifndef SPROUT_COMPOST_EFFECTS_CHANGE_VOLUME_HPP
#define SPROUT_COMPOST_EFFECTS_CHANGE_VOLUME_HPP
#include <sprout/config.hpp>
#include <sprout/functional/multiplies.hpp>
#include <sprout/functional/bind2nd.hpp>
#include <sprout/utility/forward.hpp>
#include <sprout/range/adaptor/transformed.hpp>
namespace sprout {
namespace compost {
namespace effects {
//
// change_volume_holder
//
template<typename T>
class change_volume_holder {
public:
typedef T value_type;
private:
value_type value_;
public:
change_volume_holder() = default;
change_volume_holder(change_volume_holder const&) = default;
explicit SPROUT_CONSTEXPR change_volume_holder(value_type const& value)
: value_(value)
{}
SPROUT_CONSTEXPR value_type const& value() const {
return value_;
}
};
//
// changed_volume_forwarder
//
class changed_volume_forwarder {
public:
template<typename T>
SPROUT_CONSTEXPR sprout::compost::effects::change_volume_holder<T>
operator()(T const& value) {
return sprout::compost::effects::change_volume_holder<T>(value);
}
};
//
// changed_volume
//
namespace {
SPROUT_STATIC_CONSTEXPR sprout::compost::effects::changed_volume_forwarder changed_volume{};
} // anonymous-namespace
//
// operator|
//
template<typename Range, typename T>
inline SPROUT_CONSTEXPR auto
operator|(Range&& lhs, sprout::compost::effects::change_volume_holder<T> const& rhs)
-> decltype(
sprout::forward<Range>(lhs)
| sprout::adaptors::transformed(sprout::bind2nd(sprout::multiplies<>(), rhs.value()))
)
{
return sprout::forward<Range>(lhs)
| sprout::adaptors::transformed(sprout::bind2nd(sprout::multiplies<>(), rhs.value()))
;
}
} // namespace effects
} // namespace compost
} // namespace sprout
#endif // #ifndef SPROUT_COMPOST_EFFECTS_CHANGE_VOLUME_HPP

View file

@ -0,0 +1,85 @@
#ifndef SPROUT_COMPOST_EFFECTS_CLIP_HPP
#define SPROUT_COMPOST_EFFECTS_CLIP_HPP
#include <sprout/config.hpp>
#include <sprout/utility/forward.hpp>
#include <sprout/range/adaptor/clamped.hpp>
namespace sprout {
namespace compost {
namespace effects {
//
// clip_holder
//
template<typename T>
class clip_holder {
public:
typedef T value_type;
private:
value_type low_;
value_type up_;
public:
clip_holder() = default;
clip_holder(clip_holder const&) = default;
explicit SPROUT_CONSTEXPR clip_holder(value_type const& low = -1, value_type const& up = 1)
: low_(low), up_(up)
{}
SPROUT_CONSTEXPR value_type const& lower() const {
return low_;
}
SPROUT_CONSTEXPR value_type const& upper() const {
return up_;
}
};
//
// clipped_forwarder
//
class clipped_forwarder {
public:
template<typename T = double>
SPROUT_CONSTEXPR sprout::compost::effects::clip_holder<T>
operator()(T const& low = -1, T const& up = 1) {
return sprout::compost::effects::clip_holder<T>(low, up);
}
};
//
// clipped
//
namespace {
SPROUT_STATIC_CONSTEXPR sprout::compost::effects::clipped_forwarder clipped{};
} // anonymous-namespace
//
// operator|
//
template<typename Range, typename T>
inline SPROUT_CONSTEXPR auto
operator|(Range&& lhs, sprout::compost::effects::clip_holder<T> const& rhs)
-> decltype(
sprout::forward<Range>(lhs)
| sprout::adaptors::clamped(rhs.lower(), rhs.upper())
)
{
return sprout::forward<Range>(lhs)
| sprout::adaptors::clamped(rhs.lower(), rhs.upper())
;
}
template<typename Range>
inline SPROUT_CONSTEXPR auto
operator|(Range&& lhs, sprout::compost::effects::clipped_forwarder const& rhs)
-> decltype(
sprout::forward<Range>(lhs)
| sprout::adaptors::clamped(-1., 1.)
)
{
return sprout::forward<Range>(lhs)
| sprout::adaptors::clamped(-1., 1.)
;
}
} // namespace effects
} // namespace compost
} // namespace sprout
#endif // #ifndef SPROUT_COMPOST_EFFECTS_CLIP_HPP

View file

@ -0,0 +1,78 @@
#ifndef SPROUT_COMPOST_EFFECTS_DISTORT_HPP
#define SPROUT_COMPOST_EFFECTS_DISTORT_HPP
#include <sprout/config.hpp>
#include <sprout/utility/forward.hpp>
#include <sprout/compost/effects/clip.hpp>
#include <sprout/compost/effects/change_volume.hpp>
namespace sprout {
namespace compost {
namespace effects {
//
// distort_holder
//
template<typename T>
class distort_holder {
public:
typedef T value_type;
private:
value_type gain_;
value_type level_;
public:
distort_holder() = default;
distort_holder(distort_holder const&) = default;
SPROUT_CONSTEXPR distort_holder(value_type const& gain, value_type const& level)
: gain_(gain) , level_(level)
{}
SPROUT_CONSTEXPR value_type const& gain() const {
return gain_;
}
SPROUT_CONSTEXPR value_type const& level() const {
return level_;
}
};
//
// distorted_forwarder
//
class distorted_forwarder {
public:
template<typename T>
SPROUT_CONSTEXPR sprout::compost::effects::distort_holder<T>
operator()(T const& gain, T const& level) {
return sprout::compost::effects::distort_holder<T>(gain, level);
}
};
//
// distorted
//
namespace {
SPROUT_STATIC_CONSTEXPR sprout::compost::effects::distorted_forwarder distorted{};
} // anonymous-namespace
//
// operator|
//
template<typename Range, typename T>
inline SPROUT_CONSTEXPR auto
operator|(Range&& lhs, sprout::compost::effects::distort_holder<T> const& rhs)
-> decltype(
sprout::forward<Range>(lhs)
| sprout::compost::effects::changed_volume(rhs.gain())
| sprout::compost::effects::clipped()
| sprout::compost::effects::changed_volume(rhs.level())
)
{
return sprout::forward<Range>(lhs)
| sprout::compost::effects::changed_volume(rhs.gain())
| sprout::compost::effects::clipped()
| sprout::compost::effects::changed_volume(rhs.level())
;
}
} // namespace effects
} // namespace compost
} // namespace sprout
#endif // #ifndef SPROUT_COMPOST_EFFECTS_DISTORT_HPP

View file

@ -0,0 +1,77 @@
#ifndef SPROUT_COMPOST_EFFECTS_SYNTHESIZED_HPP
#define SPROUT_COMPOST_EFFECTS_SYNTHESIZED_HPP
#include <sprout/config.hpp>
#include <sprout/functional/plus.hpp>
#include <sprout/utility/forward.hpp>
#include <sprout/utility/value_holder.hpp>
#include <sprout/range/adaptor/transformed.hpp>
namespace sprout {
namespace compost {
namespace effects {
//
// synthesize_holder
//
template<typename RRange>
class synthesize_holder {
public:
typedef RRange range2_type;
private:
sprout::value_holder<range2_type&> range_;
public:
synthesize_holder() = default;
synthesize_holder(synthesize_holder const&) = default;
explicit SPROUT_CONSTEXPR synthesize_holder(range2_type& range)
: range_(range)
{}
SPROUT_CONSTEXPR range2_type& range() const {
return range_;
}
};
//
// synthesized_forwarder
//
class synthesized_forwarder {
public:
template<typename RRange>
SPROUT_CONSTEXPR sprout::compost::effects::synthesize_holder<
typename std::remove_reference<typename sprout::lvalue_reference<RRange>::type>::type
>
operator()(RRange&& range) {
return sprout::compost::effects::synthesize_holder<
typename std::remove_reference<typename sprout::lvalue_reference<RRange>::type>::type
>(
sprout::lvalue_forward<RRange>(range)
);
}
};
//
// synthesized
//
namespace {
SPROUT_STATIC_CONSTEXPR sprout::compost::effects::synthesized_forwarder synthesized{};
} // anonymous-namespace
//
// operator|
//
template<typename Range, typename T>
inline SPROUT_CONSTEXPR auto
operator|(Range&& lhs, sprout::compost::effects::synthesize_holder<T> const& rhs)
-> decltype(
sprout::forward<Range>(lhs)
| sprout::adaptors::transformed(rhs.range(), sprout::plus<>())
)
{
return sprout::forward<Range>(lhs)
| sprout::adaptors::transformed(rhs.range(), sprout::plus<>())
;
}
} // namespace effects
} // namespace compost
} // namespace sprout
#endif // #ifndef SPROUT_COMPOST_EFFECTS_SYNTHESIZED_HPP