103b1f0fb7247ddc1c8496bf3b1bdc056110d12faArman Uguray// 203b1f0fb7247ddc1c8496bf3b1bdc056110d12faArman Uguray// Copyright (C) 2015 Google, Inc. 303b1f0fb7247ddc1c8496bf3b1bdc056110d12faArman Uguray// 403b1f0fb7247ddc1c8496bf3b1bdc056110d12faArman Uguray// Licensed under the Apache License, Version 2.0 (the "License"); 503b1f0fb7247ddc1c8496bf3b1bdc056110d12faArman Uguray// you may not use this file except in compliance with the License. 603b1f0fb7247ddc1c8496bf3b1bdc056110d12faArman Uguray// You may obtain a copy of the License at: 703b1f0fb7247ddc1c8496bf3b1bdc056110d12faArman Uguray// 803b1f0fb7247ddc1c8496bf3b1bdc056110d12faArman Uguray// http://www.apache.org/licenses/LICENSE-2.0 903b1f0fb7247ddc1c8496bf3b1bdc056110d12faArman Uguray// 1003b1f0fb7247ddc1c8496bf3b1bdc056110d12faArman Uguray// Unless required by applicable law or agreed to in writing, software 1103b1f0fb7247ddc1c8496bf3b1bdc056110d12faArman Uguray// distributed under the License is distributed on an "AS IS" BASIS, 1203b1f0fb7247ddc1c8496bf3b1bdc056110d12faArman Uguray// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1303b1f0fb7247ddc1c8496bf3b1bdc056110d12faArman Uguray// See the License for the specific language governing permissions and 1403b1f0fb7247ddc1c8496bf3b1bdc056110d12faArman Uguray// limitations under the License. 1503b1f0fb7247ddc1c8496bf3b1bdc056110d12faArman Uguray// 1603b1f0fb7247ddc1c8496bf3b1bdc056110d12faArman Uguray 1703b1f0fb7247ddc1c8496bf3b1bdc056110d12faArman Uguray#include <mutex> 1803b1f0fb7247ddc1c8496bf3b1bdc056110d12faArman Uguray#include <string> 1903b1f0fb7247ddc1c8496bf3b1bdc056110d12faArman Uguray 2003b1f0fb7247ddc1c8496bf3b1bdc056110d12faArman Uguray#include <base/macros.h> 2103b1f0fb7247ddc1c8496bf3b1bdc056110d12faArman Uguray 2203b1f0fb7247ddc1c8496bf3b1bdc056110d12faArman Uguraynamespace util { 2303b1f0fb7247ddc1c8496bf3b1bdc056110d12faArman Uguray 2403b1f0fb7247ddc1c8496bf3b1bdc056110d12faArman Uguray// A simple atomic container class for std::string. 2503b1f0fb7247ddc1c8496bf3b1bdc056110d12faArman Ugurayclass AtomicString final { 2603b1f0fb7247ddc1c8496bf3b1bdc056110d12faArman Uguray public: 2703b1f0fb7247ddc1c8496bf3b1bdc056110d12faArman Uguray AtomicString(const std::string& str); 2803b1f0fb7247ddc1c8496bf3b1bdc056110d12faArman Uguray ~AtomicString() = default; 2903b1f0fb7247ddc1c8496bf3b1bdc056110d12faArman Uguray 3003b1f0fb7247ddc1c8496bf3b1bdc056110d12faArman Uguray std::string Get() const; 3103b1f0fb7247ddc1c8496bf3b1bdc056110d12faArman Uguray void Set(const std::string& str); 3203b1f0fb7247ddc1c8496bf3b1bdc056110d12faArman Uguray 3303b1f0fb7247ddc1c8496bf3b1bdc056110d12faArman Uguray private: 3403b1f0fb7247ddc1c8496bf3b1bdc056110d12faArman Uguray std::mutex lock_; 3503b1f0fb7247ddc1c8496bf3b1bdc056110d12faArman Uguray std::string str_; 3603b1f0fb7247ddc1c8496bf3b1bdc056110d12faArman Uguray 3703b1f0fb7247ddc1c8496bf3b1bdc056110d12faArman Uguray DISALLOW_COPY_AND_ASSIGN(AtomicString); 3803b1f0fb7247ddc1c8496bf3b1bdc056110d12faArman Uguray}; 3903b1f0fb7247ddc1c8496bf3b1bdc056110d12faArman Uguray 4003b1f0fb7247ddc1c8496bf3b1bdc056110d12faArman Uguray} // namespace util 41