libabigail/include/abg-reporter.h
Dodji Seketeli 99a6fce808 Update copyright years for 2025
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>
2025-01-13 12:37:12 +01:00

369 lines
9.5 KiB
C++

// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
// -*- Mode: C++ -*-
//
// Copyright (C) 2017-2025 Red Hat, Inc.
//
// Author: Dodji Seketeli
/// @file
///
/// The declaration of the reporting types of libabigail's diff
/// engine.
#ifndef __ABG_REPORTER_H__
#define __ABG_REPORTER_H__
#include <memory>
#include <ostream>
#include <string>
namespace abigail
{
using std::shared_ptr;
namespace comparison
{
class diff;
class type_decl_diff;
class enum_diff;
class typedef_diff;
class qualified_type_diff;
class distinct_diff;
class pointer_diff;
class reference_diff;
class ptr_to_mbr_diff;
class subrange_diff;
class array_diff;
class base_diff;
class class_or_union_diff;
class class_diff;
class union_diff;
class scope_diff;
class fn_parm_diff;
class function_type_diff;
class function_decl_diff;
class var_diff;
class translation_unit_diff;
class corpus_diff;
class diff_maps;
class reporter_base;
/// A convenience typedef for a shared pointer to a @ref
/// reporter_base.
typedef shared_ptr<reporter_base> reporter_base_sptr;
/// The base class of all the reporting classes.
class reporter_base
{
public:
virtual bool diff_to_be_reported(const diff *d) const;
virtual bool diff_has_net_changes(const corpus_diff *d) const = 0;
virtual void
report(const type_decl_diff& d, std::ostream& out,
const std::string& indent = "") const = 0;
virtual void
report(const enum_diff& d, std::ostream& out,
const std::string& indent = "") const = 0;
virtual void
report(const typedef_diff& d, std::ostream& out,
const std::string& indent = "") const = 0;
virtual void
report(const qualified_type_diff& d, std::ostream& out,
const std::string& indent = "") const = 0;
virtual void
report(const distinct_diff& d, std::ostream& out,
const std::string& indent = "") const = 0;
virtual void
report(const pointer_diff& d, std::ostream& out,
const std::string& indent = "") const = 0;
virtual void
report(const reference_diff& d, std::ostream& out,
const std::string& indent = "") const = 0;
virtual void
report(const ptr_to_mbr_diff& d, std::ostream& out,
const std::string& indent = "") const = 0;
virtual void
report(const array_diff& d, std::ostream& out,
const std::string& indent = "") const = 0;
virtual void
report(const subrange_diff& d, std::ostream& out,
const std::string& indent = "") const = 0;
virtual void
report(const base_diff& d, std::ostream& out,
const std::string& indent = "") const = 0;
virtual void
report(const class_or_union_diff& d, std::ostream& out,
const std::string& indent = "") const = 0;
virtual void
report(const class_diff& d, std::ostream& out,
const std::string& indent = "") const = 0;
virtual void
report(const union_diff& d, std::ostream& out,
const std::string& indent = "") const = 0;
virtual void
report(const scope_diff& d, std::ostream& out,
const std::string& indent = "") const = 0;
virtual void
report(const fn_parm_diff& d, std::ostream& out,
const std::string& indent = "") const = 0;
virtual void
report(const function_type_diff& d, std::ostream& out,
const std::string& indent = "") const = 0;
virtual void
report(const function_decl_diff& d, std::ostream& out,
const std::string& indent = "") const = 0;
virtual void
report(const var_diff& d, std::ostream& out,
const std::string& indent = "") const = 0;
virtual void
report(const translation_unit_diff& d, std::ostream& out,
const std::string& indent = "") const = 0;
virtual void
report(const corpus_diff& d, std::ostream& out,
const std::string& indent = "") const = 0;
virtual ~reporter_base() {}
}; //end class reporter_base
class default_reporter;
/// A convenience typedef for a shared_ptr to a @ref default_reporter.
typedef shared_ptr<default_reporter> default_reporter_sptr;
/// The default, initial, reporter of the libabigail comparison engine.
class default_reporter : public reporter_base
{
public:
virtual bool diff_has_net_changes(const corpus_diff *d) const;
virtual void
report(const type_decl_diff& d, std::ostream& out,
const std::string& indent = "") const;
virtual void
report(const enum_diff& d, std::ostream& out,
const std::string& indent = "") const;
void
report_non_type_typedef_changes(const typedef_diff &d,
std::ostream& out,
const std::string& indent) const;
virtual void
report(const typedef_diff& d, std::ostream& out,
const std::string& indent = "") const;
bool
report_local_qualified_type_changes(const qualified_type_diff& d,
std::ostream& out,
const std::string& indent) const;
void
report_underlying_changes_of_qualified_type (const qualified_type_diff& d,
ostream& out,
const string& indent) const;
virtual void
report(const qualified_type_diff& d, std::ostream& out,
const std::string& indent = "") const;
virtual void
report(const pointer_diff& d, std::ostream& out,
const std::string& indent = "") const;
void
report_local_reference_type_changes(const reference_diff& d,
std::ostream& out,
const std::string& indent) const;
virtual void
report(const reference_diff& d, std::ostream& out,
const std::string& indent = "") const;
bool
report_local_ptr_to_mbr_type_changes(const ptr_to_mbr_diff& d,
std::ostream& out,
const std::string& indent = "") const;
virtual void
report(const ptr_to_mbr_diff& d, std::ostream& out,
const std::string& indent = "") const;
virtual void
report(const fn_parm_diff& d, std::ostream& out,
const std::string& indent = "") const;
void
report_local_function_type_changes(const function_type_diff& d,
std::ostream& out,
const std::string& indent) const;
virtual void
report(const function_type_diff& d, std::ostream& out,
const std::string& indent = "") const;
virtual void
report(const subrange_diff& d, std::ostream& out,
const std::string& indent = "") const;
virtual void
report(const array_diff& d, std::ostream& out,
const std::string& indent = "") const;
virtual void
report(const base_diff& d, std::ostream& out,
const std::string& indent = "") const;
virtual void
report(const scope_diff& d, std::ostream& out,
const std::string& indent = "") const;
virtual void
report(const class_or_union_diff& d, std::ostream& out,
const std::string& indent = "") const;
virtual void
report(const class_diff& d, std::ostream& out,
const std::string& indent = "") const;
virtual void
report(const union_diff& d, std::ostream& out,
const std::string& indent = "") const;
virtual void
report(const distinct_diff& d, std::ostream& out,
const std::string& indent = "") const;
virtual void
report(const function_decl_diff& d, std::ostream& out,
const std::string& indent = "") const;
virtual void
report(const var_diff& d, std::ostream& out,
const std::string& indent = "") const;
virtual void
report(const translation_unit_diff& d, std::ostream& out,
const std::string& indent = "") const;
virtual void
report(const corpus_diff& d, std::ostream& out,
const std::string& indent = "") const;
}; // end class default_reporter
/// A reporter that only reports leaf changes
class leaf_reporter : public default_reporter
{
public:
virtual bool diff_to_be_reported(const diff *d) const;
virtual bool diff_has_net_changes(const corpus_diff *d) const;
void
report_changes_from_diff_maps(const diff_maps&, std::ostream& out,
const std::string& indent) const;
virtual void
report(const typedef_diff& d, std::ostream& out,
const std::string& indent = "") const;
virtual void
report(const qualified_type_diff& d, std::ostream& out,
const std::string& indent = "") const;
virtual void
report(const pointer_diff& d, std::ostream& out,
const std::string& indent = "") const;
virtual void
report(const reference_diff& d, std::ostream& out,
const std::string& indent = "") const;
virtual void
report(const ptr_to_mbr_diff& d, std::ostream& out,
const std::string& indent = "") const;
virtual void
report(const fn_parm_diff& d, std::ostream& out,
const std::string& indent = "") const;
virtual void
report(const function_type_diff& d, std::ostream& out,
const std::string& indent = "") const;
virtual void
report(const subrange_diff& d, std::ostream& out,
const std::string& indent = "") const;
virtual void
report(const array_diff& d, std::ostream& out,
const std::string& indent = "") const;
virtual void
report(const scope_diff& d, std::ostream& out,
const std::string& indent = "") const;
virtual void
report(const class_or_union_diff& d, std::ostream& out,
const std::string& indent = "") const;
virtual void
report(const class_diff& d, std::ostream& out,
const std::string& indent = "") const;
virtual void
report(const union_diff& d, std::ostream& out,
const std::string& indent = "") const;
virtual void
report(const distinct_diff& d, std::ostream& out,
const std::string& indent = "") const;
virtual void
report(const function_decl_diff& d, std::ostream& out,
const std::string& indent = "") const;
virtual void
report(const var_diff& d, std::ostream& out,
const std::string& indent = "") const;
virtual void
report(const translation_unit_diff& d, std::ostream& out,
const std::string& indent = "") const;
virtual void
report(const corpus_diff& d, std::ostream& out,
const std::string& indent = "") const;
}; // end class leaf_reporter
} // end namespace comparison
} // end namespace abigail
#endif // __ABG_REPORTER_H__