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