1eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Copyright 2013 The Chromium Authors. All rights reserved.
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file.
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#ifndef PPAPI_CPP_VAR_DICTIONARY_H_
6eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#define PPAPI_CPP_VAR_DICTIONARY_H_
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ppapi/c/pp_bool.h"
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ppapi/cpp/var.h"
10eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "ppapi/cpp/var_array.h"
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/// @file
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/// This file defines the API for interacting with dictionary vars.
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace pp {
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
17eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass VarDictionary : public Var {
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /// Constructs a new dictionary var.
20eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  VarDictionary();
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
22eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  /// Constructs a <code>VarDictionary</code> given a var for which
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /// is_dictionary() is true. This will refer to the same dictionary var, but
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /// allow you to access methods specific to dictionary.
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ///
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /// @param[in] var A dictionary var.
27eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  explicit VarDictionary(const Var& var);
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
29eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  /// Constructs a <code>VarDictionary</code> given a <code>PP_Var</code>
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /// of type PP_VARTYPE_DICTIONARY.
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ///
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /// @param[in] var A <code>PP_Var</code> of type PP_VARTYPE_DICTIONARY.
33eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  explicit VarDictionary(const PP_Var& var);
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /// Copy constructor.
36eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  VarDictionary(const VarDictionary& other);
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
38eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  virtual ~VarDictionary();
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /// Assignment operator.
41eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  VarDictionary& operator=(const VarDictionary& other);
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /// The <code>Var</code> assignment operator is overridden here so that we can
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /// check for assigning a non-dictionary var to a
45eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  /// <code>VarDictionary</code>.
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ///
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /// @param[in] other The dictionary var to be assigned.
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ///
49eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  /// @return The resulting <code>VarDictionary</code> (as a
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /// <code>Var</code>&).
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual Var& operator=(const Var& other);
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /// Gets the value associated with the specified key.
542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ///
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /// @param[in] key A string var.
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ///
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /// @return The value that is associated with <code>key</code>. If
582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /// <code>key</code> is not a string var, or it doesn't exist in the
592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /// dictionary, an undefined var is returned.
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  Var Get(const Var& key) const;
612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /// Sets the value associated with the specified key.
632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ///
642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /// @param[in] key A string var. If this key hasn't existed in the dictionary,
652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /// it is added and associated with <code>value</code>; otherwise, the
662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /// previous value is replaced with <code>value</code>.
672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /// @param[in] value The value to set.
682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ///
69eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  /// @return A <code>bool</code> indicating whether the operation succeeds.
70eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  bool Set(const Var& key, const Var& value);
712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /// Deletes the specified key and its associated value, if the key exists.
732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ///
742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /// @param[in] key A string var.
752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void Delete(const Var& key);
762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /// Checks whether a key exists.
782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ///
792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /// @param[in] key A string var.
802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ///
81eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  /// @return A <code>bool</code> indicating whether the key exists.
82eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  bool HasKey(const Var& key) const;
832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /// Gets all the keys in the dictionary.
852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ///
862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /// @return An array var which contains all the keys of the dictionary.
872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /// The elements are string vars. Returns an empty array var if failed.
88eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  VarArray GetKeys() const;
892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace pp
922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
93eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#endif  // PPAPI_CPP_VAR_DICTIONARY_H_
94