#ifndef BidiContext_h
#define BidiContext_h
#include <wtf/Assertions.h>
#include <wtf/RefPtr.h>
#include <wtf/unicode/Unicode.h>
namespace WebCore {
class BidiContext {
public:
BidiContext(unsigned char level, WTF::Unicode::Direction direction, bool override = false, BidiContext* parent = 0)
: m_level(level)
, m_direction(direction)
, m_override(override)
, m_parent(parent)
, m_refCount(0)
{
ASSERT(direction == WTF::Unicode::LeftToRight || direction == WTF::Unicode::RightToLeft);
}
void ref() const { m_refCount++; }
void deref() const
{
m_refCount--;
if (m_refCount <= 0)
delete this;
}
BidiContext* parent() const { return m_parent.get(); }
unsigned char level() const { return m_level; }
WTF::Unicode::Direction dir() const { return static_cast<WTF::Unicode::Direction>(m_direction); }
bool override() const { return m_override; }
private:
unsigned char m_level;
unsigned m_direction : 5; bool m_override : 1;
RefPtr<BidiContext> m_parent;
mutable int m_refCount;
};
bool operator==(const BidiContext&, const BidiContext&);
}
#endif // BidiContext_h