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