This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <iostream> | |
#include <memory> | |
template<class F> | |
inline std::shared_ptr<void> scope_exit( F f ) | |
{ | |
void* const p = 0; | |
return std::shared_ptr<void>( p, [=](void*)mutable{ f(); } ); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <iostream> | |
#include <memory> | |
#include <utility> | |
#include <functional> // for std::bind | |
// pointer, deleter のペアから unique_ptr を作る | |
// 本当は不適切( D に pointer の typedef があった場合など) | |
template< class T, class D >// = std::default_delete<T> は VC++ 対応のため泣く泣く削除 | |
inline std::unique_ptr<T, D> to_unique( T* p, D d = D() ) | |
{ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// オレオレ性能測定 | |
#include "xor128.hpp" | |
// ローパスフィルタ | |
// 結果のランダムな性質を少し和らげて、より正確な処理ができるよう(気休めレベルですが) | |
struct LPF | |
{ | |
typedef double result_type; | |
explicit LPF( double x0 = 0 ) | |
: x_(x0), y_(x0) {} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// etude::optional_ref<T> | |
// ポインタの安全で軽快な代替として使えるクラス | |
// 一部を除き boost::optional<T&> と同じように使えます。 | |
// 詳しくは http://d.hatena.ne.jp/gintenlabo/20101019/1287500776 を参照。 | |
// | |
// Copyright (C) 2010 Takaya Saito (SubaruG). | |
// このコードは NYSL (http://www.kmonos.net/nysl/) の下で公開されています。 | |
// 自分で書いたコードと同じように、自由に利用、改変、再配布を行って構いません。 | |
// 何かあったら: gintensubaru あっと gmail.com まで。 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include "Stack.hpp" | |
#include <vector> | |
// Impl_ の実装(今回はメンバのみ) | |
// 複雑なクラスの場合は Impl_ 内にメンバ関数を定義するのもアリ | |
struct StackImpl_::Impl_ | |
{ | |
std::vector< boost::shared_ptr<void> > v; | |
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// C++0x から <algorithm> に追加される関数を C++03 で使えるよう実装したヘッダ | |
// やっつけテストも記述しました。 | |
// | |
#ifndef ETUDE_INCLUDED_ALGORITHM_HPP_ | |
#define ETUDE_INCLUDED_ALGORITHM_HPP_ | |
#include <algorithm> | |
#include <iterator> | |
#include <utility> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
-- tuple.lua | |
-- 簡潔なタプルの実装 | |
-- 特徴: | |
-- ・immutable | |
-- タプルの各要素は完全に immutable である | |
-- というより、関数として実装されているので変更しようがない | |
-- ・flyweight | |
-- tuple.new(...) で得られたオブジェクトが生き残っている限り、 | |
-- 常に tuple.new( ... ) == tuple.new( ... ) が成立する。 | |
-- テーブルのキーとして使ったときに同一性を保証できる。 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
typedef double real; | |
struct cached_angle | |
{ | |
cached_angle( real x = 0 ) | |
: angle(x), angle_(0), s_(0), c_(1) {} | |
// get angle | |
real& get() { return angle; } | |
real const& get() const { return angle; } |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
default_delete : std::default_delete の移植 | |
boost::checked_delete を使って削除する deleter です。 | |
配列の場合は checked_array_delete を使います。 | |
定義を見れば一目瞭然。 | |
*/ | |
#ifndef ETUDE_INCLUDED_DEFAULT_DELETE_HPP_ | |
#define ETUDE_INCLUDED_DEFAULT_DELETE_HPP_ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// in_place_factory: | |
// Boost.InPlaceFactory の C++0x 拡張 | |
// | |
// boost::in_place を variadic templates + perfect forward に対応させた版です。 | |
// 普通の apply に加え、rvalue を move させる move_apply が追加されています。 | |
// 本当は move_apply は rvalue references for *this を使って対応すべきなのでしょうが、 | |
// gcc 4.5.0 にはまだ実装されていないので、泣く泣く専用のメンバを用意しています。 | |
// ただ、 move 時は専用の関数を使う、というのだと扱いにくいので、 | |
// 統一したアクセスを可能にするために、自由関数 apply_in_place を提供しています。 |
OlderNewer