//
// Copyright (c) 2010, Brian Frank and Andy Frank
// Licensed under the Academic Free License version 3.0
//
// History:
//   10 Aug 19  Andy Frank  Creation
//

**
** Storage models a DOM Storage.
**
** See [pod doc]`pod-doc#win` for details.
**
@Js
class Storage
{

//////////////////////////////////////////////////////////////////////////
// Constrcutor
//////////////////////////////////////////////////////////////////////////

  ** Private ctor.
  private new make() {}

//////////////////////////////////////////////////////////////////////////
// Access
//////////////////////////////////////////////////////////////////////////

  ** Return the number of items in storage.
  native Int size()

  ** Return a list of all keys for this index.
  native Str[] keys()

  ** Return the key value for this index. If the index is greater
  ** than or equal to 'size' returns null.
  native Str? key(Int index)

  ** Return Obj stored under this key, or null if key does not exist.
  @Operator
  native Obj? get(Str key)

  ** Store value under this key.
  @Operator
  native Void set(Str key, Obj val)

  ** Remove value for this key. If no value for this key exists,
  ** this method does nothing.
  native Void remove(Str key)

  ** Remove all items from storage.  If store was empty, this
  ** method does nothing.
  native Void clear()
}