OpenShot Audio Library | OpenShotAudio  0.3.2
juce_StringRef.h
1 /*
2  ==============================================================================
3 
4  This file is part of the JUCE library.
5  Copyright (c) 2017 - ROLI Ltd.
6 
7  JUCE is an open source library subject to commercial or open-source
8  licensing.
9 
10  The code included in this file is provided under the terms of the ISC license
11  http://www.isc.org/downloads/software-support-policy/isc-license. Permission
12  To use, copy, modify, and/or distribute this software for any purpose with or
13  without fee is hereby granted provided that the above copyright notice and
14  this permission notice appear in all copies.
15 
16  JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
17  EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
18  DISCLAIMED.
19 
20  ==============================================================================
21 */
22 
23 namespace juce
24 {
25 
26 //==============================================================================
61 class JUCE_API StringRef final
62 {
63 public:
69  StringRef (const char* stringLiteral) noexcept;
70 
75  StringRef (String::CharPointerType stringLiteral) noexcept;
76 
82  StringRef (const String& string) noexcept;
83 
89  StringRef (const std::string& string);
90 
92  StringRef() noexcept;
93 
94  //==============================================================================
96  operator const String::CharPointerType::CharType*() const noexcept { return text.getAddress(); }
98  operator String::CharPointerType() const noexcept { return text; }
99 
101  bool isEmpty() const noexcept { return text.isEmpty(); }
103  bool isNotEmpty() const noexcept { return ! text.isEmpty(); }
105  int length() const noexcept { return (int) text.length(); }
106 
108  juce_wchar operator[] (int index) const noexcept { return text[index]; }
109 
111  bool operator== (const String& s) const noexcept { return text.compare (s.getCharPointer()) == 0; }
113  bool operator!= (const String& s) const noexcept { return text.compare (s.getCharPointer()) != 0; }
115  bool operator< (const String& s) const noexcept { return text.compare (s.getCharPointer()) < 0; }
117  bool operator<= (const String& s) const noexcept { return text.compare (s.getCharPointer()) <= 0; }
119  bool operator> (const String& s) const noexcept { return text.compare (s.getCharPointer()) > 0; }
121  bool operator>= (const String& s) const noexcept { return text.compare (s.getCharPointer()) >= 0; }
122 
124  bool operator== (StringRef s) const noexcept { return text.compare (s.text) == 0; }
126  bool operator!= (StringRef s) const noexcept { return text.compare (s.text) != 0; }
127 
128  //==============================================================================
130  String::CharPointerType text;
131 
132  #if JUCE_STRING_UTF_TYPE != 8 && ! defined (DOXYGEN)
133  // Sorry, non-UTF8 people, you're unable to take advantage of StringRef, because
134  // you've chosen a character encoding that doesn't match C++ string literals.
135  String stringCopy;
136  #endif
137 };
138 
139 //==============================================================================
141 JUCE_API bool JUCE_CALLTYPE operator== (const String& string1, StringRef string2) noexcept;
143 JUCE_API bool JUCE_CALLTYPE operator!= (const String& string1, StringRef string2) noexcept;
145 JUCE_API bool JUCE_CALLTYPE operator< (const String& string1, StringRef string2) noexcept;
147 JUCE_API bool JUCE_CALLTYPE operator<= (const String& string1, StringRef string2) noexcept;
149 JUCE_API bool JUCE_CALLTYPE operator> (const String& string1, StringRef string2) noexcept;
151 JUCE_API bool JUCE_CALLTYPE operator>= (const String& string1, StringRef string2) noexcept;
152 
153 inline String operator+ (String s1, StringRef s2) { return s1 += String (s2.text); }
154 inline String operator+ (StringRef s1, const String& s2) { return String (s1.text) + s2; }
155 inline String operator+ (const char* s1, StringRef s2) { return String (s1) + String (s2.text); }
156 inline String operator+ (StringRef s1, const char* s2) { return String (s1.text) + String (s2); }
157 
158 } // namespace juce
bool isNotEmpty() const noexcept
int length() const noexcept
String::CharPointerType text
bool isEmpty() const noexcept