#ifndef DOMStringMap_h
#define DOMStringMap_h
#include "bindings/v8/ExceptionState.h"
#include "bindings/v8/ScriptWrappable.h"
#include "bindings/v8/V8Binding.h"
#include "wtf/Noncopyable.h"
#include "wtf/Vector.h"
#include "wtf/text/WTFString.h"
namespace WebCore {
class Element;
class DOMStringMap : public ScriptWrappable {
WTF_MAKE_NONCOPYABLE(DOMStringMap); WTF_MAKE_FAST_ALLOCATED;
public:
virtual ~DOMStringMap();
virtual void ref() = 0;
virtual void deref() = 0;
virtual void getNames(Vector<String>&) = 0;
virtual String item(const String& name) = 0;
virtual bool contains(const String& name) = 0;
virtual void setItem(const String& name, const String& value, ExceptionState&) = 0;
virtual bool deleteItem(const String& name) = 0;
bool anonymousNamedSetter(const String& name, const String& value, ExceptionState& exceptionState)
{
setItem(name, value, exceptionState);
return true;
}
DeleteResult anonymousNamedDeleter(const AtomicString& name)
{
bool knownProperty = deleteItem(name);
return knownProperty ? DeleteSuccess : DeleteUnknownProperty;
}
void namedPropertyEnumerator(Vector<String>& names, ExceptionState&)
{
getNames(names);
}
bool namedPropertyQuery(const AtomicString&, ExceptionState&);
String anonymousIndexedGetter(uint32_t index)
{
return item(String::number(index));
}
bool anonymousIndexedSetter(uint32_t index, const String& value, ExceptionState& exceptionState)
{
return anonymousNamedSetter(String::number(index), value, exceptionState);
}
DeleteResult anonymousIndexedDeleter(uint32_t index)
{
return anonymousNamedDeleter(AtomicString::number(index));
}
virtual Element* element() = 0;
protected:
DOMStringMap()
{
ScriptWrappable::init(this);
}
};
}
#endif