// Copyright (c) 2019, 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.

part of dart.ffi;

class DartRepresentationOf {
  /// Represents the Dart type corresponding to a [NativeType].
  ///
  /// [Int8]                               -> [int]
  /// [Int16]                              -> [int]
  /// [Int32]                              -> [int]
  /// [Int64]                              -> [int]
  /// [Uint8]                              -> [int]
  /// [Uint16]                             -> [int]
  /// [Uint32]                             -> [int]
  /// [Uint64]                             -> [int]
  /// [IntPtr]                             -> [int]
  /// [Double]                             -> [double]
  /// [Float]                              -> [double]
  /// [Pointer]<T>                         -> [Pointer]<T>
  /// [NativeFunction]<T1 Function(T2, T3) -> S1 Function(S2, S3)
  ///    where DartRepresentationOf(Tn) -> Sn
  /// T extends Struct                  -> T
  const DartRepresentationOf(String nativeType);
}

class Unsized {
  const Unsized();
}

/// This [NativeType] does not have predefined size.
///
/// Unsized NativeTypes do not support [sizeOf] because their size is unknown.
/// Consequently, [Pointer.elementAt] is not available.
const unsized = const Unsized();
