48 lines
1.2 KiB
C++

#include "MatcherResult.h"
namespace
{
// The highest bit is the fabricated flag
constexpr unsigned FABRICATED_FLAG_MASK = 1u << (sizeof(unsigned) * 8u - 1u);
constexpr unsigned TOKEN_INDEX_MASK = ~FABRICATED_FLAG_MASK;
} // namespace
MatcherResultTokenIndex::MatcherResultTokenIndex(const unsigned index, const bool isFabricated)
{
m_token_index = index & TOKEN_INDEX_MASK;
if (isFabricated)
m_token_index |= FABRICATED_FLAG_MASK;
}
bool MatcherResultTokenIndex::IsFabricated() const
{
return m_token_index & FABRICATED_FLAG_MASK;
}
unsigned MatcherResultTokenIndex::GetTokenIndex() const
{
return m_token_index & TOKEN_INDEX_MASK;
}
MatcherResultCapture::MatcherResultCapture(const int captureId, const unsigned tokenIndex)
: MatcherResultCapture(captureId, tokenIndex, false)
{
}
MatcherResultCapture::MatcherResultCapture(const int captureId, const unsigned tokenIndex, const bool isFabricated)
: m_capture_id(captureId),
m_token_index(tokenIndex, isFabricated)
{
}
MatcherResultCapture::MatcherResultCapture(const int captureId, const MatcherResultTokenIndex index)
: m_capture_id(captureId),
m_token_index(index)
{
}
int MatcherResultCapture::GetCaptureId() const
{
return m_capture_id;
}