Mode.cpp 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. /* ----------------------------------------------------------------- */
  2. /* The HMM-Based Singing Voice Synthesis System "Sinsy" */
  3. /* developed by Sinsy Working Group */
  4. /* http://sinsy.sourceforge.net/ */
  5. /* ----------------------------------------------------------------- */
  6. /* */
  7. /* Copyright (c) 2009-2015 Nagoya Institute of Technology */
  8. /* Department of Computer Science */
  9. /* */
  10. /* All rights reserved. */
  11. /* */
  12. /* Redistribution and use in source and binary forms, with or */
  13. /* without modification, are permitted provided that the following */
  14. /* conditions are met: */
  15. /* */
  16. /* - Redistributions of source code must retain the above copyright */
  17. /* notice, this list of conditions and the following disclaimer. */
  18. /* - Redistributions in binary form must reproduce the above */
  19. /* copyright notice, this list of conditions and the following */
  20. /* disclaimer in the documentation and/or other materials provided */
  21. /* with the distribution. */
  22. /* - Neither the name of the Sinsy working group nor the names of */
  23. /* its contributors may be used to endorse or promote products */
  24. /* derived from this software without specific prior written */
  25. /* permission. */
  26. /* */
  27. /* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND */
  28. /* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, */
  29. /* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */
  30. /* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */
  31. /* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS */
  32. /* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, */
  33. /* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED */
  34. /* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, */
  35. /* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON */
  36. /* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, */
  37. /* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY */
  38. /* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE */
  39. /* POSSIBILITY OF SUCH DAMAGE. */
  40. /* ----------------------------------------------------------------- */
  41. #include <algorithm>
  42. #include <stdexcept>
  43. #include "Mode.h"
  44. #include "util_log.h"
  45. #include "util_string.h"
  46. namespace sinsy
  47. {
  48. namespace
  49. {
  50. const int MODE_NUM = 2;
  51. const std::string STR_MAJOR = "major";
  52. const std::string STR_MINOR = "minor";
  53. const std::string MODES[] = {STR_MAJOR, STR_MINOR};
  54. class CompMode
  55. {
  56. public:
  57. //! constructor
  58. explicit CompMode(const std::string& str) : target(str) {}
  59. //! destructor
  60. virtual ~CompMode() {}
  61. //! ...
  62. bool operator()(const std::string& str) const {
  63. return (0 == target.compare(str)) ? true : false;
  64. }
  65. //! ...
  66. const std::string& target;
  67. };
  68. };
  69. const Mode Mode::MAJOR(STR_MAJOR);
  70. const Mode Mode::MINOR(STR_MINOR);
  71. /*!
  72. constructor
  73. */
  74. Mode::Mode() : value(0)
  75. {
  76. }
  77. /*!
  78. constructor
  79. @param str mode
  80. */
  81. Mode::Mode(const std::string& str)
  82. {
  83. set(str);
  84. }
  85. /*!
  86. copy constructor
  87. */
  88. Mode::Mode(const Mode& obj) : value(obj.value)
  89. {
  90. }
  91. /*!
  92. destructor
  93. */
  94. Mode::~Mode()
  95. {
  96. }
  97. /*!
  98. assignment operator
  99. */
  100. Mode& Mode::operator=(const Mode & obj)
  101. {
  102. if (this != &obj) value = obj.value;
  103. return *this;
  104. }
  105. /*!
  106. equal operator
  107. */
  108. bool Mode::operator==(const Mode& obj) const
  109. {
  110. return (obj.value == this->value);
  111. }
  112. /*!
  113. not equal operator
  114. */
  115. bool Mode::operator!=(const Mode& obj) const
  116. {
  117. return !(obj == *this);
  118. }
  119. /*!
  120. set mode
  121. @param str mode
  122. */
  123. void Mode::set(const std::string& str)
  124. {
  125. std::string s(str);
  126. toLower(s);
  127. const std::string* itr(std::find_if(MODES, MODES + MODE_NUM, CompMode(s)));
  128. if (itr < MODES + MODE_NUM) {
  129. value = itr - MODES;
  130. return;
  131. }
  132. ERR_MSG("Unexpected mode : " << s);
  133. throw std::runtime_error("Mode::set() invalid argument");
  134. }
  135. /*!
  136. get mode
  137. @return mode
  138. */
  139. const std::string& Mode::get() const
  140. {
  141. return MODES[value];
  142. }
  143. /*!
  144. to stream
  145. */
  146. std::ostream& operator<<(std::ostream& os, const Mode& mode)
  147. {
  148. return os << mode.get();
  149. }
  150. }; // namespace sinsy