#ifndef IDBKeyRange_h
#define IDBKeyRange_h
#if ENABLE(INDEXED_DATABASE)
#include "Dictionary.h"
#include "IDBKey.h"
#include "ScriptWrappable.h"
#include <wtf/PassRefPtr.h>
#include <wtf/RefCounted.h>
namespace WebCore {
typedef int ExceptionCode;
class IDBKeyRange : public ScriptWrappable, public RefCounted<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));
}
static PassRefPtr<IDBKeyRange> create(PassRefPtr<IDBKey> prpKey);
~IDBKeyRange() { }
PassRefPtr<IDBKey> lower() const { return m_lower; }
PassRefPtr<IDBKey> upper() const { return m_upper; }
ScriptValue lowerValue(ScriptExecutionContext*) const;
ScriptValue upperValue(ScriptExecutionContext*) const;
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> only(ScriptExecutionContext*, const ScriptValue& key, ExceptionCode&);
static PassRefPtr<IDBKeyRange> lowerBound(ScriptExecutionContext* context, const ScriptValue& bound, ExceptionCode& ec) { return lowerBound(context, bound, false, ec); }
static PassRefPtr<IDBKeyRange> lowerBound(ScriptExecutionContext*, const ScriptValue& bound, bool open, ExceptionCode&);
static PassRefPtr<IDBKeyRange> upperBound(ScriptExecutionContext* context, const ScriptValue& bound, ExceptionCode& ec) { return upperBound(context, bound, false, ec); }
static PassRefPtr<IDBKeyRange> upperBound(ScriptExecutionContext*, const ScriptValue& bound, bool open, ExceptionCode&);
static PassRefPtr<IDBKeyRange> bound(ScriptExecutionContext* context, const ScriptValue& lower, const ScriptValue& upper, ExceptionCode& ec) { return bound(context, lower, upper, false, false, ec); }
static PassRefPtr<IDBKeyRange> bound(ScriptExecutionContext* context, const ScriptValue& lower, const ScriptValue& upper, bool lowerOpen, ExceptionCode& ec) { return bound(context, lower, upper, lowerOpen, false, ec); }
static PassRefPtr<IDBKeyRange> bound(ScriptExecutionContext*, const ScriptValue& lower, const ScriptValue& upper, bool lowerOpen, bool upperOpen, ExceptionCode&);
bool isOnlyKey() const;
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