#include <string>
#include <boost/type_traits.hpp>
+#ifdef FOLLY_HAVE_DEPRECATED_ASSOC
#ifdef _GLIBCXX_SYMVER
#include <ext/hash_set>
#include <ext/hash_map>
#endif
+#endif
#include <unordered_set>
#include <unordered_map>
-#include "folly/Conv.h"
-#include "folly/Demangle.h"
-#include "folly/FBString.h"
-#include "folly/FBVector.h"
-#include "folly/Portability.h"
-#include "folly/Range.h"
-#include "folly/ScopeGuard.h"
+#include <folly/Conv.h>
+#include <folly/Demangle.h>
+#include <folly/FBString.h>
+#include <folly/FBVector.h>
+#include <folly/Portability.h>
+#include <folly/Range.h>
+#include <folly/ScopeGuard.h>
// Compatibility function, to make sure toStdString(s) can be called
// to convert a std::string or fbstring variable s into type std::string
* resulting string, and the second appends the produced characters to
* the specified string and returns a reference to it.
*/
-std::string stringPrintf(const char* format, ...)
- __attribute__ ((format (printf, 1, 2)));
+std::string stringPrintf(FOLLY_PRINTF_FORMAT const char* format, ...)
+ FOLLY_PRINTF_FORMAT_ATTR(1, 2);
-/** Similar to stringPrintf, with different signiture.
- */
-void stringPrintf(std::string* out, const char* fmt, ...)
- __attribute__ ((format (printf, 2, 3)));
+/* Similar to stringPrintf, with different signature. */
+void stringPrintf(std::string* out, FOLLY_PRINTF_FORMAT const char* fmt, ...)
+ FOLLY_PRINTF_FORMAT_ATTR(2, 3);
-std::string& stringAppendf(std::string* output, const char* format, ...)
- __attribute__ ((format (printf, 2, 3)));
+std::string& stringAppendf(std::string* output,
+ FOLLY_PRINTF_FORMAT const char* format, ...)
+ FOLLY_PRINTF_FORMAT_ATTR(2, 3);
/**
* Backslashify a string, that is, replace non-printable characters
return output;
}
-} // namespace folly
-
-// Hash functions to make std::string usable with e.g. hash_map
-//
-// Handle interaction with different C++ standard libraries, which
-// expect these types to be in different namespaces.
-namespace std {
+/**
+ * Returns a subpiece with all whitespace removed from the front of @sp.
+ * Whitespace means any of [' ', '\n', '\r', '\t'].
+ */
+StringPiece skipWhitespace(StringPiece sp);
-template <class C>
-struct hash<std::basic_string<C> > : private hash<const C*> {
- size_t operator()(const std::basic_string<C> & s) const {
- return hash<const C*>::operator()(s.c_str());
- }
-};
+/**
+ * Fast, in-place lowercasing of ASCII alphabetic characters in strings.
+ * Leaves all other characters unchanged, including those with the 0x80
+ * bit set.
+ * @param str String to convert
+ * @param len Length of str, in bytes
+ */
+void toLowerAscii(char* str, size_t length);
+inline void toLowerAscii(MutableStringPiece str) {
+ toLowerAscii(str.begin(), str.size());
}
-#if defined(_GLIBCXX_SYMVER) && !defined(__BIONIC__)
-namespace __gnu_cxx {
-
-template <class C>
-struct hash<std::basic_string<C> > : private hash<const C*> {
- size_t operator()(const std::basic_string<C> & s) const {
- return hash<const C*>::operator()(s.c_str());
- }
-};
-
-}
-#endif
+} // namespace folly
// Hook into boost's type traits
namespace boost {
};
} // namespace boost
-#include "folly/String-inl.h"
+#include <folly/String-inl.h>
#endif