mirror of
git://sourceware.org/git/libabigail.git
synced 2025-03-11 09:08:04 +00:00
It's this time of the year again. This patch updates the copyright years notice in the preamble of each source code file to include year 2025. This is done by updating and executing the shell script update-copyright.sh. * include/abg-btf-reader.h: Update copyright year to include 2025. * include/abg-comp-filter.h: Likewise. * include/abg-comparison.h: Likewise. * include/abg-config.h: Likewise. * include/abg-corpus.h: Likewise. * include/abg-ctf-reader.h: Likewise. * include/abg-cxx-compat.h: Likewise. * include/abg-diff-utils.h: Likewise. * include/abg-dwarf-reader.h: Likewise. * include/abg-elf-based-reader.h: Likewise. * include/abg-elf-reader.h: Likewise. * include/abg-fe-iface.h: Likewise. * include/abg-fwd.h: Likewise. * include/abg-hash.h: Likewise. * include/abg-ini.h: Likewise. * include/abg-interned-str.h: Likewise. * include/abg-ir.h: Likewise. * include/abg-libxml-utils.h: Likewise. * include/abg-reader.h: Likewise. * include/abg-regex.h: Likewise. * include/abg-reporter.h: Likewise. * include/abg-sptr-utils.h: Likewise. * include/abg-suppression.h: Likewise. * include/abg-tools-utils.h: Likewise. * include/abg-traverse.h: Likewise. * include/abg-viz-common.h: Likewise. * include/abg-viz-dot.h: Likewise. * include/abg-viz-svg.h: Likewise. * include/abg-workers.h: Likewise. * include/abg-writer.h: Likewise. * src/abg-btf-reader.cc: Likewise. * src/abg-comp-filter.cc: Likewise. * src/abg-comparison-priv.h: Likewise. * src/abg-comparison.cc: Likewise. * src/abg-config.cc: Likewise. * src/abg-corpus-priv.h: Likewise. * src/abg-corpus.cc: Likewise. * src/abg-ctf-reader.cc: Likewise. * src/abg-default-reporter.cc: Likewise. * src/abg-diff-utils.cc: Likewise. * src/abg-dwarf-reader.cc: Likewise. * src/abg-elf-based-reader.cc: Likewise. * src/abg-elf-helpers.cc: Likewise. * src/abg-elf-helpers.h: Likewise. * src/abg-elf-reader.cc: Likewise. * src/abg-fe-iface.cc: Likewise. * src/abg-hash.cc: Likewise. * src/abg-ini.cc: Likewise. * src/abg-internal.h: Likewise. * src/abg-ir-priv.h: Likewise. * src/abg-ir.cc: Likewise. * src/abg-leaf-reporter.cc: Likewise. * src/abg-libxml-utils.cc: Likewise. * src/abg-reader.cc: Likewise. * src/abg-regex.cc: Likewise. * src/abg-reporter-priv.cc: Likewise. * src/abg-reporter-priv.h: Likewise. * src/abg-suppression-priv.h: Likewise. * src/abg-suppression.cc: Likewise. * src/abg-symtab-reader.cc: Likewise. * src/abg-symtab-reader.h: Likewise. * src/abg-tools-utils.cc: Likewise. * src/abg-traverse.cc: Likewise. * src/abg-viz-common.cc: Likewise. * src/abg-viz-dot.cc: Likewise. * src/abg-viz-svg.cc: Likewise. * src/abg-workers.cc: Likewise. * src/abg-writer.cc: Likewise. * tests/print-diff-tree.cc: Likewise. * tests/test-abicompat.cc: Likewise. * tests/test-abidiff-exit.cc: Likewise. * tests/test-abidiff.cc: Likewise. * tests/test-alt-dwarf-file.cc: Likewise. * tests/test-core-diff.cc: Likewise. * tests/test-cxx-compat.cc: Likewise. * tests/test-diff-dwarf-abixml.cc: Likewise. * tests/test-diff-dwarf.cc: Likewise. * tests/test-diff-filter.cc: Likewise. * tests/test-diff-pkg.cc: Likewise. * tests/test-diff-suppr.cc: Likewise. * tests/test-diff2.cc: Likewise. * tests/test-dot.cc: Likewise. * tests/test-elf-helpers.cc: Likewise. * tests/test-ini.cc: Likewise. * tests/test-ir-walker.cc: Likewise. * tests/test-kmi-whitelist.cc: Likewise. * tests/test-lookup-syms.cc: Likewise. * tests/test-read-btf.cc: Likewise. * tests/test-read-ctf.cc: Likewise. * tests/test-read-dwarf.cc: Likewise. * tests/test-read-write.cc: Likewise. * tests/test-svg.cc: Likewise. * tests/test-symtab-reader.cc: Likewise. * tests/test-symtab.cc: Likewise. * tests/test-tools-utils.cc: Likewise. * tests/test-types-stability.cc: Likewise. * tests/test-utils.cc: Likewise. * tests/test-utils.h: Likewise. * tools/abicompat.cc: Likewise. * tools/abidiff.cc: Likewise. * tools/abidw.cc: Likewise. * tools/abilint.cc: Likewise. * tools/abipkgdiff.cc: Likewise. * tools/abisym.cc: Likewise. * tools/binilint.cc: Likewise. * tools/kmidiff.cc: Likewise. * update-copyright.sh: Likewise. Signed-off-by: Dodji Seketeli <dodji@redhat.com>
118 lines
2.1 KiB
C++
118 lines
2.1 KiB
C++
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
// -*- Mode: C++ -*-
|
|
//
|
|
// Copyright (C) 2019-2025 Google, Inc.
|
|
|
|
/// @file
|
|
|
|
#ifndef __ABG_CXX_COMPAT_H
|
|
#define __ABG_CXX_COMPAT_H
|
|
|
|
// C++17 support (via custom implementations if compiled with earlier standard)
|
|
|
|
#if __cplusplus >= 201703L
|
|
|
|
#include <optional>
|
|
|
|
#else
|
|
|
|
#include <stdexcept> // for throwing std::runtime_error("bad_optional_access")
|
|
|
|
#endif
|
|
|
|
namespace abg_compat {
|
|
|
|
#if __cplusplus >= 201703L
|
|
|
|
using std::optional;
|
|
|
|
#else
|
|
|
|
// <optional>
|
|
|
|
/// Simplified implementation of std::optional just enough to be used as a
|
|
/// replacement for our purposes and when compiling with pre C++17.
|
|
///
|
|
/// The implementation intentionally does not support a whole lot of features
|
|
/// to minimize the maintenance effort with this.
|
|
template <typename T> class optional
|
|
{
|
|
bool has_value_;
|
|
T value_;
|
|
|
|
public:
|
|
optional() : has_value_(false), value_() {}
|
|
optional(const T& value) : has_value_(true), value_(value) {}
|
|
|
|
bool
|
|
has_value() const noexcept
|
|
{
|
|
return has_value_;
|
|
}
|
|
|
|
const T&
|
|
value() const
|
|
{
|
|
if (!has_value_)
|
|
throw std::runtime_error("bad_optional_access");
|
|
return value_;
|
|
}
|
|
|
|
const T
|
|
value_or(const T& default_value) const
|
|
{
|
|
if (!has_value_)
|
|
return default_value;
|
|
return value_;
|
|
}
|
|
|
|
const T&
|
|
operator*() const& noexcept
|
|
{ return value_; }
|
|
|
|
T&
|
|
operator*() & noexcept
|
|
{ return value_; }
|
|
|
|
const T*
|
|
operator->() const noexcept
|
|
{ return &value_; }
|
|
|
|
T*
|
|
operator->() noexcept
|
|
{ return &value_; }
|
|
|
|
optional&
|
|
operator=(const T& value)
|
|
{
|
|
has_value_ = true;
|
|
value_ = value;
|
|
return *this;
|
|
}
|
|
|
|
explicit operator bool() const noexcept { return has_value(); }
|
|
};
|
|
|
|
template <typename T, typename U>
|
|
bool
|
|
operator==(const optional<T>& lhs, const optional<U>& rhs)
|
|
{
|
|
if (!lhs.has_value() && !rhs.has_value())
|
|
return true;
|
|
if (!lhs.has_value() || !rhs.has_value())
|
|
return false;
|
|
return lhs.value() == rhs.value();
|
|
}
|
|
|
|
template <typename T, typename U>
|
|
bool
|
|
operator!=(const optional<T>& lhs, const optional<U>& rhs)
|
|
{
|
|
return !(lhs == rhs);
|
|
}
|
|
|
|
#endif
|
|
}
|
|
|
|
#endif // __ABG_CXX_COMPAT_H
|