UTF8StringPiece, wrapping boost::u8_to_u32
[folly.git] / folly / String.h
index 04004b56f510042c62ff7edbf094d5f0692c3abc..f9ec5fd58eb82b76209f90357a4e963fde6bc1d1 100644 (file)
@@ -21,6 +21,7 @@
 #include <stdarg.h>
 #include <string>
 #include <boost/type_traits.hpp>
+#include <boost/regex/pending/unicode_iterator.hpp>
 
 #ifdef FOLLY_HAVE_DEPRECATED_ASSOC
 #ifdef _GLIBCXX_SYMVER
@@ -592,6 +593,19 @@ inline void toLowerAscii(MutableStringPiece str) {
   toLowerAscii(str.begin(), str.size());
 }
 
+template <class Iterator = const char*,
+          class Base = folly::Range<boost::u8_to_u32_iterator<Iterator>>>
+class UTF8Range : public Base {
+ public:
+  /* implicit */ UTF8Range(const folly::Range<Iterator> baseRange)
+      : Base(boost::u8_to_u32_iterator<Iterator>(
+                 baseRange.begin(), baseRange.begin(), baseRange.end()),
+             boost::u8_to_u32_iterator<Iterator>(
+                 baseRange.end(), baseRange.begin(), baseRange.end())) {}
+};
+
+using UTF8StringPiece = UTF8Range<const char*>;
+
 } // namespace folly
 
 // Hook into boost's type traits