blob: fbcba70edc02810f11ec757052ac997e8a0ebe3a [file] [log] [blame]
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
// -*- Mode: C++ -*-
//
// Copyright (C) 2013-2020 Red Hat, Inc.
/// @file
#include "abg-internal.h"
// <headers defining libabigail's API go under here>
ABG_BEGIN_EXPORT_DECLARATIONS
#include "abg-traverse.h"
ABG_END_EXPORT_DECLARATIONS
// </headers defining libabigail's API>
namespace abigail
{
namespace ir
{
/// Private data type of the @ref traversable_base type.
struct traversable_base::priv
{
bool visiting_;
priv(bool visiting = false)
: visiting_(visiting)
{}
}; // end struct traversable_base::priv
/// Default constructor of the @ref traversable_base type.
traversable_base::traversable_base()
:priv_(new priv)
{}
/// Destructor of the @ref traversable_base type.
traversable_base::~traversable_base()
{}
/// This should returns false before and after the node has been
/// visiting. During the visiting of the node (and of its children)
/// this should return true.
///
/// @return true if the current node is being visited.
bool
traversable_base::visiting() const
{return priv_->visiting_;}
/// The traversing code should be responsible of calling this, not
/// the user code.
///
/// This is the setter of the "visiting" flag of the node being
/// visited. If set to yes, it means the node is being visited.
/// False means either the node has not yet been visited, or it
/// has already been visited.
///
/// @param f the new value of the "visiting" flag.
void
traversable_base::visiting(bool f)
{priv_->visiting_ = f;}
}// end namaspace ir
}// end namespace abigail