All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
Utf8.h
1 // Copyright eeGeo Ltd (2012-2014), All Rights Reserved
2 
3 #pragma once
4 
5 #include "Types.h"
6 #include <string>
7 
8 namespace Eegeo
9 {
10  namespace Unicode
11  {
12  namespace Utf8
13  {
18  size_t Strnlen(const char *s, size_t size);
19 
28  u32 Next(std::string::const_iterator& iter, std::string::const_iterator iterEnd);
29 
38  u32 Next(const char*& iter, const char* iterEnd);
39 
47  inline u32 PeekNext(std::string::const_iterator iter, std::string::const_iterator iterEnd)
48  {
49  return Next(iter, iterEnd);
50  }
51 
59  inline u32 PeekNext(const char* iter, const char* iterEnd)
60  {
61  return Next(iter, iterEnd);
62  }
63 
68  size_t GetCodepointCount(std::string::const_iterator iter, std::string::const_iterator iterEnd);
69 
74  size_t GetCodepointCount(const char* iter, const char* iterEnd);
75 
91  template <typename TUtf32Iterator>
92  inline TUtf32Iterator ToUtf32(std::string::const_iterator inputIter, std::string::const_iterator inputIterEnd, TUtf32Iterator outputIter)
93  {
94  while (inputIter < inputIterEnd)
95  {
96  (*outputIter++) = Next(inputIter, inputIterEnd);
97  }
98  return outputIter;
99  }
100 
117  template <typename TUtf32Iterator>
118  inline TUtf32Iterator ToUtf32(const char* inputIter, const char* inputIterEnd, TUtf32Iterator outputIter)
119  {
120  while (inputIter < inputIterEnd)
121  {
122  (*outputIter++) = Next(inputIter, inputIterEnd);
123  }
124  return outputIter;
125  }
126  };
127  }
128 }