// Copyright 2015 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 file.

#ifndef TONIC_DART_VALUE_H_
#define TONIC_DART_VALUE_H_

#include "base/logging.h"
#include "dart/runtime/include/dart_api.h"
#include "tonic/dart_persistent_value.h"
#include "tonic/dart_state.h"
#include "sky/engine/wtf/PassRefPtr.h"
#include "sky/engine/wtf/RefCounted.h"
#include "sky/engine/wtf/RefPtr.h"

namespace tonic {

// DartValue is a convience wrapper around DartPersistentValue that lets clients
// use RefPtr to keep track of the number of references to the underlying Dart
// object. Be careful when retaining RefPtr<DartValue> in the heap because the
// VM's garbage collector cannot break cycles that involve the C++ heap, which
// can lead to memory leaks.
class DartValue : public RefCounted<DartValue> {
 public:
  static PassRefPtr<DartValue> Create(DartState* dart_state,
                                      Dart_Handle value) {
    return adoptRef(new DartValue(dart_state, value));
  }

  static PassRefPtr<DartValue> Create() { return adoptRef(new DartValue()); }

  ~DartValue();

  Dart_Handle dart_value() const { return dart_value_.value(); }
  const base::WeakPtr<DartState>& dart_state() const {
      return dart_value_.dart_state();
  }

  bool is_empty() const { return !dart_value(); }

  bool is_null() const {
    DCHECK(!is_empty());
    return Dart_IsNull(dart_value());
  }

  bool is_function() const {
    DCHECK(!is_empty());
    return Dart_IsClosure(dart_value());
  }

  bool Equals(DartValue* other) const;
  void Clear();

 private:
  DartValue();
  DartValue(DartState* dart_state, Dart_Handle value);

  DartPersistentValue dart_value_;

  DISALLOW_COPY_AND_ASSIGN(DartValue);
};

}  // namespace tonic

#endif  // TONIC_DART_VALUE_H_
