blob: 2d8f3de06fb389603fe266483e67e2f3ff775ae6 [file] [log] [blame]
//===--- Ownership.h - Swift ASTs for Ownership ---------------*- C++ -*-===//
//
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See https://swift.org/LICENSE.txt for license information
// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
//
//===----------------------------------------------------------------------===//
//
// This file defines common structures for working with the different kinds of
// reference ownership supported by Swift, such as 'weak' and 'unowned', as well
// as the different kinds of value ownership, such as 'inout' and '__shared'.
//
//===----------------------------------------------------------------------===//
#ifndef SWIFT_OWNERSHIP_H
#define SWIFT_OWNERSHIP_H
#include <stdint.h>
namespace swift {
/// Different kinds of reference ownership supported by Swift.
// This enum is used in diagnostics. If you add a case here, the diagnostics
// must be updated as well.
enum class ReferenceOwnership : uint8_t {
/// \brief a strong reference (the default semantics)
Strong,
/// \brief a 'weak' reference
Weak,
/// \brief an 'unowned' reference
Unowned,
/// \brief an 'unowned(unsafe)' reference
Unmanaged,
};
/// Different kinds of value ownership supported by Swift.
enum class ValueOwnership : uint8_t {
/// \brief the default ownership (owned)
Default,
/// \brief an 'inout' mutating pointer-like value
InOut,
/// \brief a '__shared' non-mutating pointer-like value
Shared
};
} // end namespace swift
#endif