xref: /aosp_15_r20/external/libchrome/base/strings/nullable_string16.h (revision 635a864187cb8b6c713ff48b7e790a6b21769273)
1*635a8641SAndroid Build Coastguard Worker // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2*635a8641SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*635a8641SAndroid Build Coastguard Worker // found in the LICENSE file.
4*635a8641SAndroid Build Coastguard Worker 
5*635a8641SAndroid Build Coastguard Worker #ifndef BASE_STRINGS_NULLABLE_STRING16_H_
6*635a8641SAndroid Build Coastguard Worker #define BASE_STRINGS_NULLABLE_STRING16_H_
7*635a8641SAndroid Build Coastguard Worker 
8*635a8641SAndroid Build Coastguard Worker #include <iosfwd>
9*635a8641SAndroid Build Coastguard Worker 
10*635a8641SAndroid Build Coastguard Worker #include "base/base_export.h"
11*635a8641SAndroid Build Coastguard Worker #include "base/optional.h"
12*635a8641SAndroid Build Coastguard Worker #include "base/strings/string16.h"
13*635a8641SAndroid Build Coastguard Worker #include "base/strings/string_util.h"
14*635a8641SAndroid Build Coastguard Worker 
15*635a8641SAndroid Build Coastguard Worker namespace base {
16*635a8641SAndroid Build Coastguard Worker 
17*635a8641SAndroid Build Coastguard Worker // This class is a simple wrapper for string16 which also contains a null
18*635a8641SAndroid Build Coastguard Worker // state.  This should be used only where the difference between null and
19*635a8641SAndroid Build Coastguard Worker // empty is meaningful.
20*635a8641SAndroid Build Coastguard Worker class BASE_EXPORT NullableString16 {
21*635a8641SAndroid Build Coastguard Worker  public:
22*635a8641SAndroid Build Coastguard Worker   NullableString16();
23*635a8641SAndroid Build Coastguard Worker   NullableString16(const NullableString16& other);
24*635a8641SAndroid Build Coastguard Worker   NullableString16(NullableString16&& other);
25*635a8641SAndroid Build Coastguard Worker   NullableString16(const string16& string, bool is_null);
26*635a8641SAndroid Build Coastguard Worker   explicit NullableString16(Optional<string16> optional_string16);
27*635a8641SAndroid Build Coastguard Worker   ~NullableString16();
28*635a8641SAndroid Build Coastguard Worker 
29*635a8641SAndroid Build Coastguard Worker   NullableString16& operator=(const NullableString16& other);
30*635a8641SAndroid Build Coastguard Worker   NullableString16& operator=(NullableString16&& other);
31*635a8641SAndroid Build Coastguard Worker 
string()32*635a8641SAndroid Build Coastguard Worker   const string16& string() const {
33*635a8641SAndroid Build Coastguard Worker     return string_ ? *string_ : EmptyString16();
34*635a8641SAndroid Build Coastguard Worker   }
is_null()35*635a8641SAndroid Build Coastguard Worker   bool is_null() const { return !string_; }
as_optional_string16()36*635a8641SAndroid Build Coastguard Worker   const Optional<string16>& as_optional_string16() const { return string_; }
37*635a8641SAndroid Build Coastguard Worker 
38*635a8641SAndroid Build Coastguard Worker  private:
39*635a8641SAndroid Build Coastguard Worker   Optional<string16> string_;
40*635a8641SAndroid Build Coastguard Worker };
41*635a8641SAndroid Build Coastguard Worker 
42*635a8641SAndroid Build Coastguard Worker inline bool operator==(const NullableString16& a, const NullableString16& b) {
43*635a8641SAndroid Build Coastguard Worker   return a.as_optional_string16() == b.as_optional_string16();
44*635a8641SAndroid Build Coastguard Worker }
45*635a8641SAndroid Build Coastguard Worker 
46*635a8641SAndroid Build Coastguard Worker inline bool operator!=(const NullableString16& a, const NullableString16& b) {
47*635a8641SAndroid Build Coastguard Worker   return !(a == b);
48*635a8641SAndroid Build Coastguard Worker }
49*635a8641SAndroid Build Coastguard Worker 
50*635a8641SAndroid Build Coastguard Worker BASE_EXPORT std::ostream& operator<<(std::ostream& out,
51*635a8641SAndroid Build Coastguard Worker                                      const NullableString16& value);
52*635a8641SAndroid Build Coastguard Worker 
53*635a8641SAndroid Build Coastguard Worker }  // namespace base
54*635a8641SAndroid Build Coastguard Worker 
55*635a8641SAndroid Build Coastguard Worker #endif  // BASE_STRINGS_NULLABLE_STRING16_H_
56