blob: e199a6cadc9b7d7baac09add65a3578c6086065e [file]
// Copyright (c) 2026, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
#include "memory_edge_cases.h"
Node::Node(int value, int* destructorCounter)
: value_(value), destructorCounter_(destructorCounter) {}
Node::~Node() {
if (destructorCounter_ != nullptr) {
(*destructorCounter_)++;
}
}
int Node::getValue() const { return value_; }
NodeManager::NodeManager() {}
int NodeManager::foo(Node* node) {
return node->getValue();
}
Node* NodeManager::getNode(int value, int* destructorCounter) {
return new Node(value, destructorCounter);
}
Node* NodeManager::newNode(int value, int* destructorCounter) {
return new Node(value, destructorCounter);
}
static Node* gSingletonNode = nullptr;
Node* NodeManager::getSingletonNode(int value, int* destructorCounter) {
if (gSingletonNode == nullptr) {
gSingletonNode = new Node(value, destructorCounter);
}
return gSingletonNode;
}
int NodeManager::getValue(Node* node) {
return node->getValue();
}
int NodeManager::takeNode(Node* node) {
int val = node->getValue();
delete node;
return val;
}
std::unique_ptr<Node> NodeManager::makeNode(int value, int* destructorCounter) {
return std::make_unique<Node>(value, destructorCounter);
}
int NodeManager::consumeNode(std::unique_ptr<Node> node) {
return node->getValue();
}
NodeContainer::NodeContainer(std::unique_ptr<Node> node)
: node_(std::move(node)) {}
int NodeContainer::getValue() const {
return node_ ? node_->getValue() : -1;
}