summaryrefslogtreecommitdiff
path: root/thirdparty/thekla_atlas/nvcore/StrLib.h
diff options
context:
space:
mode:
Diffstat (limited to 'thirdparty/thekla_atlas/nvcore/StrLib.h')
-rw-r--r--thirdparty/thekla_atlas/nvcore/StrLib.h433
1 files changed, 0 insertions, 433 deletions
diff --git a/thirdparty/thekla_atlas/nvcore/StrLib.h b/thirdparty/thekla_atlas/nvcore/StrLib.h
deleted file mode 100644
index ae4b5d12a0..0000000000
--- a/thirdparty/thekla_atlas/nvcore/StrLib.h
+++ /dev/null
@@ -1,433 +0,0 @@
-// This code is in the public domain -- Ignacio Castaņo <castano@gmail.com>
-
-#pragma once
-#ifndef NV_CORE_STRING_H
-#define NV_CORE_STRING_H
-
-#include "Debug.h"
-#include "Hash.h" // hash
-
-//#include <string.h> // strlen, etc.
-
-#if NV_OS_WIN32
-#define NV_PATH_SEPARATOR '\\'
-#else
-#define NV_PATH_SEPARATOR '/'
-#endif
-
-namespace nv
-{
-
- NVCORE_API uint strHash(const char * str, uint h) NV_PURE;
-
- /// String hash based on Bernstein's hash.
- inline uint strHash(const char * data, uint h = 5381)
- {
- uint i = 0;
- while(data[i] != 0) {
- h = (33 * h) ^ uint(data[i]);
- i++;
- }
- return h;
- }
-
- template <> struct Hash<const char *> {
- uint operator()(const char * str) const { return strHash(str); }
- };
-
- NVCORE_API uint strLen(const char * str) NV_PURE; // Asserts on NULL strings.
-
- NVCORE_API int strDiff(const char * s1, const char * s2) NV_PURE; // Asserts on NULL strings.
- NVCORE_API int strCaseDiff(const char * s1, const char * s2) NV_PURE; // Asserts on NULL strings.
- NVCORE_API bool strEqual(const char * s1, const char * s2) NV_PURE; // Accepts NULL strings.
- NVCORE_API bool strCaseEqual(const char * s1, const char * s2) NV_PURE; // Accepts NULL strings.
-
- template <> struct Equal<const char *> {
- bool operator()(const char * a, const char * b) const { return strEqual(a, b); }
- };
-
- NVCORE_API bool strBeginsWith(const char * dst, const char * prefix) NV_PURE;
- NVCORE_API bool strEndsWith(const char * dst, const char * suffix) NV_PURE;
-
-
- NVCORE_API void strCpy(char * dst, uint size, const char * src);
- NVCORE_API void strCpy(char * dst, uint size, const char * src, uint len);
- NVCORE_API void strCat(char * dst, uint size, const char * src);
-
- NVCORE_API const char * strSkipWhiteSpace(const char * str);
- NVCORE_API char * strSkipWhiteSpace(char * str);
-
- NVCORE_API bool strMatch(const char * str, const char * pat) NV_PURE;
-
- NVCORE_API bool isNumber(const char * str) NV_PURE;
-
- /* @@ Implement these two functions and modify StringBuilder to use them?
- NVCORE_API void strFormat(const char * dst, const char * fmt, ...);
- NVCORE_API void strFormatList(const char * dst, const char * fmt, va_list arg);
-
- template <size_t count> void strFormatSafe(char (&buffer)[count], const char *fmt, ...) __attribute__((format (printf, 2, 3)));
- template <size_t count> void strFormatSafe(char (&buffer)[count], const char *fmt, ...) {
- va_list args;
- va_start(args, fmt);
- strFormatList(buffer, count, fmt, args);
- va_end(args);
- }
- template <size_t count> void strFormatListSafe(char (&buffer)[count], const char *fmt, va_list arg) {
- va_list tmp;
- va_copy(tmp, args);
- strFormatList(buffer, count, fmt, tmp);
- va_end(tmp);
- }*/
-
- template <int count> void strCpySafe(char (&buffer)[count], const char *src) {
- strCpy(buffer, count, src);
- }
-
- template <int count> void strCatSafe(char (&buffer)[count], const char * src) {
- strCat(buffer, count, src);
- }
-
-
-
- /// String builder.
- class NVCORE_CLASS StringBuilder
- {
- public:
-
- StringBuilder();
- explicit StringBuilder( uint size_hint );
- StringBuilder(const char * str);
- StringBuilder(const char * str, uint len);
- StringBuilder(const StringBuilder & other);
-
- ~StringBuilder();
-
- StringBuilder & format( const char * format, ... ) __attribute__((format (printf, 2, 3)));
- StringBuilder & formatList( const char * format, va_list arg );
-
- StringBuilder & append(char c);
- StringBuilder & append(const char * str);
- StringBuilder & append(const char * str, uint len);
- StringBuilder & append(const StringBuilder & str);
- StringBuilder & appendFormat(const char * format, ...) __attribute__((format (printf, 2, 3)));
- StringBuilder & appendFormatList(const char * format, va_list arg);
-
- StringBuilder & appendSpace(uint n);
-
- StringBuilder & number( int i, int base = 10 );
- StringBuilder & number( uint i, int base = 10 );
-
- StringBuilder & reserve(uint size_hint);
- StringBuilder & copy(const char * str);
- StringBuilder & copy(const char * str, uint len);
- StringBuilder & copy(const StringBuilder & str);
-
- StringBuilder & toLower();
- StringBuilder & toUpper();
-
- bool endsWith(const char * str) const;
- bool beginsWith(const char * str) const;
-
- char * reverseFind(char c);
-
- void reset();
- bool isNull() const { return m_size == 0; }
-
- // const char * accessors
- //operator const char * () const { return m_str; }
- //operator char * () { return m_str; }
- const char * str() const { return m_str; }
- char * str() { return m_str; }
-
- char * release(); // Release ownership of string.
- void acquire(char *); // Take ownership of string.
-
- /// Implement value semantics.
- StringBuilder & operator=( const StringBuilder & s ) {
- return copy(s);
- }
-
- /// Implement value semantics.
- StringBuilder & operator=( const char * s ) {
- return copy(s);
- }
-
- /// Equal operator.
- bool operator==( const StringBuilder & s ) const {
- return strMatch(s.m_str, m_str);
- }
-
- /// Return the exact length.
- uint length() const { return isNull() ? 0 : strLen(m_str); }
-
- /// Return the size of the string container.
- uint capacity() const { return m_size; }
-
- /// Return the hash of the string.
- uint hash() const { return isNull() ? 0 : strHash(m_str); }
-
- // Swap strings.
- friend void swap(StringBuilder & a, StringBuilder & b);
-
- protected:
-
- /// Size of the string container.
- uint m_size;
-
- /// String.
- char * m_str;
-
- };
-
-
- /// Path string. @@ This should be called PathBuilder.
- class NVCORE_CLASS Path : public StringBuilder
- {
- public:
- Path() : StringBuilder() {}
- explicit Path(int size_hint) : StringBuilder(size_hint) {}
- Path(const char * str) : StringBuilder(str) {}
- Path(const Path & path) : StringBuilder(path) {}
-
- const char * fileName() const;
- const char * extension() const;
-
- void translatePath(char pathSeparator = NV_PATH_SEPARATOR);
-
- void appendSeparator(char pathSeparator = NV_PATH_SEPARATOR);
-
- void stripFileName();
- void stripExtension();
-
- // statics
- NVCORE_API static char separator();
- NVCORE_API static const char * fileName(const char *);
- NVCORE_API static const char * extension(const char *);
-
- NVCORE_API static void translatePath(char * path, char pathSeparator = NV_PATH_SEPARATOR);
- };
-
-
- /// String class.
- class NVCORE_CLASS String
- {
- public:
-
- /// Constructs a null string. @sa isNull()
- String()
- {
- data = NULL;
- }
-
- /// Constructs a shared copy of str.
- String(const String & str)
- {
- data = str.data;
- if (data != NULL) addRef();
- }
-
- /// Constructs a shared string from a standard string.
- String(const char * str)
- {
- setString(str);
- }
-
- /// Constructs a shared string from a standard string.
- String(const char * str, int length)
- {
- setString(str, length);
- }
-
- /// Constructs a shared string from a StringBuilder.
- String(const StringBuilder & str)
- {
- setString(str);
- }
-
- /// Dtor.
- ~String()
- {
- release();
- }
-
- String clone() const;
-
- /// Release the current string and allocate a new one.
- const String & operator=( const char * str )
- {
- release();
- setString( str );
- return *this;
- }
-
- /// Release the current string and allocate a new one.
- const String & operator=( const StringBuilder & str )
- {
- release();
- setString( str );
- return *this;
- }
-
- /// Implement value semantics.
- String & operator=( const String & str )
- {
- if (str.data != data)
- {
- release();
- data = str.data;
- addRef();
- }
- return *this;
- }
-
- /// Equal operator.
- bool operator==( const String & str ) const
- {
- return strMatch(str.data, data);
- }
-
- /// Equal operator.
- bool operator==( const char * str ) const
- {
- return strMatch(str, data);
- }
-
- /// Not equal operator.
- bool operator!=( const String & str ) const
- {
- return !strMatch(str.data, data);
- }
-
- /// Not equal operator.
- bool operator!=( const char * str ) const
- {
- return !strMatch(str, data);
- }
-
- /// Returns true if this string is the null string.
- bool isNull() const { return data == NULL; }
-
- /// Return the exact length.
- uint length() const { nvDebugCheck(data != NULL); return strLen(data); }
-
- /// Return the hash of the string.
- uint hash() const { nvDebugCheck(data != NULL); return strHash(data); }
-
- /// const char * cast operator.
- operator const char * () const { return data; }
-
- /// Get string pointer.
- const char * str() const { return data; }
-
-
- private:
-
- // Add reference count.
- void addRef();
-
- // Decrease reference count.
- void release();
-
- uint16 getRefCount() const
- {
- nvDebugCheck(data != NULL);
- return *reinterpret_cast<const uint16 *>(data - 2);
- }
-
- void setRefCount(uint16 count) {
- nvDebugCheck(data != NULL);
- nvCheck(count < 0xFFFF);
- *reinterpret_cast<uint16 *>(const_cast<char *>(data - 2)) = uint16(count);
- }
-
- void setData(const char * str) {
- data = str + 2;
- }
-
- void allocString(const char * str)
- {
- allocString(str, strLen(str));
- }
-
- void allocString(const char * str, uint length);
-
- void setString(const char * str);
- void setString(const char * str, uint length);
- void setString(const StringBuilder & str);
-
- // Swap strings.
- friend void swap(String & a, String & b);
-
- private:
-
- const char * data;
-
- };
-
- template <> struct Hash<String> {
- uint operator()(const String & str) const { return str.hash(); }
- };
-
-
- // Like AutoPtr, but for const char strings.
- class AutoString
- {
- NV_FORBID_COPY(AutoString);
- NV_FORBID_HEAPALLOC();
- public:
-
- // Ctor.
- AutoString(const char * p = NULL) : m_ptr(p) { }
-
-#if NV_CC_CPP11
- // Move ctor.
- AutoString(AutoString && ap) : m_ptr(ap.m_ptr) { ap.m_ptr = NULL; }
-#endif
-
- // Dtor. Deletes owned pointer.
- ~AutoString() {
- delete [] m_ptr;
- m_ptr = NULL;
- }
-
- // Delete owned pointer and assign new one.
- void operator=(const char * p) {
- if (p != m_ptr)
- {
- delete [] m_ptr;
- m_ptr = p;
- }
- }
-
- // Get pointer.
- const char * ptr() const { return m_ptr; }
- operator const char *() const { return m_ptr; }
-
- // Relinquish ownership of the underlying pointer and returns that pointer.
- const char * release() {
- const char * tmp = m_ptr;
- m_ptr = NULL;
- return tmp;
- }
-
- // comparison operators.
- friend bool operator == (const AutoString & ap, const char * const p) {
- return (ap.ptr() == p);
- }
- friend bool operator != (const AutoString & ap, const char * const p) {
- return (ap.ptr() != p);
- }
- friend bool operator == (const char * const p, const AutoString & ap) {
- return (ap.ptr() == p);
- }
- friend bool operator != (const char * const p, const AutoString & ap) {
- return (ap.ptr() != p);
- }
-
- private:
- const char * m_ptr;
- };
-
-} // nv namespace
-
-#endif // NV_CORE_STRING_H