// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

part of zircon;

/// A base class for classes that wrap Handles.
class _HandleWrapper<T> {
  Handle _handle;

  _HandleWrapper(this._handle);

  Handle get handle => _handle;
  bool get isValid => handle?.isValid ?? false;

  void close() {
    _handle.close();
    _handle = null;
  }

  Handle passHandle() {
    final Handle result = _handle;
    _handle = null;
    return result;
  }

  @override
  String toString() => '$runtimeType($handle)';
}

/// A base class for classes that wrap a pair of Handles.
abstract class _HandleWrapperPair<T> {
  final int status;
  final T first;
  final T second;
  _HandleWrapperPair._(this.status, this.first, this.second);
}
