llvm-project/lldb/source/Core/Flags.cpp

123 lines
3.2 KiB
C++

//===-- Flags.cpp -----------------------------------------------*- C++ -*-===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
#include "lldb/Core/Flags.h"
using namespace lldb_private;
//----------------------------------------------------------------------
// Default Constructor
//----------------------------------------------------------------------
Flags::Flags (ValueType flags) :
m_flags(flags)
{
}
//----------------------------------------------------------------------
// Copy Constructor
//----------------------------------------------------------------------
Flags::Flags (const Flags& rhs) :
m_flags(rhs.m_flags)
{
}
//----------------------------------------------------------------------
// Virtual destructor in case anyone inherits from this class.
//----------------------------------------------------------------------
Flags::~Flags ()
{
}
//----------------------------------------------------------------------
// Get accessor for all of the current flag bits.
//----------------------------------------------------------------------
Flags::ValueType
Flags::GetAllFlagBits () const
{
return m_flags;
}
size_t
Flags::GetBitSize() const
{
return sizeof (ValueType) * 8;
}
//----------------------------------------------------------------------
// Set accessor for all of the current flag bits.
//----------------------------------------------------------------------
void
Flags::SetAllFlagBits (ValueType flags)
{
m_flags = flags;
}
//----------------------------------------------------------------------
// Clear one or more bits in our flag bits
//----------------------------------------------------------------------
Flags::ValueType
Flags::Clear (ValueType bits)
{
m_flags &= ~bits;
return m_flags;
}
//----------------------------------------------------------------------
// Set one or more bits in our flag bits
//----------------------------------------------------------------------
Flags::ValueType
Flags::Set (ValueType bits)
{
m_flags |= bits;
return m_flags;
}
//----------------------------------------------------------------------
// Returns true if any flag bits in "bits" are set
//----------------------------------------------------------------------
bool
Flags::IsSet (ValueType bits) const
{
return (m_flags & bits) != 0;
}
//----------------------------------------------------------------------
// Returns true if all flag bits in "bits" are clear
//----------------------------------------------------------------------
bool
Flags::IsClear (ValueType bits) const
{
return (m_flags & bits) == 0;
}
size_t
Flags::SetCount () const
{
size_t count = 0;
for (ValueType mask = m_flags; mask; mask >>= 1)
{
if (mask & 1)
++count;
}
return count;
}
size_t
Flags::ClearCount () const
{
size_t count = 0;
for (ValueType shift = 0; shift < sizeof(ValueType)*8; ++shift)
{
if ((m_flags & (1u << shift)) == 0)
++count;
}
return count;
}