You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
81 lines
1.8 KiB
81 lines
1.8 KiB
// Copyright 2014 The Chromium OS Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
#include <brillo/any.h>
|
|
|
|
#include <algorithm>
|
|
#include <utility>
|
|
|
|
namespace brillo {
|
|
|
|
Any::Any() {
|
|
}
|
|
|
|
Any::Any(const Any& rhs) : data_buffer_(rhs.data_buffer_) {
|
|
}
|
|
|
|
// NOLINTNEXTLINE(build/c++11)
|
|
Any::Any(Any&& rhs) : data_buffer_(std::move(rhs.data_buffer_)) {
|
|
}
|
|
|
|
Any::~Any() {
|
|
}
|
|
|
|
Any& Any::operator=(const Any& rhs) {
|
|
data_buffer_ = rhs.data_buffer_;
|
|
return *this;
|
|
}
|
|
|
|
// NOLINTNEXTLINE(build/c++11)
|
|
Any& Any::operator=(Any&& rhs) {
|
|
data_buffer_ = std::move(rhs.data_buffer_);
|
|
return *this;
|
|
}
|
|
|
|
bool Any::operator==(const Any& rhs) const {
|
|
// Make sure both objects contain data of the same type.
|
|
if (strcmp(GetTypeTagInternal(), rhs.GetTypeTagInternal()) != 0)
|
|
return false;
|
|
|
|
if (IsEmpty())
|
|
return true;
|
|
|
|
return data_buffer_.GetDataPtr()->CompareEqual(rhs.data_buffer_.GetDataPtr());
|
|
}
|
|
|
|
const char* Any::GetTypeTagInternal() const {
|
|
if (!IsEmpty())
|
|
return data_buffer_.GetDataPtr()->GetTypeTag();
|
|
|
|
return "";
|
|
}
|
|
|
|
void Any::Swap(Any& other) {
|
|
std::swap(data_buffer_, other.data_buffer_);
|
|
}
|
|
|
|
bool Any::IsEmpty() const {
|
|
return data_buffer_.IsEmpty();
|
|
}
|
|
|
|
void Any::Clear() {
|
|
data_buffer_.Clear();
|
|
}
|
|
|
|
bool Any::IsConvertibleToInteger() const {
|
|
return !IsEmpty() && data_buffer_.GetDataPtr()->IsConvertibleToInteger();
|
|
}
|
|
|
|
intmax_t Any::GetAsInteger() const {
|
|
CHECK(!IsEmpty()) << "Must not be called on an empty Any";
|
|
return data_buffer_.GetDataPtr()->GetAsInteger();
|
|
}
|
|
|
|
void Any::AppendToDBusMessageWriter(dbus::MessageWriter* writer) const {
|
|
CHECK(!IsEmpty()) << "Must not be called on an empty Any";
|
|
data_buffer_.GetDataPtr()->AppendToDBusMessage(writer);
|
|
}
|
|
|
|
} // namespace brillo
|