| /* |
| * Copyright (C) 2019 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| #ifndef SRC_TRACE_PROCESSOR_NULL_TERM_STRING_VIEW_H_ |
| #define SRC_TRACE_PROCESSOR_NULL_TERM_STRING_VIEW_H_ |
| |
| #include "perfetto/ext/base/string_view.h" |
| |
| namespace perfetto { |
| namespace trace_processor { |
| |
| // A string-like object that refers to a non-owned piece of memory which is |
| // null terminated. |
| class NullTermStringView : public base::StringView { |
| public: |
| // Creates an empty view. |
| NullTermStringView() : StringView() {} |
| |
| // Make the view copy constructible. |
| NullTermStringView(const NullTermStringView&) = default; |
| NullTermStringView& operator=(const NullTermStringView&) = default; |
| |
| // Creates a NullTermStringView from a null-terminated C string. |
| // Deliberately not "explicit". |
| NullTermStringView(const char* cstr) : StringView(cstr) {} |
| |
| // Creates a NullTermStringView from a null terminated C-string where the |
| // size is known. This allows a call to strlen() to be avoided. |
| // Note: This string MUST be null terminated i.e. data[size] == '\0' MUST hold |
| // for this constructor to be valid. |
| NullTermStringView(const char* data, size_t size) : StringView(data, size) { |
| PERFETTO_DCHECK(data[size] == '\0'); |
| } |
| |
| // This instead has to be explicit, as creating a NullTermStringView out of a |
| // std::string can be subtle. |
| explicit NullTermStringView(const std::string& str) : StringView(str) {} |
| |
| // Returns the null terminated C-string backing this string view. The same |
| // pointer as |data()| is returned. |
| const char* c_str() const { return data(); } |
| }; |
| |
| } // namespace trace_processor |
| } // namespace perfetto |
| |
| #endif // SRC_TRACE_PROCESSOR_NULL_TERM_STRING_VIEW_H_ |