/*
* Copyright 2019 The Chromium Authors . All rights reserved .
* Copyright ( c ) 2021 The WebRTC project authors . All Rights Reserved .
*
* Use of this source code is governed by a BSD - style license
* that can be found in the LICENSE file in the root of the source
* tree . An additional intellectual property rights grant can be found
* in the file PATENTS . All contributing project authors may
* be found in the AUTHORS file in the root of the source tree .
*/
#ifndef RTC_BASE_STRONG_ALIAS_H_
#define RTC_BASE_STRONG_ALIAS_H_
#include <utility>
namespace webrtc {
// This is a copy of
// https://source.chromium.org/chromium/chromium/src/+/main:base/types/strong_alias.h
// as the API (and internals) are using type-safe integral identifiers, but this
// library can't depend on that file. The ostream operator has been removed
// per WebRTC library conventions, and the underlying type is exposed.
template <
typename TagType,
typename TheUnderlyingType>
class StrongAlias {
public :
using UnderlyingType = TheUnderlyingType;
constexpr StrongAlias() =
default ;
constexpr
explicit StrongAlias(
const UnderlyingType& v) : value_(v) {}
constexpr
explicit StrongAlias(UnderlyingType&& v) noexcept
: value_(std::move(v)) {}
constexpr UnderlyingType*
operator ->() {
return &value_; }
constexpr
const UnderlyingType*
operator ->()
const {
return &value_; }
constexpr UnderlyingType&
operator *() & {
return value_; }
constexpr
const UnderlyingType&
operator *()
const & {
return value_; }
constexpr UnderlyingType&&
operator *() && {
return std::move(value_); }
constexpr
const UnderlyingType&&
operator *()
const && {
return std::move(value_);
}
constexpr UnderlyingType& value() & {
return value_; }
constexpr
const UnderlyingType& value()
const & {
return value_; }
constexpr UnderlyingType&& value() && {
return std::move(value_); }
constexpr
const UnderlyingType&& value()
const && {
return std::move(value_); }
constexpr
explicit operator const UnderlyingType&()
const & {
return value_; }
constexpr
bool operator ==(
const StrongAlias& other)
const {
return value_ == other.value_;
}
constexpr
bool operator !=(
const StrongAlias& other)
const {
return value_ != other.value_;
}
constexpr
bool operator <(
const StrongAlias& other)
const {
return value_ < other.value_;
}
constexpr
bool operator <=(
const StrongAlias& other)
const {
return value_ <= other.value_;
}
constexpr
bool operator >(
const StrongAlias& other)
const {
return value_ > other.value_;
}
constexpr
bool operator >=(
const StrongAlias& other)
const {
return value_ >= other.value_;
}
protected :
UnderlyingType value_;
private :
// Helper function for using abseil hash types.
template <
typename H>
friend H AbslHashValue(H h,
const StrongAlias& st) {
return H::combine(std::move(h), st.value_);
}
};
}
// namespace webrtc
#endif // RTC_BASE_STRONG_ALIAS_H_
Messung V0.5 in Prozent C=90 H=100 G=95
¤ Dauer der Verarbeitung: 0.9 Sekunden
(vorverarbeitet am 2026-09-30)
¤
*© Formatika GbR, Deutschland