forked from OSchip/llvm-project
123 lines
3.2 KiB
C++
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;
|
|
}
|