libabigail/include/abg-viz-dot.h
Dodji Seketeli 2d1e324727 Update year in copyright notice
* include/abg-comp-filter.h: Update year in copyright notice.
	* 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-reader-common.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-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-helpers.cc: Likewise.
	* src/abg-elf-helpers.h: Likewise.
	* src/abg-elf-reader-common.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-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-ctf.cc: Likewise.
	* tests/test-read-dwarf.cc: Likewise.
	* tests/test-read-write.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>
2022-06-21 12:58:57 +02:00

156 lines
2.7 KiB
C++

// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
// -*- mode: C++ -*-
//
// Copyright (C) 2013-2022 Red Hat, Inc.
/// @file
#ifndef __ABG_VIZ_DOT_H__
#define __ABG_VIZ_DOT_H__
#include <abg-viz-common.h>
namespace abigail
{
/// Base class for graph nodes.
struct node_base
{
/// Possible derived types.
enum type { child, parent };
std::string _M_id;
static units_type _M_count_total; // Start at zero.
units_type _M_count;
type _M_type;
float _M_x_space; // Column spacing.
float _M_y_space; // Row spacing.
const style& _M_style;
explicit
node_base(const std::string& __id, type __t, const style& __sty)
: _M_id(__id), _M_count(++_M_count_total),
_M_type(__t), _M_x_space(0.4), _M_y_space(0.2), _M_style(__sty)
{ }
};
/// Useful constants.
extern const style parent_sty;
extern const style child_sty;
/**
Parent node.
Some characteristics:
- name (text anchor = start ie left).
- background box x and y size
- style info
- (optional) template parameters
*/
struct parent_node : public node_base
{
parent_node(const std::string& __id)
: node_base(__id, node_base::parent, parent_sty)
{ }
};
/**
Child node.
Some characteristics:
- horizontal name (text anchor = start ie left).
- background box
- (optional) template parameters
*/
struct child_node : public node_base
{
child_node(const std::string& __id)
: node_base(__id, node_base::child, child_sty)
{ }
};
/**
DOT "graph" style notation for class inheritance.
This is a compact DOT representation of a single class inheritance.
It is composed of the following data points for each parent
- parent classes
- child classes
- name
Including typographic information to compute line length, and C++
niceities like grouping and overload sets.
It's constructed by creating a digraph, starting from the base node.
*/
struct dot
{
private:
const std::string _M_title;
std::ostringstream _M_sstream;
public:
dot(const std::string &__title)
: _M_title(__title)
{ }
// Empty when the output buffer is.
bool
empty() { return _M_sstream.str().empty(); }
void
start_element();
void
finish_element();
void
add_title();
void
add_node(const node_base&);
void
add_edge(const node_base&, const node_base&);
void
add_parent(const parent_node&);
void
add_child_to_node(const child_node&, const node_base&);
void
write();
void
start()
{
this->start_element();
}
void
finish()
{
this->finish_element();
this->write();
}
};
// XXX connect external xml file to input.
// parse input, pick apart elements, attributes.
}// end namespace abigail
#endif //__ABG_VIZ_DOT_H__