1 // tinygettext - A gettext replacement that works directly on .po files 2 // Copyright (c) 2006 Ingo Ruhnke <grumbel@gmail.com> 3 // 4 // This software is provided 'as-is', without any express or implied 5 // warranty. In no event will the authors be held liable for any damages 6 // arising from the use of this software. 7 // 8 // Permission is granted to anyone to use this software for any purpose, 9 // including commercial applications, and to alter it and redistribute it 10 // freely, subject to the following restrictions: 11 // 12 // 1. The origin of this software must not be misrepresented; you must not 13 // claim that you wrote the original software. If you use this software 14 // in a product, an acknowledgement in the product documentation would be 15 // appreciated but is not required. 16 // 2. Altered source versions must be plainly marked as such, and must not be 17 // misrepresented as being the original software. 18 // 3. This notice may not be removed or altered from any source distribution. 19 20 #ifndef HEADER_TINYGETTEXT_PLURAL_FORMS_HPP 21 #define HEADER_TINYGETTEXT_PLURAL_FORMS_HPP 22 23 #include "tinygettext_Export.h" 24 25 #include <string> 26 27 namespace tinygettext { 28 29 typedef unsigned int (*PluralFunc)(int n); 30 31 class TINYGETTEXT_API PluralForms 32 { 33 private: 34 unsigned int nplural; 35 PluralFunc plural; 36 37 public: 38 static PluralForms from_string(const std::string& str); 39 PluralForms()40 PluralForms() 41 : nplural(0), 42 plural(0) 43 {} 44 PluralForms(unsigned int nplural_,PluralFunc plural_)45 PluralForms(unsigned int nplural_, PluralFunc plural_) 46 : nplural(nplural_), 47 plural(plural_) 48 {} 49 get_nplural() const50 unsigned int get_nplural() const { return nplural; } get_plural(int n) const51 unsigned int get_plural(int n) const { if (plural) return plural(n); else return 0; } 52 operator ==(const PluralForms & other)53 bool operator==(const PluralForms& other) { return nplural == other.nplural && plural == other.plural; } operator !=(const PluralForms & other)54 bool operator!=(const PluralForms& other) { return !(*this == other); } 55 operator bool() const56 explicit operator bool() const { 57 return plural != NULL; 58 } 59 }; 60 61 } // namespace tinygettext 62 63 #endif 64 65 /* EOF */ 66