blob: b61680502c437bd3b92fdb57bae7bda4c15e3a69 [file] [log] [blame]
John McCutchan080c33e2015-07-16 12:35:35 -07001// Copyright 2015 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include <utility>
6
7#include "tonic/dart_gc_context.h"
8
John McCutchandeace8f2015-07-21 08:01:40 -07009namespace tonic {
John McCutchan080c33e2015-07-16 12:35:35 -070010
11DartGCContext::DartGCContext() : builder_(Dart_NewWeakReferenceSetBuilder()) {
12}
13
14DartGCContext::~DartGCContext() {
15}
16
17Dart_WeakReferenceSet DartGCContext::AddToSetForRoot(
18 const void* root,
19 Dart_WeakPersistentHandle handle) {
20 const auto& result = references_.insert(std::make_pair(root, nullptr));
21 if (!result.second) {
22 // Already present.
23 Dart_AppendToWeakReferenceSet(result.first->second, handle, handle);
24 return result.first->second;
25 }
26 result.first->second = Dart_NewWeakReferenceSet(builder_, handle, handle);
27 return result.first->second;
28}
29
John McCutchandeace8f2015-07-21 08:01:40 -070030} // namespace tonic