<commit_before>// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE.chromium file.

#ifndef NATIVE_MATE_DICTIONARY_H_
#define NATIVE_MATE_DICTIONARY_H_

#include "native_mate/converter.h"

namespace mate {

// Dictionary is useful when writing bindings for a function that either
// receives an arbitrary JavaScript object as an argument or returns an
// arbitrary JavaScript object as a result. For example, Dictionary is useful
// when you might use the |dictionary| type in WebIDL:
//
//   http://heycam.github.io/webidl/#idl-dictionaries
//
// WARNING: You cannot retain a Dictionary object in the heap. The underlying
//          storage for Dictionary is tied to the closest enclosing
//          v8::HandleScope. Generally speaking, you should store a Dictionary
//          on the stack.
//
class Dictionary {
 public:
  explicit Dictionary(v8::Isolate* isolate);
  Dictionary(v8::Isolate* isolate, v8::Handle<v8::Object> object);
  ~Dictionary();

  static Dictionary CreateEmpty(v8::Isolate* isolate);

  template<typename T>
  bool Get(const std::string& key, T* out) {
    v8::Handle<v8::Value> val = object_->Get(StringToV8(isolate_, key));
    return ConvertFromV8(isolate_, val, out);
  }

  template<typename T>
  bool Set(const std::string& key, T val) {
    return object_->Set(StringToV8(isolate_, key), ConvertToV8(isolate_, val));<commit_msg>Enable setting method in Dictionary.<commit_after>// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE.chromium file.

#ifndef NATIVE_MATE_DICTIONARY_H_
#define NATIVE_MATE_DICTIONARY_H_

#include "native_mate/converter.h"
#include "native_mate/object_template_builder.h"

namespace mate {

// Dictionary is useful when writing bindings for a function that either
// receives an arbitrary JavaScript object as an argument or returns an
// arbitrary JavaScript object as a result. For example, Dictionary is useful
// when you might use the |dictionary| type in WebIDL:
//
//   http://heycam.github.io/webidl/#idl-dictionaries
//
// WARNING: You cannot retain a Dictionary object in the heap. The underlying
//          storage for Dictionary is tied to the closest enclosing
//          v8::HandleScope. Generally speaking, you should store a Dictionary
//          on the stack.
//
class Dictionary {
 public:
  explicit Dictionary(v8::Isolate* isolate);
  Dictionary(v8::Isolate* isolate, v8::Handle<v8::Object> object);
  ~Dictionary();

  static Dictionary CreateEmpty(v8::Isolate* isolate);

  template<typename T>
  bool Get(const base::StringPiece& key, T* out) {
    v8::Handle<v8::Value> val = object_->Get(StringToV8(isolate_, key));
    return ConvertFromV8(isolate_, val, out);
  }

  template<typename T>
  bool Set(const base::StringPiece& key, T val) {
    return object_->Set(StringToV8(isolate_, key), ConvertToV8(isolate_, val));
  }

  template<typename T>
  bool SetMethod(const base::StringPiece& key, const T& callback) {
    return object_->Set(
        StringToV8(isolate_, key),
        CallbackTraits<T>::CreateTemplate(isolate_, callback)->GetFunction());
{'fraction_non_alphanumeric': 0.10346945041449186, 'fraction_numerical': 0.01013202333435677, 'mean_word_length': 4.106583072100314, 'pattern_counts': {'":': 0, '<': 13, '<?xml version=': 0, '>': 19, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '5415185', 'n_tokens_mistral': 974, 'n_tokens_neox': 939, 'n_words': 332}