From: starg Date: Tue, 23 Aug 2016 13:52:44 +0000 (+0900) Subject: DurationCalculator のリファクタリング X-Git-Tag: v0.1.827.0~29 X-Git-Url: http://git.sourceforge.jp/view?a=commitdiff_plain;h=e3131dd5a8ce11ab2caf4e7bd0c571c00ac00ad3;p=yamml%2Fyamml-git.git DurationCalculator のリファクタリング --- diff --git a/src/ast2ir/phrase2ir.cpp b/src/ast2ir/phrase2ir.cpp index 0c91e27..1fde781 100644 --- a/src/ast2ir/phrase2ir.cpp +++ b/src/ast2ir/phrase2ir.cpp @@ -29,36 +29,32 @@ namespace AST2IR constexpr int TickPerQuarter = 960; -class DurationCalculator final : public boost::static_visitor<> +class DurationCalculator final : public boost::static_visitor { public: - void operator()(const AST::SimpleDurationWithModifier& ast) + int operator()(const AST::SimpleDurationWithModifier& ast) { if (ast.Modifier.is_initialized()) { - m_Duration += TickPerQuarter * 4 / (ast.Base.Number / 2) / ast.Modifier.get().Number; + return TickPerQuarter * 4 / (ast.Base.Number / 2) / ast.Modifier.get().Number; } else { - m_Duration += TickPerQuarter * 4 / ast.Base.Number; + return TickPerQuarter * 4 / ast.Base.Number; } } - void operator()(const AST::DurationSet& ast) + int operator()(const AST::DurationSet& ast) { + int ret = 0; + for (auto&& i : ast.Durations) { - (*this)(i); + ret += (*this)(i); } - } - int GetDuration() const - { - return m_Duration; + return ret; } - -private: - int m_Duration = 0; }; int CalculateDuration(const AST::NoteAndDuration& ast) @@ -66,8 +62,7 @@ int CalculateDuration(const AST::NoteAndDuration& ast) if (ast.Duration.is_initialized()) { DurationCalculator dc; - ast.Duration->apply_visitor(dc); - return dc.GetDuration(); + return ast.Duration->apply_visitor(dc); } else {