#ifndef IDBKeyRange_h
#define IDBKeyRange_h
#if ENABLE(INDEXED_DATABASE)
#include "Dictionary.h"
#include "IDBKey.h"
#include <wtf/PassRefPtr.h>
#include <wtf/Threading.h>
namespace WebCore {
typedef int ExceptionCode;
class IDBKeyRange : public ThreadSafeRefCounted<IDBKeyRange> {
public:
enum LowerBoundType {
LowerBoundOpen,
LowerBoundClosed
};
enum UpperBoundType {
UpperBoundOpen,
UpperBoundClosed
};
static PassRefPtr<IDBKeyRange> create(PassRefPtr<IDBKey> lower, PassRefPtr<IDBKey> upper, LowerBoundType lowerType, UpperBoundType upperType)
{
return adoptRef(new IDBKeyRange(lower, upper, lowerType, upperType));
}
~IDBKeyRange() { }
PassRefPtr<IDBKey> lower() const { return m_lower; }
PassRefPtr<IDBKey> upper() const { return m_upper; }
bool lowerOpen() const { return m_lowerType == LowerBoundOpen; }
bool upperOpen() const { return m_upperType == UpperBoundOpen; }
static PassRefPtr<IDBKeyRange> only(PassRefPtr<IDBKey> value, ExceptionCode&);
static PassRefPtr<IDBKeyRange> lowerBound(PassRefPtr<IDBKey> bound, ExceptionCode& ec)
{
return lowerBound(bound, false, ec);
}
static PassRefPtr<IDBKeyRange> lowerBound(PassRefPtr<IDBKey> bound, bool open, ExceptionCode&);
static PassRefPtr<IDBKeyRange> upperBound(PassRefPtr<IDBKey> bound, ExceptionCode& ec)
{
return upperBound(bound, false, ec);
}
static PassRefPtr<IDBKeyRange> upperBound(PassRefPtr<IDBKey> bound, bool open, ExceptionCode&);
static PassRefPtr<IDBKeyRange> bound(PassRefPtr<IDBKey> lower, PassRefPtr<IDBKey> upper, ExceptionCode& ec)
{
return bound(lower, upper, false, false, ec);
}
static PassRefPtr<IDBKeyRange> bound(PassRefPtr<IDBKey> lower, PassRefPtr<IDBKey> upper, bool lowerOpen, ExceptionCode& ec)
{
return bound(lower, upper, lowerOpen, false, ec);
}
static PassRefPtr<IDBKeyRange> bound(PassRefPtr<IDBKey> lower, PassRefPtr<IDBKey> upper, bool lowerOpen, bool upperOpen, ExceptionCode&);
private:
IDBKeyRange(PassRefPtr<IDBKey> lower, PassRefPtr<IDBKey> upper, LowerBoundType lowerType, UpperBoundType upperType);
RefPtr<IDBKey> m_lower;
RefPtr<IDBKey> m_upper;
LowerBoundType m_lowerType;
UpperBoundType m_upperType;
};
}
#endif
#endif // IDBKeyRange_h