Browse Source

Drop optional support for now

I'm struck on `std::optional:<>:operator=(Ty&&)`, would need to add some code that handles by creating a function for default template arguments but this PR has already become way too large
pull/1904/head
duckdoom5 4 months ago
parent
commit
89f9648fc4
  1. 3
      src/AST/Expr.cs
  2. 54
      src/CppParser/Bindings/CLI/Expr.cpp
  3. 18
      src/CppParser/Bindings/CLI/Expr.h
  4. 57
      src/CppParser/Bindings/CSharp/i686-apple-darwin12.4.0/CppSharp.CppParser.cs
  5. 7
      src/CppParser/Bindings/CSharp/i686-apple-darwin12.4.0/Std-symbols.cpp
  6. 134
      src/CppParser/Bindings/CSharp/i686-apple-darwin12.4.0/Std.cs
  7. 57
      src/CppParser/Bindings/CSharp/i686-pc-win32-msvc-d/CppSharp.CppParser.cs
  8. 4
      src/CppParser/Bindings/CSharp/i686-pc-win32-msvc-d/Std-symbols.cpp
  9. 166
      src/CppParser/Bindings/CSharp/i686-pc-win32-msvc-d/Std.cs
  10. 57
      src/CppParser/Bindings/CSharp/i686-pc-win32-msvc/CppSharp.CppParser.cs
  11. 4
      src/CppParser/Bindings/CSharp/i686-pc-win32-msvc/Std-symbols.cpp
  12. 166
      src/CppParser/Bindings/CSharp/i686-pc-win32-msvc/Std.cs
  13. 57
      src/CppParser/Bindings/CSharp/x86_64-apple-darwin12.4.0/CppSharp.CppParser.cs
  14. 7
      src/CppParser/Bindings/CSharp/x86_64-apple-darwin12.4.0/Std-symbols.cpp
  15. 134
      src/CppParser/Bindings/CSharp/x86_64-apple-darwin12.4.0/Std.cs
  16. 57
      src/CppParser/Bindings/CSharp/x86_64-linux-gnu-cxx11abi/CppSharp.CppParser.cs
  17. 4
      src/CppParser/Bindings/CSharp/x86_64-linux-gnu-cxx11abi/Std-symbols.cpp
  18. 157
      src/CppParser/Bindings/CSharp/x86_64-linux-gnu-cxx11abi/Std.cs
  19. 57
      src/CppParser/Bindings/CSharp/x86_64-linux-gnu/CppSharp.CppParser.cs
  20. 4
      src/CppParser/Bindings/CSharp/x86_64-linux-gnu/Std-symbols.cpp
  21. 157
      src/CppParser/Bindings/CSharp/x86_64-linux-gnu/Std.cs
  22. 57
      src/CppParser/Bindings/CSharp/x86_64-pc-win32-msvc-d/CppSharp.CppParser.cs
  23. 4
      src/CppParser/Bindings/CSharp/x86_64-pc-win32-msvc-d/Std-symbols.cpp
  24. 166
      src/CppParser/Bindings/CSharp/x86_64-pc-win32-msvc-d/Std.cs
  25. 57
      src/CppParser/Bindings/CSharp/x86_64-pc-win32-msvc/CppSharp.CppParser.cs
  26. 4
      src/CppParser/Bindings/CSharp/x86_64-pc-win32-msvc/Std-symbols.cpp
  27. 166
      src/CppParser/Bindings/CSharp/x86_64-pc-win32-msvc/Std.cs
  28. 3
      src/CppParser/Bootstrap/Bootstrap.cs
  29. 3
      src/CppParser/Expr.cpp
  30. 4
      src/CppParser/Expr.h
  31. 3
      src/CppParser/ParseExpr.cpp
  32. 2
      src/CppParser/Parser.cpp
  33. 25
      src/Generator/Passes/IgnoreSystemDeclarationsPass.cs
  34. 1
      src/Generator/Passes/SymbolsCodeGenerator.cs
  35. 104
      src/Generator/Types/Std/Stdlib.CLI.cs
  36. 140
      src/Generator/Types/Std/Stdlib.CSharp.cs
  37. 3
      src/Parser/ASTConverter.Expr.cs

3
src/AST/Expr.cs

@ -2141,7 +2141,6 @@ namespace CppSharp.AST @@ -2141,7 +2141,6 @@ namespace CppSharp.AST
}
public SourceLocation EllipsisLoc { get; set; }
public uint? NumExpansions { get; set; }
public override T Visit<T>(IStmtVisitor<T> visitor) =>
visitor.VisitPackExpansionExpr(this);
@ -2174,7 +2173,6 @@ namespace CppSharp.AST @@ -2174,7 +2173,6 @@ namespace CppSharp.AST
public Expr Replacement { get; set; }
public Declaration AssociatedDecl { get; set; }
public uint Index { get; set; }
public uint? PackIndex { get; set; }
public bool IsReferenceParameter { get; set; }
public override T Visit<T>(IStmtVisitor<T> visitor) =>
@ -2248,7 +2246,6 @@ namespace CppSharp.AST @@ -2248,7 +2246,6 @@ namespace CppSharp.AST
public SourceLocation RParenLoc { get; set; }
public SourceLocation EllipsisLoc { get; set; }
public BinaryOperatorKind Operator { get; set; }
public uint? NumExpansions { get; set; }
public override T Visit<T>(IStmtVisitor<T> visitor) =>
visitor.VisitCXXFoldExpr(this);

54
src/CppParser/Bindings/CLI/Expr.cpp

@ -9722,24 +9722,6 @@ void CppSharp::Parser::AST::PackExpansionExpr::EllipsisLoc::set(CppSharp::Parser @@ -9722,24 +9722,6 @@ void CppSharp::Parser::AST::PackExpansionExpr::EllipsisLoc::set(CppSharp::Parser
((class ::CppSharp::CppParser::AST::PackExpansionExpr*)NativePtr)->ellipsisLoc = _marshal0;
}
System::Nullable<unsigned int> CppSharp::Parser::AST::PackExpansionExpr::NumExpansions::get()
{
if (!((class ::CppSharp::CppParser::AST::PackExpansionExpr*)NativePtr)->numExpansions.has_value())
return {};
return ((class ::CppSharp::CppParser::AST::PackExpansionExpr*)NativePtr)->numExpansions.value();
}
void CppSharp::Parser::AST::PackExpansionExpr::NumExpansions::set(System::Nullable<unsigned int> value)
{
if (!value.HasValue)
{
((class ::CppSharp::CppParser::AST::PackExpansionExpr*)NativePtr)->numExpansions = std::nullopt;
return;
}
((class ::CppSharp::CppParser::AST::PackExpansionExpr*)NativePtr)->numExpansions = value.Value;
}
CppSharp::Parser::AST::SizeOfPackExpr::SizeOfPackExpr(class ::CppSharp::CppParser::AST::SizeOfPackExpr* native)
: CppSharp::Parser::AST::Expr((::CppSharp::CppParser::AST::Expr*)native)
{
@ -9930,24 +9912,6 @@ void CppSharp::Parser::AST::SubstNonTypeTemplateParmExpr::Index::set(unsigned in @@ -9930,24 +9912,6 @@ void CppSharp::Parser::AST::SubstNonTypeTemplateParmExpr::Index::set(unsigned in
((class ::CppSharp::CppParser::AST::SubstNonTypeTemplateParmExpr*)NativePtr)->index = value;
}
System::Nullable<unsigned int> CppSharp::Parser::AST::SubstNonTypeTemplateParmExpr::PackIndex::get()
{
if (!((class ::CppSharp::CppParser::AST::SubstNonTypeTemplateParmExpr*)NativePtr)->packIndex.has_value())
return {};
return ((class ::CppSharp::CppParser::AST::SubstNonTypeTemplateParmExpr*)NativePtr)->packIndex.value();
}
void CppSharp::Parser::AST::SubstNonTypeTemplateParmExpr::PackIndex::set(System::Nullable<unsigned int> value)
{
if (!value.HasValue)
{
((class ::CppSharp::CppParser::AST::SubstNonTypeTemplateParmExpr*)NativePtr)->packIndex = std::nullopt;
return;
}
((class ::CppSharp::CppParser::AST::SubstNonTypeTemplateParmExpr*)NativePtr)->packIndex = value.Value;
}
bool CppSharp::Parser::AST::SubstNonTypeTemplateParmExpr::IsReferenceParameter::get()
{
return ((class ::CppSharp::CppParser::AST::SubstNonTypeTemplateParmExpr*)NativePtr)->isReferenceParameter;
@ -10334,24 +10298,6 @@ void CppSharp::Parser::AST::CXXFoldExpr::Operator::set(CppSharp::Parser::AST::Bi @@ -10334,24 +10298,6 @@ void CppSharp::Parser::AST::CXXFoldExpr::Operator::set(CppSharp::Parser::AST::Bi
((class ::CppSharp::CppParser::AST::CXXFoldExpr*)NativePtr)->_operator = (enum ::CppSharp::CppParser::AST::BinaryOperatorKind)value;
}
System::Nullable<unsigned int> CppSharp::Parser::AST::CXXFoldExpr::NumExpansions::get()
{
if (!((class ::CppSharp::CppParser::AST::CXXFoldExpr*)NativePtr)->numExpansions.has_value())
return {};
return ((class ::CppSharp::CppParser::AST::CXXFoldExpr*)NativePtr)->numExpansions.value();
}
void CppSharp::Parser::AST::CXXFoldExpr::NumExpansions::set(System::Nullable<unsigned int> value)
{
if (!value.HasValue)
{
((class ::CppSharp::CppParser::AST::CXXFoldExpr*)NativePtr)->numExpansions = std::nullopt;
return;
}
((class ::CppSharp::CppParser::AST::CXXFoldExpr*)NativePtr)->numExpansions = value.Value;
}
CppSharp::Parser::AST::CXXParenListInitExpr::CXXParenListInitExpr(class ::CppSharp::CppParser::AST::CXXParenListInitExpr* native)
: CppSharp::Parser::AST::Expr((::CppSharp::CppParser::AST::Expr*)native)
{

18
src/CppParser/Bindings/CLI/Expr.h

@ -5317,12 +5317,6 @@ namespace CppSharp @@ -5317,12 +5317,6 @@ namespace CppSharp
CppSharp::Parser::SourceLocation get();
void set(CppSharp::Parser::SourceLocation);
}
property System::Nullable<unsigned int> NumExpansions
{
System::Nullable<unsigned int> get();
void set(System::Nullable<unsigned int>);
}
};
public ref class SizeOfPackExpr : CppSharp::Parser::AST::Expr
@ -5414,12 +5408,6 @@ namespace CppSharp @@ -5414,12 +5408,6 @@ namespace CppSharp
void set(unsigned int);
}
property System::Nullable<unsigned int> PackIndex
{
System::Nullable<unsigned int> get();
void set(System::Nullable<unsigned int>);
}
property bool IsReferenceParameter
{
bool get();
@ -5613,12 +5601,6 @@ namespace CppSharp @@ -5613,12 +5601,6 @@ namespace CppSharp
CppSharp::Parser::AST::BinaryOperatorKind get();
void set(CppSharp::Parser::AST::BinaryOperatorKind);
}
property System::Nullable<unsigned int> NumExpansions
{
System::Nullable<unsigned int> get();
void set(System::Nullable<unsigned int>);
}
};
public ref class CXXParenListInitExpr : CppSharp::Parser::AST::Expr

57
src/CppParser/Bindings/CSharp/i686-apple-darwin12.4.0/CppSharp.CppParser.cs

@ -40143,7 +40143,7 @@ namespace CppSharp @@ -40143,7 +40143,7 @@ namespace CppSharp
public unsafe partial class PackExpansionExpr : global::CppSharp.Parser.AST.Expr, IDisposable
{
[StructLayout(LayoutKind.Sequential, Size = 64)]
[StructLayout(LayoutKind.Sequential, Size = 56)]
public new partial struct __Internal
{
internal global::CppSharp.Parser.AST.StmtClass stmtClass;
@ -40167,7 +40167,6 @@ namespace CppSharp @@ -40167,7 +40167,6 @@ namespace CppSharp
internal byte refersToMatrixElement;
internal byte hasPlaceholderType;
internal global::CppSharp.Parser.SourceLocation.__Internal ellipsisLoc;
internal global::Std.Optional.__Internal numExpansions;
[SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST17PackExpansionExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
internal static extern void ctor(__IntPtr __instance);
@ -40249,22 +40248,6 @@ namespace CppSharp @@ -40249,22 +40248,6 @@ namespace CppSharp
((__Internal*)__Instance)->ellipsisLoc = value.__Instance;
}
}
public System.Nullable<uint> NumExpansions
{
get
{
var __optionalRet0 = global::Std.Optional<uint>.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->numExpansions));
if (!__optionalRet0.HasValue)
return null;
return global::Std.OptionalExtensions.Value(__optionalRet0);
}
set
{
throw new System.NotImplementedException("Setting std::optional is currently not supported");
}
}
}
public unsafe partial class SizeOfPackExpr : global::CppSharp.Parser.AST.Expr, IDisposable
@ -40449,7 +40432,7 @@ namespace CppSharp @@ -40449,7 +40432,7 @@ namespace CppSharp
public unsafe partial class SubstNonTypeTemplateParmExpr : global::CppSharp.Parser.AST.Expr, IDisposable
{
[StructLayout(LayoutKind.Sequential, Size = 80)]
[StructLayout(LayoutKind.Sequential, Size = 72)]
public new partial struct __Internal
{
internal global::CppSharp.Parser.AST.StmtClass stmtClass;
@ -40476,7 +40459,6 @@ namespace CppSharp @@ -40476,7 +40459,6 @@ namespace CppSharp
internal __IntPtr replacement;
internal __IntPtr associatedDecl;
internal uint index;
internal global::Std.Optional.__Internal packIndex;
internal byte isReferenceParameter;
[SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST28SubstNonTypeTemplateParmExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
@ -40601,22 +40583,6 @@ namespace CppSharp @@ -40601,22 +40583,6 @@ namespace CppSharp
}
}
public System.Nullable<uint> PackIndex
{
get
{
var __optionalRet0 = global::Std.Optional<uint>.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->packIndex));
if (!__optionalRet0.HasValue)
return null;
return global::Std.OptionalExtensions.Value(__optionalRet0);
}
set
{
throw new System.NotImplementedException("Setting std::optional is currently not supported");
}
}
public bool IsReferenceParameter
{
get
@ -41048,7 +41014,7 @@ namespace CppSharp @@ -41048,7 +41014,7 @@ namespace CppSharp
public unsafe partial class CXXFoldExpr : global::CppSharp.Parser.AST.Expr, IDisposable
{
[StructLayout(LayoutKind.Sequential, Size = 100)]
[StructLayout(LayoutKind.Sequential, Size = 92)]
public new partial struct __Internal
{
internal global::CppSharp.Parser.AST.StmtClass stmtClass;
@ -41082,7 +41048,6 @@ namespace CppSharp @@ -41082,7 +41048,6 @@ namespace CppSharp
internal global::CppSharp.Parser.SourceLocation.__Internal rParenLoc;
internal global::CppSharp.Parser.SourceLocation.__Internal ellipsisLoc;
internal global::CppSharp.Parser.AST.BinaryOperatorKind _operator;
internal global::Std.Optional.__Internal numExpansions;
[SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11CXXFoldExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
internal static extern void ctor(__IntPtr __instance);
@ -41307,22 +41272,6 @@ namespace CppSharp @@ -41307,22 +41272,6 @@ namespace CppSharp
((__Internal*)__Instance)->_operator = value;
}
}
public System.Nullable<uint> NumExpansions
{
get
{
var __optionalRet0 = global::Std.Optional<uint>.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->numExpansions));
if (!__optionalRet0.HasValue)
return null;
return global::Std.OptionalExtensions.Value(__optionalRet0);
}
set
{
throw new System.NotImplementedException("Setting std::optional is currently not supported");
}
}
}
public unsafe partial class CXXParenListInitExpr : global::CppSharp.Parser.AST.Expr, IDisposable

7
src/CppParser/Bindings/CSharp/i686-apple-darwin12.4.0/Std-symbols.cpp

@ -2,9 +2,10 @@ @@ -2,9 +2,10 @@
#define _LIBCPP_HIDE_FROM_ABI
#include <string>
#include <optional>
#include <new>
template std::allocator<char>::allocator() noexcept;
template std::optional<unsigned int>::optional() noexcept;
template const unsigned int&& std::optional<unsigned int>::value() const&&;
template std::basic_string<char, std::char_traits<char>, std::allocator<char>>::basic_string() noexcept(true);
template std::basic_string<char, std::char_traits<char>, std::allocator<char>>::~basic_string() noexcept;
template std::basic_string<char, std::char_traits<char>, std::allocator<char>>& std::basic_string<char, std::char_traits<char>, std::allocator<char>>::assign(const char*);
template const char* std::basic_string<char, std::char_traits<char>, std::allocator<char>>::data() const noexcept;

134
src/CppParser/Bindings/CSharp/i686-apple-darwin12.4.0/Std.cs

@ -34,10 +34,6 @@ namespace Std @@ -34,10 +34,6 @@ namespace Std
{
}
namespace Std
{
}
namespace Std
{
namespace CompressedPair
@ -311,14 +307,27 @@ namespace Std @@ -311,14 +307,27 @@ namespace Std
public unsafe partial struct __Internalc__N_std_N___1_S_basic_string__C___N_std_N___1_S_char_traits__C___N_std_N___1_S_allocator__C
{
internal global::Std.CompressedPair.__Internalc__N_std_N___1_S___compressed_pair____N_std_N___1_S_basic_string__C___N_std_N___1_S_char_traits__C___N_std_N___1_S_allocator__C_S___rep_S2_ __r_;
[SuppressUnmanagedCodeSecurity, DllImport("Std-symbols", EntryPoint = "_ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2Ev", CallingConvention = __CallingConvention.Cdecl)]
internal static extern void ctorc__N_std_N___1_S_basic_string__C___N_std_N___1_S_char_traits__C___N_std_N___1_S_allocator__C(__IntPtr __instance);
[SuppressUnmanagedCodeSecurity, DllImport("Std-symbols", EntryPoint = "_ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED2Ev", CallingConvention = __CallingConvention.Cdecl)]
internal static extern void dtorc__N_std_N___1_S_basic_string__C___N_std_N___1_S_char_traits__C___N_std_N___1_S_allocator__C(__IntPtr __instance);
}
namespace Rep
{
[StructLayout(LayoutKind.Sequential, Size = 12)]
[StructLayout(LayoutKind.Explicit, Size = 12)]
public unsafe partial struct __Internalc__N_std_N___1_S_basic_string__C___N_std_N___1_S_char_traits__C___N_std_N___1_S_allocator__C
{
internal global::Std.BasicString.Rep._0.__Internal _0;
[FieldOffset(0)]
internal global::Std.BasicString.Long.__Internal __l;
[FieldOffset(0)]
internal global::Std.BasicString.Short.__Internalc__N_std_N___1_S_basic_string__C___N_std_N___1_S_char_traits__C___N_std_N___1_S_allocator__C __s;
[FieldOffset(0)]
internal global::Std.BasicString.Raw.__Internal __r;
}
namespace _0
@ -354,10 +363,16 @@ namespace Std @@ -354,10 +363,16 @@ namespace Std
namespace Short
{
[StructLayout(LayoutKind.Sequential, Size = 12)]
[StructLayout(LayoutKind.Explicit, Size = 12)]
public unsafe partial struct __Internalc__N_std_N___1_S_basic_string__C___N_std_N___1_S_char_traits__C___N_std_N___1_S_allocator__C
{
internal global::Std.BasicString.Short._0.__Internal _0;
[FieldOffset(0)]
internal byte __size_;
[FieldOffset(0)]
internal sbyte __lx;
[FieldOffset(1)]
internal fixed sbyte __data_[11];
}
@ -387,42 +402,20 @@ namespace Std @@ -387,42 +402,20 @@ namespace Std
}
}
}
namespace Std
{
namespace Optional
{
[StructLayout(LayoutKind.Explicit, Size = 8)]
public unsafe partial struct __Internal
{
[FieldOffset(0)]
internal sbyte __null_state_;
[FieldOffset(0)]
internal uint __val_;
[FieldOffset(4)]
internal byte __engaged_;
[SuppressUnmanagedCodeSecurity, DllImport("Std-symbols", EntryPoint = "_ZNSt3__18optionalIjEC2Ev", CallingConvention = __CallingConvention.Cdecl)]
internal static extern void ctorc__N_std_N___1_S_optional__i(__IntPtr __instance);
}
}
public unsafe partial class Optional<_Tp> : IDisposable
public unsafe partial class BasicString<_CharT, _Traits, _Allocator> : IDisposable
{
public __IntPtr __Instance { get; protected set; }
internal static readonly new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::Std.Optional<_Tp>> NativeToManagedMap =
new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::Std.Optional<_Tp>>();
internal static readonly new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::Std.BasicString<_CharT, _Traits, _Allocator>> NativeToManagedMap =
new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::Std.BasicString<_CharT, _Traits, _Allocator>>();
internal static void __RecordNativeToManagedMapping(IntPtr native, global::Std.Optional<_Tp> managed)
internal static void __RecordNativeToManagedMapping(IntPtr native, global::Std.BasicString<_CharT, _Traits, _Allocator> managed)
{
NativeToManagedMap[native] = managed;
}
internal static bool __TryGetNativeToManagedMapping(IntPtr native, out global::Std.Optional<_Tp> managed)
internal static bool __TryGetNativeToManagedMapping(IntPtr native, out global::Std.BasicString<_CharT, _Traits, _Allocator> managed)
{
return NativeToManagedMap.TryGetValue(native, out managed);
@ -430,63 +423,65 @@ namespace Std @@ -430,63 +423,65 @@ namespace Std
protected bool __ownsNativeInstance;
internal static Optional<_Tp> __CreateInstance(__IntPtr native, bool skipVTables = false)
internal static BasicString<_CharT, _Traits, _Allocator> __CreateInstance(__IntPtr native, bool skipVTables = false)
{
if (native == __IntPtr.Zero)
return null;
return new Optional<_Tp>(native.ToPointer(), skipVTables);
return new BasicString<_CharT, _Traits, _Allocator>(native.ToPointer(), skipVTables);
}
internal static Optional<_Tp> __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
internal static BasicString<_CharT, _Traits, _Allocator> __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
{
if (native == __IntPtr.Zero)
return null;
if (__TryGetNativeToManagedMapping(native, out var managed))
return (Optional<_Tp>)managed;
return (BasicString<_CharT, _Traits, _Allocator>)managed;
var result = __CreateInstance(native, skipVTables);
if (saveInstance)
__RecordNativeToManagedMapping(native, result);
return result;
}
internal static Optional<_Tp> __CreateInstance(global::Std.Optional.__Internal native, bool skipVTables = false)
internal static BasicString<_CharT, _Traits, _Allocator> __CreateInstance(global::Std.BasicString.__Internalc__N_std_N___1_S_basic_string__C___N_std_N___1_S_char_traits__C___N_std_N___1_S_allocator__C native, bool skipVTables = false)
{
return new Optional<_Tp>(native, skipVTables);
return new BasicString<_CharT, _Traits, _Allocator>(native, skipVTables);
}
private static void* __CopyValue(global::Std.Optional.__Internal native)
private static void* __CopyValue(global::Std.BasicString.__Internalc__N_std_N___1_S_basic_string__C___N_std_N___1_S_char_traits__C___N_std_N___1_S_allocator__C native)
{
var ret = Marshal.AllocHGlobal(sizeof(global::Std.Optional.__Internal));
*(global::Std.Optional.__Internal*) ret = native;
var ret = Marshal.AllocHGlobal(sizeof(global::Std.BasicString.__Internalc__N_std_N___1_S_basic_string__C___N_std_N___1_S_char_traits__C___N_std_N___1_S_allocator__C));
*(global::Std.BasicString.__Internalc__N_std_N___1_S_basic_string__C___N_std_N___1_S_char_traits__C___N_std_N___1_S_allocator__C*) ret = native;
return ret.ToPointer();
}
private Optional(global::Std.Optional.__Internal native, bool skipVTables = false)
private BasicString(global::Std.BasicString.__Internalc__N_std_N___1_S_basic_string__C___N_std_N___1_S_char_traits__C___N_std_N___1_S_allocator__C native, bool skipVTables = false)
: this(__CopyValue(native), skipVTables)
{
__ownsNativeInstance = true;
__RecordNativeToManagedMapping(__Instance, this);
}
protected Optional(void* native, bool skipVTables = false)
protected BasicString(void* native, bool skipVTables = false)
{
if (native == null)
return;
__Instance = new __IntPtr(native);
}
public Optional()
public BasicString()
{
var ___Tp = typeof(_Tp);
if (___Tp.IsAssignableFrom(typeof(uint)))
var ___CharT = typeof(_CharT);
var ___Traits = typeof(_Traits);
var ___Allocator = typeof(_Allocator);
if (___CharT.IsAssignableFrom(typeof(sbyte)) && ___Traits.IsAssignableFrom(typeof(global::Std.CharTraits<sbyte>)) && ___Allocator.IsAssignableFrom(typeof(global::Std.Allocator<sbyte>)))
{
__Instance = Marshal.AllocHGlobal(sizeof(global::Std.Optional.__Internal));
__Instance = Marshal.AllocHGlobal(sizeof(global::Std.BasicString.__Internalc__N_std_N___1_S_basic_string__C___N_std_N___1_S_char_traits__C___N_std_N___1_S_allocator__C));
__ownsNativeInstance = true;
__RecordNativeToManagedMapping(__Instance, this);
global::Std.Optional.__Internal.ctorc__N_std_N___1_S_optional__i(__Instance);
global::Std.BasicString.__Internalc__N_std_N___1_S_basic_string__C___N_std_N___1_S_char_traits__C___N_std_N___1_S_allocator__C.ctorc__N_std_N___1_S_basic_string__C___N_std_N___1_S_char_traits__C___N_std_N___1_S_allocator__C(__Instance);
return;
}
throw new ArgumentOutOfRangeException("_Tp", string.Join(", ", new[] { typeof(_Tp).FullName }), "global::Std.Optional<_Tp> maps a C++ template class and therefore it only supports a limited set of types and their subclasses: <uint>.");
throw new ArgumentOutOfRangeException("_CharT, _Traits, _Allocator", string.Join(", ", new[] { typeof(_CharT).FullName, typeof(_Traits).FullName, typeof(_Allocator).FullName }), "global::Std.BasicString<_CharT, _Traits, _Allocator> maps a C++ template class and therefore it only supports a limited set of types and their subclasses: <sbyte, global::Std.CharTraits<sbyte>, global::Std.Allocator<sbyte>>.");
}
public void Dispose()
@ -502,25 +497,48 @@ namespace Std @@ -502,25 +497,48 @@ namespace Std
return;
NativeToManagedMap.TryRemove(__Instance, out _);
DisposePartial(disposing);
if (callNativeDtor)
{
var ___CharT = typeof(_CharT);
var ___Traits = typeof(_Traits);
var ___Allocator = typeof(_Allocator);
if (___CharT.IsAssignableFrom(typeof(sbyte)) && ___Traits.IsAssignableFrom(typeof(global::Std.CharTraits<sbyte>)) && ___Allocator.IsAssignableFrom(typeof(global::Std.Allocator<sbyte>)))
{
global::Std.BasicString.__Internalc__N_std_N___1_S_basic_string__C___N_std_N___1_S_char_traits__C___N_std_N___1_S_allocator__C.dtorc__N_std_N___1_S_basic_string__C___N_std_N___1_S_char_traits__C___N_std_N___1_S_allocator__C(__Instance);
return;
}
throw new ArgumentOutOfRangeException("_CharT, _Traits, _Allocator", string.Join(", ", new[] { typeof(_CharT).FullName, typeof(_Traits).FullName, typeof(_Allocator).FullName }), "global::Std.BasicString<_CharT, _Traits, _Allocator> maps a C++ template class and therefore it only supports a limited set of types and their subclasses: <sbyte, global::Std.CharTraits<sbyte>, global::Std.Allocator<sbyte>>.");
}
if (__ownsNativeInstance)
Marshal.FreeHGlobal(__Instance);
__Instance = IntPtr.Zero;
}
}
public unsafe static partial class OptionalExtensions
public unsafe static partial class BasicStringExtensions
{
public partial struct __Internal
{
[SuppressUnmanagedCodeSecurity, DllImport("Std-symbols", EntryPoint = "_ZNKOSt3__18optionalIjE5valueEv", CallingConvention = __CallingConvention.Cdecl)]
internal static extern uint* Value(__IntPtr __instance);
[SuppressUnmanagedCodeSecurity, DllImport("Std-symbols", EntryPoint = "_ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignEPKc", CallingConvention = __CallingConvention.Cdecl)]
internal static extern __IntPtr Assign(__IntPtr __instance, [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(CppSharp.Runtime.UTF8Marshaller))] string __s);
[SuppressUnmanagedCodeSecurity, DllImport("Std-symbols", EntryPoint = "_ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4dataEv", CallingConvention = __CallingConvention.Cdecl)]
internal static extern __IntPtr Data(__IntPtr __instance);
}
public static global::Std.BasicString<sbyte, global::Std.CharTraits<sbyte>, global::Std.Allocator<sbyte>> Assign(this global::Std.BasicString<sbyte, global::Std.CharTraits<sbyte>, global::Std.Allocator<sbyte>> @this, string __s)
{
var __arg0 = @this is null ? __IntPtr.Zero : @this.__Instance;
var ___ret = __Internal.Assign(__arg0, __s);
var __result0 = global::Std.BasicString<sbyte, global::Std.CharTraits<sbyte>, global::Std.Allocator<sbyte>>.__GetOrCreateInstance(___ret, false);
return __result0;
}
public static uint Value(this global::Std.Optional<uint> @this)
public static string Data(this global::Std.BasicString<sbyte, global::Std.CharTraits<sbyte>, global::Std.Allocator<sbyte>> @this)
{
var __arg0 = @this is null ? __IntPtr.Zero : @this.__Instance;
var ___ret = __Internal.Value(__arg0);
return *___ret;
var ___ret = __Internal.Data(__arg0);
return CppSharp.Runtime.MarshalUtil.GetString(global::System.Text.Encoding.UTF8, ___ret);
}
}
}

57
src/CppParser/Bindings/CSharp/i686-pc-win32-msvc-d/CppSharp.CppParser.cs

@ -40146,7 +40146,7 @@ namespace CppSharp @@ -40146,7 +40146,7 @@ namespace CppSharp
public unsafe partial class PackExpansionExpr : global::CppSharp.Parser.AST.Expr, IDisposable
{
[StructLayout(LayoutKind.Sequential, Size = 64)]
[StructLayout(LayoutKind.Sequential, Size = 56)]
public new partial struct __Internal
{
internal global::CppSharp.Parser.AST.StmtClass stmtClass;
@ -40170,7 +40170,6 @@ namespace CppSharp @@ -40170,7 +40170,6 @@ namespace CppSharp
internal byte refersToMatrixElement;
internal byte hasPlaceholderType;
internal global::CppSharp.Parser.SourceLocation.__Internal ellipsisLoc;
internal global::Std.Optional.__Internal numExpansions;
[SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser.dll", EntryPoint = "??0PackExpansionExpr@AST@CppParser@CppSharp@@QAE@XZ", CallingConvention = __CallingConvention.ThisCall)]
internal static extern __IntPtr ctor(__IntPtr __instance);
@ -40252,22 +40251,6 @@ namespace CppSharp @@ -40252,22 +40251,6 @@ namespace CppSharp
((__Internal*)__Instance)->ellipsisLoc = value.__Instance;
}
}
public System.Nullable<uint> NumExpansions
{
get
{
var __optionalRet0 = global::Std.Optional<uint>.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->numExpansions));
if (!__optionalRet0.HasValue)
return null;
return global::Std.OptionalExtensions.Value(__optionalRet0);
}
set
{
throw new System.NotImplementedException("Setting std::optional is currently not supported");
}
}
}
public unsafe partial class SizeOfPackExpr : global::CppSharp.Parser.AST.Expr, IDisposable
@ -40452,7 +40435,7 @@ namespace CppSharp @@ -40452,7 +40435,7 @@ namespace CppSharp
public unsafe partial class SubstNonTypeTemplateParmExpr : global::CppSharp.Parser.AST.Expr, IDisposable
{
[StructLayout(LayoutKind.Sequential, Size = 80)]
[StructLayout(LayoutKind.Sequential, Size = 72)]
public new partial struct __Internal
{
internal global::CppSharp.Parser.AST.StmtClass stmtClass;
@ -40479,7 +40462,6 @@ namespace CppSharp @@ -40479,7 +40462,6 @@ namespace CppSharp
internal __IntPtr replacement;
internal __IntPtr associatedDecl;
internal uint index;
internal global::Std.Optional.__Internal packIndex;
internal byte isReferenceParameter;
[SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser.dll", EntryPoint = "??0SubstNonTypeTemplateParmExpr@AST@CppParser@CppSharp@@QAE@XZ", CallingConvention = __CallingConvention.ThisCall)]
@ -40604,22 +40586,6 @@ namespace CppSharp @@ -40604,22 +40586,6 @@ namespace CppSharp
}
}
public System.Nullable<uint> PackIndex
{
get
{
var __optionalRet0 = global::Std.Optional<uint>.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->packIndex));
if (!__optionalRet0.HasValue)
return null;
return global::Std.OptionalExtensions.Value(__optionalRet0);
}
set
{
throw new System.NotImplementedException("Setting std::optional is currently not supported");
}
}
public bool IsReferenceParameter
{
get
@ -41051,7 +41017,7 @@ namespace CppSharp @@ -41051,7 +41017,7 @@ namespace CppSharp
public unsafe partial class CXXFoldExpr : global::CppSharp.Parser.AST.Expr, IDisposable
{
[StructLayout(LayoutKind.Sequential, Size = 100)]
[StructLayout(LayoutKind.Sequential, Size = 92)]
public new partial struct __Internal
{
internal global::CppSharp.Parser.AST.StmtClass stmtClass;
@ -41085,7 +41051,6 @@ namespace CppSharp @@ -41085,7 +41051,6 @@ namespace CppSharp
internal global::CppSharp.Parser.SourceLocation.__Internal rParenLoc;
internal global::CppSharp.Parser.SourceLocation.__Internal ellipsisLoc;
internal global::CppSharp.Parser.AST.BinaryOperatorKind _operator;
internal global::Std.Optional.__Internal numExpansions;
[SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser.dll", EntryPoint = "??0CXXFoldExpr@AST@CppParser@CppSharp@@QAE@XZ", CallingConvention = __CallingConvention.ThisCall)]
internal static extern __IntPtr ctor(__IntPtr __instance);
@ -41310,22 +41275,6 @@ namespace CppSharp @@ -41310,22 +41275,6 @@ namespace CppSharp
((__Internal*)__Instance)->_operator = value;
}
}
public System.Nullable<uint> NumExpansions
{
get
{
var __optionalRet0 = global::Std.Optional<uint>.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->numExpansions));
if (!__optionalRet0.HasValue)
return null;
return global::Std.OptionalExtensions.Value(__optionalRet0);
}
set
{
throw new System.NotImplementedException("Setting std::optional is currently not supported");
}
}
}
public unsafe partial class CXXParenListInitExpr : global::CppSharp.Parser.AST.Expr, IDisposable

4
src/CppParser/Bindings/CSharp/i686-pc-win32-msvc-d/Std-symbols.cpp

@ -2,7 +2,6 @@ @@ -2,7 +2,6 @@
#define _LIBCPP_HIDE_FROM_ABI
#include <string>
#include <optional>
#include <new>
template __declspec(dllexport) std::allocator<char>::allocator() noexcept;
@ -10,6 +9,3 @@ template __declspec(dllexport) std::basic_string<char, std::char_traits<char>, s @@ -10,6 +9,3 @@ template __declspec(dllexport) std::basic_string<char, std::char_traits<char>, s
template __declspec(dllexport) std::basic_string<char, std::char_traits<char>, std::allocator<char>>::~basic_string() noexcept;
template __declspec(dllexport) std::basic_string<char, std::char_traits<char>, std::allocator<char>>& std::basic_string<char, std::char_traits<char>, std::allocator<char>>::assign(const char* const);
template __declspec(dllexport) const char* std::basic_string<char, std::char_traits<char>, std::allocator<char>>::data() const noexcept;
template __declspec(dllexport) std::optional<unsigned int>::optional() noexcept;
template __declspec(dllexport) bool std::optional<unsigned int>::has_value() const noexcept;
template __declspec(dllexport) const unsigned int&& std::optional<unsigned int>::value() const&&;

166
src/CppParser/Bindings/CSharp/i686-pc-win32-msvc-d/Std.cs

@ -48,10 +48,6 @@ namespace Std @@ -48,10 +48,6 @@ namespace Std
}
}
namespace Std
{
}
namespace Std
{
namespace CompressedPair
@ -495,165 +491,3 @@ namespace Std @@ -495,165 +491,3 @@ namespace Std
}
}
}
namespace Std
{
namespace Optional
{
[StructLayout(LayoutKind.Explicit, Size = 8, Pack = 8)]
public unsafe partial struct __Internal
{
[FieldOffset(0)]
internal global::Std.NontrivialDummyType.__Internal _Dummy;
[FieldOffset(0)]
internal uint _Value;
[FieldOffset(4)]
internal byte _Has_value;
[SuppressUnmanagedCodeSecurity, DllImport("Std-symbols", EntryPoint = "??0?$optional@I@std@@QAE@XZ", CallingConvention = __CallingConvention.ThisCall)]
internal static extern __IntPtr ctorc__N_std_S_optional__i(__IntPtr __instance);
[SuppressUnmanagedCodeSecurity, DllImport("Std-symbols", EntryPoint = "?has_value@?$optional@I@std@@QBE_NXZ", CallingConvention = __CallingConvention.ThisCall)]
[return: MarshalAs(UnmanagedType.I1)]
internal static extern bool HasValuec__N_std_S_optional__i(__IntPtr __instance);
}
}
public unsafe partial class Optional<_Ty> : IDisposable
{
public __IntPtr __Instance { get; protected set; }
internal static readonly new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::Std.Optional<_Ty>> NativeToManagedMap =
new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::Std.Optional<_Ty>>();
internal static void __RecordNativeToManagedMapping(IntPtr native, global::Std.Optional<_Ty> managed)
{
NativeToManagedMap[native] = managed;
}
internal static bool __TryGetNativeToManagedMapping(IntPtr native, out global::Std.Optional<_Ty> managed)
{
return NativeToManagedMap.TryGetValue(native, out managed);
}
protected bool __ownsNativeInstance;
internal static Optional<_Ty> __CreateInstance(__IntPtr native, bool skipVTables = false)
{
if (native == __IntPtr.Zero)
return null;
return new Optional<_Ty>(native.ToPointer(), skipVTables);
}
internal static Optional<_Ty> __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
{
if (native == __IntPtr.Zero)
return null;
if (__TryGetNativeToManagedMapping(native, out var managed))
return (Optional<_Ty>)managed;
var result = __CreateInstance(native, skipVTables);
if (saveInstance)
__RecordNativeToManagedMapping(native, result);
return result;
}
internal static Optional<_Ty> __CreateInstance(global::Std.Optional.__Internal native, bool skipVTables = false)
{
return new Optional<_Ty>(native, skipVTables);
}
private static void* __CopyValue(global::Std.Optional.__Internal native)
{
var ret = Marshal.AllocHGlobal(sizeof(global::Std.Optional.__Internal));
*(global::Std.Optional.__Internal*) ret = native;
return ret.ToPointer();
}
private Optional(global::Std.Optional.__Internal native, bool skipVTables = false)
: this(__CopyValue(native), skipVTables)
{
__ownsNativeInstance = true;
__RecordNativeToManagedMapping(__Instance, this);
}
protected Optional(void* native, bool skipVTables = false)
{
if (native == null)
return;
__Instance = new __IntPtr(native);
}
public Optional()
{
var ___Ty = typeof(_Ty);
if (___Ty.IsAssignableFrom(typeof(uint)))
{
__Instance = Marshal.AllocHGlobal(sizeof(global::Std.Optional.__Internal));
__ownsNativeInstance = true;
__RecordNativeToManagedMapping(__Instance, this);
global::Std.Optional.__Internal.ctorc__N_std_S_optional__i(__Instance);
return;
}
throw new ArgumentOutOfRangeException("_Ty", string.Join(", ", new[] { typeof(_Ty).FullName }), "global::Std.Optional<_Ty> maps a C++ template class and therefore it only supports a limited set of types and their subclasses: <uint>.");
}
public void Dispose()
{
Dispose(disposing: true, callNativeDtor: __ownsNativeInstance);
}
partial void DisposePartial(bool disposing);
internal protected virtual void Dispose(bool disposing, bool callNativeDtor)
{
if (__Instance == IntPtr.Zero)
return;
NativeToManagedMap.TryRemove(__Instance, out _);
DisposePartial(disposing);
if (__ownsNativeInstance)
Marshal.FreeHGlobal(__Instance);
__Instance = IntPtr.Zero;
}
public bool HasValue
{
get
{
var ___Ty = typeof(_Ty);
if (___Ty.IsAssignableFrom(typeof(uint)))
{
var ___ret = global::Std.Optional.__Internal.HasValuec__N_std_S_optional__i(__Instance);
return ___ret;
}
throw new ArgumentOutOfRangeException("_Ty", string.Join(", ", new[] { typeof(_Ty).FullName }), "global::Std.Optional<_Ty> maps a C++ template class and therefore it only supports a limited set of types and their subclasses: <uint>.");
}
}
}
public unsafe static partial class NontrivialDummyType
{
[StructLayout(LayoutKind.Sequential, Size = 1, Pack = 8)]
public partial struct __Internal
{
}
}
public unsafe static partial class OptionalExtensions
{
public partial struct __Internal
{
[SuppressUnmanagedCodeSecurity, DllImport("Std-symbols", EntryPoint = "?value@?$optional@I@std@@QHBE$$QBIXZ", CallingConvention = __CallingConvention.ThisCall)]
internal static extern uint* Value(__IntPtr __instance);
}
public static uint Value(this global::Std.Optional<uint> @this)
{
var __arg0 = @this is null ? __IntPtr.Zero : @this.__Instance;
var ___ret = __Internal.Value(__arg0);
return *___ret;
}
}
}

57
src/CppParser/Bindings/CSharp/i686-pc-win32-msvc/CppSharp.CppParser.cs

@ -40146,7 +40146,7 @@ namespace CppSharp @@ -40146,7 +40146,7 @@ namespace CppSharp
public unsafe partial class PackExpansionExpr : global::CppSharp.Parser.AST.Expr, IDisposable
{
[StructLayout(LayoutKind.Sequential, Size = 64)]
[StructLayout(LayoutKind.Sequential, Size = 56)]
public new partial struct __Internal
{
internal global::CppSharp.Parser.AST.StmtClass stmtClass;
@ -40170,7 +40170,6 @@ namespace CppSharp @@ -40170,7 +40170,6 @@ namespace CppSharp
internal byte refersToMatrixElement;
internal byte hasPlaceholderType;
internal global::CppSharp.Parser.SourceLocation.__Internal ellipsisLoc;
internal global::Std.Optional.__Internal numExpansions;
[SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser.dll", EntryPoint = "??0PackExpansionExpr@AST@CppParser@CppSharp@@QAE@XZ", CallingConvention = __CallingConvention.ThisCall)]
internal static extern __IntPtr ctor(__IntPtr __instance);
@ -40252,22 +40251,6 @@ namespace CppSharp @@ -40252,22 +40251,6 @@ namespace CppSharp
((__Internal*)__Instance)->ellipsisLoc = value.__Instance;
}
}
public System.Nullable<uint> NumExpansions
{
get
{
var __optionalRet0 = global::Std.Optional<uint>.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->numExpansions));
if (!__optionalRet0.HasValue)
return null;
return global::Std.OptionalExtensions.Value(__optionalRet0);
}
set
{
throw new System.NotImplementedException("Setting std::optional is currently not supported");
}
}
}
public unsafe partial class SizeOfPackExpr : global::CppSharp.Parser.AST.Expr, IDisposable
@ -40452,7 +40435,7 @@ namespace CppSharp @@ -40452,7 +40435,7 @@ namespace CppSharp
public unsafe partial class SubstNonTypeTemplateParmExpr : global::CppSharp.Parser.AST.Expr, IDisposable
{
[StructLayout(LayoutKind.Sequential, Size = 80)]
[StructLayout(LayoutKind.Sequential, Size = 72)]
public new partial struct __Internal
{
internal global::CppSharp.Parser.AST.StmtClass stmtClass;
@ -40479,7 +40462,6 @@ namespace CppSharp @@ -40479,7 +40462,6 @@ namespace CppSharp
internal __IntPtr replacement;
internal __IntPtr associatedDecl;
internal uint index;
internal global::Std.Optional.__Internal packIndex;
internal byte isReferenceParameter;
[SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser.dll", EntryPoint = "??0SubstNonTypeTemplateParmExpr@AST@CppParser@CppSharp@@QAE@XZ", CallingConvention = __CallingConvention.ThisCall)]
@ -40604,22 +40586,6 @@ namespace CppSharp @@ -40604,22 +40586,6 @@ namespace CppSharp
}
}
public System.Nullable<uint> PackIndex
{
get
{
var __optionalRet0 = global::Std.Optional<uint>.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->packIndex));
if (!__optionalRet0.HasValue)
return null;
return global::Std.OptionalExtensions.Value(__optionalRet0);
}
set
{
throw new System.NotImplementedException("Setting std::optional is currently not supported");
}
}
public bool IsReferenceParameter
{
get
@ -41051,7 +41017,7 @@ namespace CppSharp @@ -41051,7 +41017,7 @@ namespace CppSharp
public unsafe partial class CXXFoldExpr : global::CppSharp.Parser.AST.Expr, IDisposable
{
[StructLayout(LayoutKind.Sequential, Size = 100)]
[StructLayout(LayoutKind.Sequential, Size = 92)]
public new partial struct __Internal
{
internal global::CppSharp.Parser.AST.StmtClass stmtClass;
@ -41085,7 +41051,6 @@ namespace CppSharp @@ -41085,7 +41051,6 @@ namespace CppSharp
internal global::CppSharp.Parser.SourceLocation.__Internal rParenLoc;
internal global::CppSharp.Parser.SourceLocation.__Internal ellipsisLoc;
internal global::CppSharp.Parser.AST.BinaryOperatorKind _operator;
internal global::Std.Optional.__Internal numExpansions;
[SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser.dll", EntryPoint = "??0CXXFoldExpr@AST@CppParser@CppSharp@@QAE@XZ", CallingConvention = __CallingConvention.ThisCall)]
internal static extern __IntPtr ctor(__IntPtr __instance);
@ -41310,22 +41275,6 @@ namespace CppSharp @@ -41310,22 +41275,6 @@ namespace CppSharp
((__Internal*)__Instance)->_operator = value;
}
}
public System.Nullable<uint> NumExpansions
{
get
{
var __optionalRet0 = global::Std.Optional<uint>.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->numExpansions));
if (!__optionalRet0.HasValue)
return null;
return global::Std.OptionalExtensions.Value(__optionalRet0);
}
set
{
throw new System.NotImplementedException("Setting std::optional is currently not supported");
}
}
}
public unsafe partial class CXXParenListInitExpr : global::CppSharp.Parser.AST.Expr, IDisposable

4
src/CppParser/Bindings/CSharp/i686-pc-win32-msvc/Std-symbols.cpp

@ -2,7 +2,6 @@ @@ -2,7 +2,6 @@
#define _LIBCPP_HIDE_FROM_ABI
#include <string>
#include <optional>
#include <new>
template __declspec(dllexport) std::allocator<char>::allocator() noexcept;
@ -10,6 +9,3 @@ template __declspec(dllexport) std::basic_string<char, std::char_traits<char>, s @@ -10,6 +9,3 @@ template __declspec(dllexport) std::basic_string<char, std::char_traits<char>, s
template __declspec(dllexport) std::basic_string<char, std::char_traits<char>, std::allocator<char>>::~basic_string() noexcept;
template __declspec(dllexport) std::basic_string<char, std::char_traits<char>, std::allocator<char>>& std::basic_string<char, std::char_traits<char>, std::allocator<char>>::assign(const char* const);
template __declspec(dllexport) const char* std::basic_string<char, std::char_traits<char>, std::allocator<char>>::data() const noexcept;
template __declspec(dllexport) std::optional<unsigned int>::optional() noexcept;
template __declspec(dllexport) bool std::optional<unsigned int>::has_value() const noexcept;
template __declspec(dllexport) const unsigned int&& std::optional<unsigned int>::value() const&&;

166
src/CppParser/Bindings/CSharp/i686-pc-win32-msvc/Std.cs

@ -47,10 +47,6 @@ namespace Std @@ -47,10 +47,6 @@ namespace Std
}
}
namespace Std
{
}
namespace Std
{
namespace CompressedPair
@ -492,165 +488,3 @@ namespace Std @@ -492,165 +488,3 @@ namespace Std
}
}
}
namespace Std
{
namespace Optional
{
[StructLayout(LayoutKind.Explicit, Size = 8, Pack = 8)]
public unsafe partial struct __Internal
{
[FieldOffset(0)]
internal global::Std.NontrivialDummyType.__Internal _Dummy;
[FieldOffset(0)]
internal uint _Value;
[FieldOffset(4)]
internal byte _Has_value;
[SuppressUnmanagedCodeSecurity, DllImport("Std-symbols", EntryPoint = "??0?$optional@I@std@@QAE@XZ", CallingConvention = __CallingConvention.ThisCall)]
internal static extern __IntPtr ctorc__N_std_S_optional__i(__IntPtr __instance);
[SuppressUnmanagedCodeSecurity, DllImport("Std-symbols", EntryPoint = "?has_value@?$optional@I@std@@QBE_NXZ", CallingConvention = __CallingConvention.ThisCall)]
[return: MarshalAs(UnmanagedType.I1)]
internal static extern bool HasValuec__N_std_S_optional__i(__IntPtr __instance);
}
}
public unsafe partial class Optional<_Ty> : IDisposable
{
public __IntPtr __Instance { get; protected set; }
internal static readonly new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::Std.Optional<_Ty>> NativeToManagedMap =
new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::Std.Optional<_Ty>>();
internal static void __RecordNativeToManagedMapping(IntPtr native, global::Std.Optional<_Ty> managed)
{
NativeToManagedMap[native] = managed;
}
internal static bool __TryGetNativeToManagedMapping(IntPtr native, out global::Std.Optional<_Ty> managed)
{
return NativeToManagedMap.TryGetValue(native, out managed);
}
protected bool __ownsNativeInstance;
internal static Optional<_Ty> __CreateInstance(__IntPtr native, bool skipVTables = false)
{
if (native == __IntPtr.Zero)
return null;
return new Optional<_Ty>(native.ToPointer(), skipVTables);
}
internal static Optional<_Ty> __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
{
if (native == __IntPtr.Zero)
return null;
if (__TryGetNativeToManagedMapping(native, out var managed))
return (Optional<_Ty>)managed;
var result = __CreateInstance(native, skipVTables);
if (saveInstance)
__RecordNativeToManagedMapping(native, result);
return result;
}
internal static Optional<_Ty> __CreateInstance(global::Std.Optional.__Internal native, bool skipVTables = false)
{
return new Optional<_Ty>(native, skipVTables);
}
private static void* __CopyValue(global::Std.Optional.__Internal native)
{
var ret = Marshal.AllocHGlobal(sizeof(global::Std.Optional.__Internal));
*(global::Std.Optional.__Internal*) ret = native;
return ret.ToPointer();
}
private Optional(global::Std.Optional.__Internal native, bool skipVTables = false)
: this(__CopyValue(native), skipVTables)
{
__ownsNativeInstance = true;
__RecordNativeToManagedMapping(__Instance, this);
}
protected Optional(void* native, bool skipVTables = false)
{
if (native == null)
return;
__Instance = new __IntPtr(native);
}
public Optional()
{
var ___Ty = typeof(_Ty);
if (___Ty.IsAssignableFrom(typeof(uint)))
{
__Instance = Marshal.AllocHGlobal(sizeof(global::Std.Optional.__Internal));
__ownsNativeInstance = true;
__RecordNativeToManagedMapping(__Instance, this);
global::Std.Optional.__Internal.ctorc__N_std_S_optional__i(__Instance);
return;
}
throw new ArgumentOutOfRangeException("_Ty", string.Join(", ", new[] { typeof(_Ty).FullName }), "global::Std.Optional<_Ty> maps a C++ template class and therefore it only supports a limited set of types and their subclasses: <uint>.");
}
public void Dispose()
{
Dispose(disposing: true, callNativeDtor: __ownsNativeInstance);
}
partial void DisposePartial(bool disposing);
internal protected virtual void Dispose(bool disposing, bool callNativeDtor)
{
if (__Instance == IntPtr.Zero)
return;
NativeToManagedMap.TryRemove(__Instance, out _);
DisposePartial(disposing);
if (__ownsNativeInstance)
Marshal.FreeHGlobal(__Instance);
__Instance = IntPtr.Zero;
}
public bool HasValue
{
get
{
var ___Ty = typeof(_Ty);
if (___Ty.IsAssignableFrom(typeof(uint)))
{
var ___ret = global::Std.Optional.__Internal.HasValuec__N_std_S_optional__i(__Instance);
return ___ret;
}
throw new ArgumentOutOfRangeException("_Ty", string.Join(", ", new[] { typeof(_Ty).FullName }), "global::Std.Optional<_Ty> maps a C++ template class and therefore it only supports a limited set of types and their subclasses: <uint>.");
}
}
}
public unsafe static partial class NontrivialDummyType
{
[StructLayout(LayoutKind.Sequential, Size = 1, Pack = 8)]
public partial struct __Internal
{
}
}
public unsafe static partial class OptionalExtensions
{
public partial struct __Internal
{
[SuppressUnmanagedCodeSecurity, DllImport("Std-symbols", EntryPoint = "?value@?$optional@I@std@@QHBE$$QBIXZ", CallingConvention = __CallingConvention.ThisCall)]
internal static extern uint* Value(__IntPtr __instance);
}
public static uint Value(this global::Std.Optional<uint> @this)
{
var __arg0 = @this is null ? __IntPtr.Zero : @this.__Instance;
var ___ret = __Internal.Value(__arg0);
return *___ret;
}
}
}

57
src/CppParser/Bindings/CSharp/x86_64-apple-darwin12.4.0/CppSharp.CppParser.cs

@ -40142,7 +40142,7 @@ namespace CppSharp @@ -40142,7 +40142,7 @@ namespace CppSharp
public unsafe partial class PackExpansionExpr : global::CppSharp.Parser.AST.Expr, IDisposable
{
[StructLayout(LayoutKind.Sequential, Size = 72)]
[StructLayout(LayoutKind.Sequential, Size = 64)]
public new partial struct __Internal
{
internal global::CppSharp.Parser.AST.StmtClass stmtClass;
@ -40166,7 +40166,6 @@ namespace CppSharp @@ -40166,7 +40166,6 @@ namespace CppSharp
internal byte refersToMatrixElement;
internal byte hasPlaceholderType;
internal global::CppSharp.Parser.SourceLocation.__Internal ellipsisLoc;
internal global::Std.Optional.__Internal numExpansions;
[SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST17PackExpansionExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
internal static extern void ctor(__IntPtr __instance);
@ -40248,22 +40247,6 @@ namespace CppSharp @@ -40248,22 +40247,6 @@ namespace CppSharp
((__Internal*)__Instance)->ellipsisLoc = value.__Instance;
}
}
public System.Nullable<uint> NumExpansions
{
get
{
var __optionalRet0 = global::Std.Optional<uint>.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->numExpansions));
if (!__optionalRet0.HasValue)
return null;
return global::Std.OptionalExtensions.Value(__optionalRet0);
}
set
{
throw new System.NotImplementedException("Setting std::optional is currently not supported");
}
}
}
public unsafe partial class SizeOfPackExpr : global::CppSharp.Parser.AST.Expr, IDisposable
@ -40448,7 +40431,7 @@ namespace CppSharp @@ -40448,7 +40431,7 @@ namespace CppSharp
public unsafe partial class SubstNonTypeTemplateParmExpr : global::CppSharp.Parser.AST.Expr, IDisposable
{
[StructLayout(LayoutKind.Sequential, Size = 96)]
[StructLayout(LayoutKind.Sequential, Size = 88)]
public new partial struct __Internal
{
internal global::CppSharp.Parser.AST.StmtClass stmtClass;
@ -40475,7 +40458,6 @@ namespace CppSharp @@ -40475,7 +40458,6 @@ namespace CppSharp
internal __IntPtr replacement;
internal __IntPtr associatedDecl;
internal uint index;
internal global::Std.Optional.__Internal packIndex;
internal byte isReferenceParameter;
[SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST28SubstNonTypeTemplateParmExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
@ -40600,22 +40582,6 @@ namespace CppSharp @@ -40600,22 +40582,6 @@ namespace CppSharp
}
}
public System.Nullable<uint> PackIndex
{
get
{
var __optionalRet0 = global::Std.Optional<uint>.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->packIndex));
if (!__optionalRet0.HasValue)
return null;
return global::Std.OptionalExtensions.Value(__optionalRet0);
}
set
{
throw new System.NotImplementedException("Setting std::optional is currently not supported");
}
}
public bool IsReferenceParameter
{
get
@ -41047,7 +41013,7 @@ namespace CppSharp @@ -41047,7 +41013,7 @@ namespace CppSharp
public unsafe partial class CXXFoldExpr : global::CppSharp.Parser.AST.Expr, IDisposable
{
[StructLayout(LayoutKind.Sequential, Size = 136)]
[StructLayout(LayoutKind.Sequential, Size = 128)]
public new partial struct __Internal
{
internal global::CppSharp.Parser.AST.StmtClass stmtClass;
@ -41081,7 +41047,6 @@ namespace CppSharp @@ -41081,7 +41047,6 @@ namespace CppSharp
internal global::CppSharp.Parser.SourceLocation.__Internal rParenLoc;
internal global::CppSharp.Parser.SourceLocation.__Internal ellipsisLoc;
internal global::CppSharp.Parser.AST.BinaryOperatorKind _operator;
internal global::Std.Optional.__Internal numExpansions;
[SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11CXXFoldExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
internal static extern void ctor(__IntPtr __instance);
@ -41306,22 +41271,6 @@ namespace CppSharp @@ -41306,22 +41271,6 @@ namespace CppSharp
((__Internal*)__Instance)->_operator = value;
}
}
public System.Nullable<uint> NumExpansions
{
get
{
var __optionalRet0 = global::Std.Optional<uint>.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->numExpansions));
if (!__optionalRet0.HasValue)
return null;
return global::Std.OptionalExtensions.Value(__optionalRet0);
}
set
{
throw new System.NotImplementedException("Setting std::optional is currently not supported");
}
}
}
public unsafe partial class CXXParenListInitExpr : global::CppSharp.Parser.AST.Expr, IDisposable

7
src/CppParser/Bindings/CSharp/x86_64-apple-darwin12.4.0/Std-symbols.cpp

@ -2,9 +2,10 @@ @@ -2,9 +2,10 @@
#define _LIBCPP_HIDE_FROM_ABI
#include <string>
#include <optional>
#include <new>
template std::allocator<char>::allocator() noexcept;
template std::optional<unsigned int>::optional() noexcept;
template const unsigned int&& std::optional<unsigned int>::value() const&&;
template std::basic_string<char, std::char_traits<char>, std::allocator<char>>::basic_string() noexcept(true);
template std::basic_string<char, std::char_traits<char>, std::allocator<char>>::~basic_string() noexcept;
template std::basic_string<char, std::char_traits<char>, std::allocator<char>>& std::basic_string<char, std::char_traits<char>, std::allocator<char>>::assign(const char*);
template const char* std::basic_string<char, std::char_traits<char>, std::allocator<char>>::data() const noexcept;

134
src/CppParser/Bindings/CSharp/x86_64-apple-darwin12.4.0/Std.cs

@ -34,10 +34,6 @@ namespace Std @@ -34,10 +34,6 @@ namespace Std
{
}
namespace Std
{
}
namespace Std
{
namespace CompressedPair
@ -311,14 +307,27 @@ namespace Std @@ -311,14 +307,27 @@ namespace Std
public unsafe partial struct __Internalc__N_std_N___1_S_basic_string__C___N_std_N___1_S_char_traits__C___N_std_N___1_S_allocator__C
{
internal global::Std.CompressedPair.__Internalc__N_std_N___1_S___compressed_pair____N_std_N___1_S_basic_string__C___N_std_N___1_S_char_traits__C___N_std_N___1_S_allocator__C_S___rep_S2_ __r_;
[SuppressUnmanagedCodeSecurity, DllImport("Std-symbols", EntryPoint = "_ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2Ev", CallingConvention = __CallingConvention.Cdecl)]
internal static extern void ctorc__N_std_N___1_S_basic_string__C___N_std_N___1_S_char_traits__C___N_std_N___1_S_allocator__C(__IntPtr __instance);
[SuppressUnmanagedCodeSecurity, DllImport("Std-symbols", EntryPoint = "_ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED2Ev", CallingConvention = __CallingConvention.Cdecl)]
internal static extern void dtorc__N_std_N___1_S_basic_string__C___N_std_N___1_S_char_traits__C___N_std_N___1_S_allocator__C(__IntPtr __instance);
}
namespace Rep
{
[StructLayout(LayoutKind.Sequential, Size = 24)]
[StructLayout(LayoutKind.Explicit, Size = 24)]
public unsafe partial struct __Internalc__N_std_N___1_S_basic_string__C___N_std_N___1_S_char_traits__C___N_std_N___1_S_allocator__C
{
internal global::Std.BasicString.Rep._0.__Internal _0;
[FieldOffset(0)]
internal global::Std.BasicString.Long.__Internal __l;
[FieldOffset(0)]
internal global::Std.BasicString.Short.__Internalc__N_std_N___1_S_basic_string__C___N_std_N___1_S_char_traits__C___N_std_N___1_S_allocator__C __s;
[FieldOffset(0)]
internal global::Std.BasicString.Raw.__Internal __r;
}
namespace _0
@ -354,10 +363,16 @@ namespace Std @@ -354,10 +363,16 @@ namespace Std
namespace Short
{
[StructLayout(LayoutKind.Sequential, Size = 24)]
[StructLayout(LayoutKind.Explicit, Size = 24)]
public unsafe partial struct __Internalc__N_std_N___1_S_basic_string__C___N_std_N___1_S_char_traits__C___N_std_N___1_S_allocator__C
{
internal global::Std.BasicString.Short._0.__Internal _0;
[FieldOffset(0)]
internal byte __size_;
[FieldOffset(0)]
internal sbyte __lx;
[FieldOffset(1)]
internal fixed sbyte __data_[23];
}
@ -387,42 +402,20 @@ namespace Std @@ -387,42 +402,20 @@ namespace Std
}
}
}
namespace Std
{
namespace Optional
{
[StructLayout(LayoutKind.Explicit, Size = 8)]
public unsafe partial struct __Internal
{
[FieldOffset(0)]
internal sbyte __null_state_;
[FieldOffset(0)]
internal uint __val_;
[FieldOffset(4)]
internal byte __engaged_;
[SuppressUnmanagedCodeSecurity, DllImport("Std-symbols", EntryPoint = "_ZNSt3__18optionalIjEC2Ev", CallingConvention = __CallingConvention.Cdecl)]
internal static extern void ctorc__N_std_N___1_S_optional__i(__IntPtr __instance);
}
}
public unsafe partial class Optional<_Tp> : IDisposable
public unsafe partial class BasicString<_CharT, _Traits, _Allocator> : IDisposable
{
public __IntPtr __Instance { get; protected set; }
internal static readonly new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::Std.Optional<_Tp>> NativeToManagedMap =
new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::Std.Optional<_Tp>>();
internal static readonly new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::Std.BasicString<_CharT, _Traits, _Allocator>> NativeToManagedMap =
new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::Std.BasicString<_CharT, _Traits, _Allocator>>();
internal static void __RecordNativeToManagedMapping(IntPtr native, global::Std.Optional<_Tp> managed)
internal static void __RecordNativeToManagedMapping(IntPtr native, global::Std.BasicString<_CharT, _Traits, _Allocator> managed)
{
NativeToManagedMap[native] = managed;
}
internal static bool __TryGetNativeToManagedMapping(IntPtr native, out global::Std.Optional<_Tp> managed)
internal static bool __TryGetNativeToManagedMapping(IntPtr native, out global::Std.BasicString<_CharT, _Traits, _Allocator> managed)
{
return NativeToManagedMap.TryGetValue(native, out managed);
@ -430,63 +423,65 @@ namespace Std @@ -430,63 +423,65 @@ namespace Std
protected bool __ownsNativeInstance;
internal static Optional<_Tp> __CreateInstance(__IntPtr native, bool skipVTables = false)
internal static BasicString<_CharT, _Traits, _Allocator> __CreateInstance(__IntPtr native, bool skipVTables = false)
{
if (native == __IntPtr.Zero)
return null;
return new Optional<_Tp>(native.ToPointer(), skipVTables);
return new BasicString<_CharT, _Traits, _Allocator>(native.ToPointer(), skipVTables);
}
internal static Optional<_Tp> __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
internal static BasicString<_CharT, _Traits, _Allocator> __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
{
if (native == __IntPtr.Zero)
return null;
if (__TryGetNativeToManagedMapping(native, out var managed))
return (Optional<_Tp>)managed;
return (BasicString<_CharT, _Traits, _Allocator>)managed;
var result = __CreateInstance(native, skipVTables);
if (saveInstance)
__RecordNativeToManagedMapping(native, result);
return result;
}
internal static Optional<_Tp> __CreateInstance(global::Std.Optional.__Internal native, bool skipVTables = false)
internal static BasicString<_CharT, _Traits, _Allocator> __CreateInstance(global::Std.BasicString.__Internalc__N_std_N___1_S_basic_string__C___N_std_N___1_S_char_traits__C___N_std_N___1_S_allocator__C native, bool skipVTables = false)
{
return new Optional<_Tp>(native, skipVTables);
return new BasicString<_CharT, _Traits, _Allocator>(native, skipVTables);
}
private static void* __CopyValue(global::Std.Optional.__Internal native)
private static void* __CopyValue(global::Std.BasicString.__Internalc__N_std_N___1_S_basic_string__C___N_std_N___1_S_char_traits__C___N_std_N___1_S_allocator__C native)
{
var ret = Marshal.AllocHGlobal(sizeof(global::Std.Optional.__Internal));
*(global::Std.Optional.__Internal*) ret = native;
var ret = Marshal.AllocHGlobal(sizeof(global::Std.BasicString.__Internalc__N_std_N___1_S_basic_string__C___N_std_N___1_S_char_traits__C___N_std_N___1_S_allocator__C));
*(global::Std.BasicString.__Internalc__N_std_N___1_S_basic_string__C___N_std_N___1_S_char_traits__C___N_std_N___1_S_allocator__C*) ret = native;
return ret.ToPointer();
}
private Optional(global::Std.Optional.__Internal native, bool skipVTables = false)
private BasicString(global::Std.BasicString.__Internalc__N_std_N___1_S_basic_string__C___N_std_N___1_S_char_traits__C___N_std_N___1_S_allocator__C native, bool skipVTables = false)
: this(__CopyValue(native), skipVTables)
{
__ownsNativeInstance = true;
__RecordNativeToManagedMapping(__Instance, this);
}
protected Optional(void* native, bool skipVTables = false)
protected BasicString(void* native, bool skipVTables = false)
{
if (native == null)
return;
__Instance = new __IntPtr(native);
}
public Optional()
public BasicString()
{
var ___Tp = typeof(_Tp);
if (___Tp.IsAssignableFrom(typeof(uint)))
var ___CharT = typeof(_CharT);
var ___Traits = typeof(_Traits);
var ___Allocator = typeof(_Allocator);
if (___CharT.IsAssignableFrom(typeof(sbyte)) && ___Traits.IsAssignableFrom(typeof(global::Std.CharTraits<sbyte>)) && ___Allocator.IsAssignableFrom(typeof(global::Std.Allocator<sbyte>)))
{
__Instance = Marshal.AllocHGlobal(sizeof(global::Std.Optional.__Internal));
__Instance = Marshal.AllocHGlobal(sizeof(global::Std.BasicString.__Internalc__N_std_N___1_S_basic_string__C___N_std_N___1_S_char_traits__C___N_std_N___1_S_allocator__C));
__ownsNativeInstance = true;
__RecordNativeToManagedMapping(__Instance, this);
global::Std.Optional.__Internal.ctorc__N_std_N___1_S_optional__i(__Instance);
global::Std.BasicString.__Internalc__N_std_N___1_S_basic_string__C___N_std_N___1_S_char_traits__C___N_std_N___1_S_allocator__C.ctorc__N_std_N___1_S_basic_string__C___N_std_N___1_S_char_traits__C___N_std_N___1_S_allocator__C(__Instance);
return;
}
throw new ArgumentOutOfRangeException("_Tp", string.Join(", ", new[] { typeof(_Tp).FullName }), "global::Std.Optional<_Tp> maps a C++ template class and therefore it only supports a limited set of types and their subclasses: <uint>.");
throw new ArgumentOutOfRangeException("_CharT, _Traits, _Allocator", string.Join(", ", new[] { typeof(_CharT).FullName, typeof(_Traits).FullName, typeof(_Allocator).FullName }), "global::Std.BasicString<_CharT, _Traits, _Allocator> maps a C++ template class and therefore it only supports a limited set of types and their subclasses: <sbyte, global::Std.CharTraits<sbyte>, global::Std.Allocator<sbyte>>.");
}
public void Dispose()
@ -502,25 +497,48 @@ namespace Std @@ -502,25 +497,48 @@ namespace Std
return;
NativeToManagedMap.TryRemove(__Instance, out _);
DisposePartial(disposing);
if (callNativeDtor)
{
var ___CharT = typeof(_CharT);
var ___Traits = typeof(_Traits);
var ___Allocator = typeof(_Allocator);
if (___CharT.IsAssignableFrom(typeof(sbyte)) && ___Traits.IsAssignableFrom(typeof(global::Std.CharTraits<sbyte>)) && ___Allocator.IsAssignableFrom(typeof(global::Std.Allocator<sbyte>)))
{
global::Std.BasicString.__Internalc__N_std_N___1_S_basic_string__C___N_std_N___1_S_char_traits__C___N_std_N___1_S_allocator__C.dtorc__N_std_N___1_S_basic_string__C___N_std_N___1_S_char_traits__C___N_std_N___1_S_allocator__C(__Instance);
return;
}
throw new ArgumentOutOfRangeException("_CharT, _Traits, _Allocator", string.Join(", ", new[] { typeof(_CharT).FullName, typeof(_Traits).FullName, typeof(_Allocator).FullName }), "global::Std.BasicString<_CharT, _Traits, _Allocator> maps a C++ template class and therefore it only supports a limited set of types and their subclasses: <sbyte, global::Std.CharTraits<sbyte>, global::Std.Allocator<sbyte>>.");
}
if (__ownsNativeInstance)
Marshal.FreeHGlobal(__Instance);
__Instance = IntPtr.Zero;
}
}
public unsafe static partial class OptionalExtensions
public unsafe static partial class BasicStringExtensions
{
public partial struct __Internal
{
[SuppressUnmanagedCodeSecurity, DllImport("Std-symbols", EntryPoint = "_ZNKOSt3__18optionalIjE5valueEv", CallingConvention = __CallingConvention.Cdecl)]
internal static extern uint* Value(__IntPtr __instance);
[SuppressUnmanagedCodeSecurity, DllImport("Std-symbols", EntryPoint = "_ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignEPKc", CallingConvention = __CallingConvention.Cdecl)]
internal static extern __IntPtr Assign(__IntPtr __instance, [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(CppSharp.Runtime.UTF8Marshaller))] string __s);
[SuppressUnmanagedCodeSecurity, DllImport("Std-symbols", EntryPoint = "_ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4dataEv", CallingConvention = __CallingConvention.Cdecl)]
internal static extern __IntPtr Data(__IntPtr __instance);
}
public static global::Std.BasicString<sbyte, global::Std.CharTraits<sbyte>, global::Std.Allocator<sbyte>> Assign(this global::Std.BasicString<sbyte, global::Std.CharTraits<sbyte>, global::Std.Allocator<sbyte>> @this, string __s)
{
var __arg0 = @this is null ? __IntPtr.Zero : @this.__Instance;
var ___ret = __Internal.Assign(__arg0, __s);
var __result0 = global::Std.BasicString<sbyte, global::Std.CharTraits<sbyte>, global::Std.Allocator<sbyte>>.__GetOrCreateInstance(___ret, false);
return __result0;
}
public static uint Value(this global::Std.Optional<uint> @this)
public static string Data(this global::Std.BasicString<sbyte, global::Std.CharTraits<sbyte>, global::Std.Allocator<sbyte>> @this)
{
var __arg0 = @this is null ? __IntPtr.Zero : @this.__Instance;
var ___ret = __Internal.Value(__arg0);
return *___ret;
var ___ret = __Internal.Data(__arg0);
return CppSharp.Runtime.MarshalUtil.GetString(global::System.Text.Encoding.UTF8, ___ret);
}
}
}

57
src/CppParser/Bindings/CSharp/x86_64-linux-gnu-cxx11abi/CppSharp.CppParser.cs

@ -40142,7 +40142,7 @@ namespace CppSharp @@ -40142,7 +40142,7 @@ namespace CppSharp
public unsafe partial class PackExpansionExpr : global::CppSharp.Parser.AST.Expr, IDisposable
{
[StructLayout(LayoutKind.Sequential, Size = 72)]
[StructLayout(LayoutKind.Sequential, Size = 64)]
public new partial struct __Internal
{
internal global::CppSharp.Parser.AST.StmtClass stmtClass;
@ -40166,7 +40166,6 @@ namespace CppSharp @@ -40166,7 +40166,6 @@ namespace CppSharp
internal byte refersToMatrixElement;
internal byte hasPlaceholderType;
internal global::CppSharp.Parser.SourceLocation.__Internal ellipsisLoc;
internal global::Std.Optional.__Internalc__N_std_S_optional__i numExpansions;
[SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST17PackExpansionExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
internal static extern void ctor(__IntPtr __instance);
@ -40248,22 +40247,6 @@ namespace CppSharp @@ -40248,22 +40247,6 @@ namespace CppSharp
((__Internal*)__Instance)->ellipsisLoc = value.__Instance;
}
}
public System.Nullable<uint> NumExpansions
{
get
{
var __optionalRet0 = global::Std.Optional<uint>.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->numExpansions));
if (!__optionalRet0.HasValue)
return null;
return global::Std.OptionalExtensions.Value(__optionalRet0);
}
set
{
throw new System.NotImplementedException("Setting std::optional is currently not supported");
}
}
}
public unsafe partial class SizeOfPackExpr : global::CppSharp.Parser.AST.Expr, IDisposable
@ -40448,7 +40431,7 @@ namespace CppSharp @@ -40448,7 +40431,7 @@ namespace CppSharp
public unsafe partial class SubstNonTypeTemplateParmExpr : global::CppSharp.Parser.AST.Expr, IDisposable
{
[StructLayout(LayoutKind.Sequential, Size = 96)]
[StructLayout(LayoutKind.Sequential, Size = 88)]
public new partial struct __Internal
{
internal global::CppSharp.Parser.AST.StmtClass stmtClass;
@ -40475,7 +40458,6 @@ namespace CppSharp @@ -40475,7 +40458,6 @@ namespace CppSharp
internal __IntPtr replacement;
internal __IntPtr associatedDecl;
internal uint index;
internal global::Std.Optional.__Internalc__N_std_S_optional__i packIndex;
internal byte isReferenceParameter;
[SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST28SubstNonTypeTemplateParmExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
@ -40600,22 +40582,6 @@ namespace CppSharp @@ -40600,22 +40582,6 @@ namespace CppSharp
}
}
public System.Nullable<uint> PackIndex
{
get
{
var __optionalRet0 = global::Std.Optional<uint>.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->packIndex));
if (!__optionalRet0.HasValue)
return null;
return global::Std.OptionalExtensions.Value(__optionalRet0);
}
set
{
throw new System.NotImplementedException("Setting std::optional is currently not supported");
}
}
public bool IsReferenceParameter
{
get
@ -41047,7 +41013,7 @@ namespace CppSharp @@ -41047,7 +41013,7 @@ namespace CppSharp
public unsafe partial class CXXFoldExpr : global::CppSharp.Parser.AST.Expr, IDisposable
{
[StructLayout(LayoutKind.Sequential, Size = 136)]
[StructLayout(LayoutKind.Sequential, Size = 128)]
public new partial struct __Internal
{
internal global::CppSharp.Parser.AST.StmtClass stmtClass;
@ -41081,7 +41047,6 @@ namespace CppSharp @@ -41081,7 +41047,6 @@ namespace CppSharp
internal global::CppSharp.Parser.SourceLocation.__Internal rParenLoc;
internal global::CppSharp.Parser.SourceLocation.__Internal ellipsisLoc;
internal global::CppSharp.Parser.AST.BinaryOperatorKind _operator;
internal global::Std.Optional.__Internalc__N_std_S_optional__i numExpansions;
[SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11CXXFoldExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
internal static extern void ctor(__IntPtr __instance);
@ -41306,22 +41271,6 @@ namespace CppSharp @@ -41306,22 +41271,6 @@ namespace CppSharp
((__Internal*)__Instance)->_operator = value;
}
}
public System.Nullable<uint> NumExpansions
{
get
{
var __optionalRet0 = global::Std.Optional<uint>.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->numExpansions));
if (!__optionalRet0.HasValue)
return null;
return global::Std.OptionalExtensions.Value(__optionalRet0);
}
set
{
throw new System.NotImplementedException("Setting std::optional is currently not supported");
}
}
}
public unsafe partial class CXXParenListInitExpr : global::CppSharp.Parser.AST.Expr, IDisposable

4
src/CppParser/Bindings/CSharp/x86_64-linux-gnu-cxx11abi/Std-symbols.cpp

@ -2,14 +2,10 @@ @@ -2,14 +2,10 @@
#define _LIBCPP_HIDE_FROM_ABI
#include <string>
#include <optional>
#include <new>
template std::allocator<char>::allocator() noexcept;
template std::allocator<char>::~allocator() noexcept;
template std::optional<unsigned int>::optional();
template bool std::optional<unsigned int>::has_value() const noexcept;
template const unsigned int&& std::optional<unsigned int>::value() const&&;
template std::basic_string<char, std::char_traits<char>, std::allocator<char>>::basic_string() noexcept(true);
template std::basic_string<char, std::char_traits<char>, std::allocator<char>>::~basic_string() noexcept;
template std::basic_string<char, std::char_traits<char>, std::allocator<char>>& std::basic_string<char, std::char_traits<char>, std::allocator<char>>::assign(const char*);

157
src/CppParser/Bindings/CSharp/x86_64-linux-gnu-cxx11abi/Std.cs

@ -221,163 +221,6 @@ namespace GnuCxx @@ -221,163 +221,6 @@ namespace GnuCxx
{
}
namespace Std
{
namespace Optional
{
[StructLayout(LayoutKind.Sequential, Size = 8)]
public unsafe partial struct __Internalc__N_std_S_optional__i
{
internal global::Std.OptionalPayload.__Internalc__N_std_S__Optional_payload__i_Vb1_Vb1_Vb1 _M_payload;
[SuppressUnmanagedCodeSecurity, DllImport("Std-symbols", EntryPoint = "_ZNSt8optionalIjEC2Ev", CallingConvention = __CallingConvention.Cdecl)]
internal static extern void ctorc__N_std_S_optional__i(__IntPtr __instance);
[SuppressUnmanagedCodeSecurity, DllImport("Std-symbols", EntryPoint = "_ZNKSt8optionalIjE9has_valueEv", CallingConvention = __CallingConvention.Cdecl)]
[return: MarshalAs(UnmanagedType.I1)]
internal static extern bool HasValuec__N_std_S_optional__i(__IntPtr __instance);
}
}
public unsafe partial class Optional<_Tp> : IDisposable
{
public __IntPtr __Instance { get; protected set; }
internal static readonly new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::Std.Optional<_Tp>> NativeToManagedMap =
new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::Std.Optional<_Tp>>();
internal static void __RecordNativeToManagedMapping(IntPtr native, global::Std.Optional<_Tp> managed)
{
NativeToManagedMap[native] = managed;
}
internal static bool __TryGetNativeToManagedMapping(IntPtr native, out global::Std.Optional<_Tp> managed)
{
return NativeToManagedMap.TryGetValue(native, out managed);
}
protected bool __ownsNativeInstance;
internal static Optional<_Tp> __CreateInstance(__IntPtr native, bool skipVTables = false)
{
if (native == __IntPtr.Zero)
return null;
return new Optional<_Tp>(native.ToPointer(), skipVTables);
}
internal static Optional<_Tp> __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
{
if (native == __IntPtr.Zero)
return null;
if (__TryGetNativeToManagedMapping(native, out var managed))
return (Optional<_Tp>)managed;
var result = __CreateInstance(native, skipVTables);
if (saveInstance)
__RecordNativeToManagedMapping(native, result);
return result;
}
internal static Optional<_Tp> __CreateInstance(global::Std.Optional.__Internalc__N_std_S_optional__i native, bool skipVTables = false)
{
return new Optional<_Tp>(native, skipVTables);
}
private static void* __CopyValue(global::Std.Optional.__Internalc__N_std_S_optional__i native)
{
var ret = Marshal.AllocHGlobal(sizeof(global::Std.Optional.__Internalc__N_std_S_optional__i));
*(global::Std.Optional.__Internalc__N_std_S_optional__i*) ret = native;
return ret.ToPointer();
}
private Optional(global::Std.Optional.__Internalc__N_std_S_optional__i native, bool skipVTables = false)
: this(__CopyValue(native), skipVTables)
{
__ownsNativeInstance = true;
__RecordNativeToManagedMapping(__Instance, this);
}
protected Optional(void* native, bool skipVTables = false)
{
if (native == null)
return;
__Instance = new __IntPtr(native);
}
public Optional()
{
var ___Tp = typeof(_Tp);
if (___Tp.IsAssignableFrom(typeof(uint)))
{
__Instance = Marshal.AllocHGlobal(sizeof(global::Std.Optional.__Internalc__N_std_S_optional__i));
__ownsNativeInstance = true;
__RecordNativeToManagedMapping(__Instance, this);
global::Std.Optional.__Internalc__N_std_S_optional__i.ctorc__N_std_S_optional__i(__Instance);
return;
}
throw new ArgumentOutOfRangeException("_Tp", string.Join(", ", new[] { typeof(_Tp).FullName }), "global::Std.Optional<_Tp> maps a C++ template class and therefore it only supports a limited set of types and their subclasses: <uint>.");
}
public void Dispose()
{
Dispose(disposing: true, callNativeDtor: __ownsNativeInstance);
}
partial void DisposePartial(bool disposing);
internal protected virtual void Dispose(bool disposing, bool callNativeDtor)
{
if (__Instance == IntPtr.Zero)
return;
NativeToManagedMap.TryRemove(__Instance, out _);
DisposePartial(disposing);
if (__ownsNativeInstance)
Marshal.FreeHGlobal(__Instance);
__Instance = IntPtr.Zero;
}
public bool HasValue
{
get
{
var ___Tp = typeof(_Tp);
if (___Tp.IsAssignableFrom(typeof(uint)))
{
var ___ret = global::Std.Optional.__Internalc__N_std_S_optional__i.HasValuec__N_std_S_optional__i(__Instance);
return ___ret;
}
throw new ArgumentOutOfRangeException("_Tp", string.Join(", ", new[] { typeof(_Tp).FullName }), "global::Std.Optional<_Tp> maps a C++ template class and therefore it only supports a limited set of types and their subclasses: <uint>.");
}
}
}
namespace OptionalPayload
{
[StructLayout(LayoutKind.Sequential, Size = 8)]
public unsafe partial struct __Internalc__N_std_S__Optional_payload__i_Vb1_Vb1_Vb1
{
internal global::Std.OptionalPayloadBase.Storage.__Internalc__N_std_S__Optional_payload_base__i_U__Storage__i_Vb1 _M_payload;
internal byte _M_engaged;
}
}
public unsafe static partial class OptionalExtensions
{
public partial struct __Internal
{
[SuppressUnmanagedCodeSecurity, DllImport("Std-symbols", EntryPoint = "_ZNKOSt8optionalIjE5valueEv", CallingConvention = __CallingConvention.Cdecl)]
internal static extern uint* Value(__IntPtr __instance);
}
public static uint Value(this global::Std.Optional<uint> @this)
{
var __arg0 = @this is null ? __IntPtr.Zero : @this.__Instance;
var ___ret = __Internal.Value(__arg0);
return *___ret;
}
}
}
namespace Std
{
}

57
src/CppParser/Bindings/CSharp/x86_64-linux-gnu/CppSharp.CppParser.cs

@ -40142,7 +40142,7 @@ namespace CppSharp @@ -40142,7 +40142,7 @@ namespace CppSharp
public unsafe partial class PackExpansionExpr : global::CppSharp.Parser.AST.Expr, IDisposable
{
[StructLayout(LayoutKind.Sequential, Size = 72)]
[StructLayout(LayoutKind.Sequential, Size = 64)]
public new partial struct __Internal
{
internal global::CppSharp.Parser.AST.StmtClass stmtClass;
@ -40166,7 +40166,6 @@ namespace CppSharp @@ -40166,7 +40166,6 @@ namespace CppSharp
internal byte refersToMatrixElement;
internal byte hasPlaceholderType;
internal global::CppSharp.Parser.SourceLocation.__Internal ellipsisLoc;
internal global::Std.Optional.__Internalc__N_std_S_optional__i numExpansions;
[SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST17PackExpansionExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
internal static extern void ctor(__IntPtr __instance);
@ -40248,22 +40247,6 @@ namespace CppSharp @@ -40248,22 +40247,6 @@ namespace CppSharp
((__Internal*)__Instance)->ellipsisLoc = value.__Instance;
}
}
public System.Nullable<uint> NumExpansions
{
get
{
var __optionalRet0 = global::Std.Optional<uint>.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->numExpansions));
if (!__optionalRet0.HasValue)
return null;
return global::Std.OptionalExtensions.Value(__optionalRet0);
}
set
{
throw new System.NotImplementedException("Setting std::optional is currently not supported");
}
}
}
public unsafe partial class SizeOfPackExpr : global::CppSharp.Parser.AST.Expr, IDisposable
@ -40448,7 +40431,7 @@ namespace CppSharp @@ -40448,7 +40431,7 @@ namespace CppSharp
public unsafe partial class SubstNonTypeTemplateParmExpr : global::CppSharp.Parser.AST.Expr, IDisposable
{
[StructLayout(LayoutKind.Sequential, Size = 96)]
[StructLayout(LayoutKind.Sequential, Size = 88)]
public new partial struct __Internal
{
internal global::CppSharp.Parser.AST.StmtClass stmtClass;
@ -40475,7 +40458,6 @@ namespace CppSharp @@ -40475,7 +40458,6 @@ namespace CppSharp
internal __IntPtr replacement;
internal __IntPtr associatedDecl;
internal uint index;
internal global::Std.Optional.__Internalc__N_std_S_optional__i packIndex;
internal byte isReferenceParameter;
[SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST28SubstNonTypeTemplateParmExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
@ -40600,22 +40582,6 @@ namespace CppSharp @@ -40600,22 +40582,6 @@ namespace CppSharp
}
}
public System.Nullable<uint> PackIndex
{
get
{
var __optionalRet0 = global::Std.Optional<uint>.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->packIndex));
if (!__optionalRet0.HasValue)
return null;
return global::Std.OptionalExtensions.Value(__optionalRet0);
}
set
{
throw new System.NotImplementedException("Setting std::optional is currently not supported");
}
}
public bool IsReferenceParameter
{
get
@ -41047,7 +41013,7 @@ namespace CppSharp @@ -41047,7 +41013,7 @@ namespace CppSharp
public unsafe partial class CXXFoldExpr : global::CppSharp.Parser.AST.Expr, IDisposable
{
[StructLayout(LayoutKind.Sequential, Size = 136)]
[StructLayout(LayoutKind.Sequential, Size = 128)]
public new partial struct __Internal
{
internal global::CppSharp.Parser.AST.StmtClass stmtClass;
@ -41081,7 +41047,6 @@ namespace CppSharp @@ -41081,7 +41047,6 @@ namespace CppSharp
internal global::CppSharp.Parser.SourceLocation.__Internal rParenLoc;
internal global::CppSharp.Parser.SourceLocation.__Internal ellipsisLoc;
internal global::CppSharp.Parser.AST.BinaryOperatorKind _operator;
internal global::Std.Optional.__Internalc__N_std_S_optional__i numExpansions;
[SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST11CXXFoldExprC2Ev", CallingConvention = __CallingConvention.Cdecl)]
internal static extern void ctor(__IntPtr __instance);
@ -41306,22 +41271,6 @@ namespace CppSharp @@ -41306,22 +41271,6 @@ namespace CppSharp
((__Internal*)__Instance)->_operator = value;
}
}
public System.Nullable<uint> NumExpansions
{
get
{
var __optionalRet0 = global::Std.Optional<uint>.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->numExpansions));
if (!__optionalRet0.HasValue)
return null;
return global::Std.OptionalExtensions.Value(__optionalRet0);
}
set
{
throw new System.NotImplementedException("Setting std::optional is currently not supported");
}
}
}
public unsafe partial class CXXParenListInitExpr : global::CppSharp.Parser.AST.Expr, IDisposable

4
src/CppParser/Bindings/CSharp/x86_64-linux-gnu/Std-symbols.cpp

@ -2,14 +2,10 @@ @@ -2,14 +2,10 @@
#define _LIBCPP_HIDE_FROM_ABI
#include <string>
#include <optional>
#include <new>
template std::allocator<char>::allocator() noexcept;
template std::allocator<char>::~allocator() noexcept;
template std::optional<unsigned int>::optional();
template bool std::optional<unsigned int>::has_value() const noexcept;
template const unsigned int&& std::optional<unsigned int>::value() const&&;
template std::basic_string<char, std::char_traits<char>, std::allocator<char>>::basic_string() noexcept;
template std::basic_string<char, std::char_traits<char>, std::allocator<char>>::~basic_string() noexcept;
template std::basic_string<char, std::char_traits<char>, std::allocator<char>>& std::basic_string<char, std::char_traits<char>, std::allocator<char>>::assign(const char*);

157
src/CppParser/Bindings/CSharp/x86_64-linux-gnu/Std.cs

@ -221,163 +221,6 @@ namespace GnuCxx @@ -221,163 +221,6 @@ namespace GnuCxx
{
}
namespace Std
{
namespace Optional
{
[StructLayout(LayoutKind.Sequential, Size = 8)]
public unsafe partial struct __Internalc__N_std_S_optional__i
{
internal global::Std.OptionalPayload.__Internalc__N_std_S__Optional_payload__i_Vb1_Vb1_Vb1 _M_payload;
[SuppressUnmanagedCodeSecurity, DllImport("Std-symbols", EntryPoint = "_ZNSt8optionalIjEC2Ev", CallingConvention = __CallingConvention.Cdecl)]
internal static extern void ctorc__N_std_S_optional__i(__IntPtr __instance);
[SuppressUnmanagedCodeSecurity, DllImport("Std-symbols", EntryPoint = "_ZNKSt8optionalIjE9has_valueEv", CallingConvention = __CallingConvention.Cdecl)]
[return: MarshalAs(UnmanagedType.I1)]
internal static extern bool HasValuec__N_std_S_optional__i(__IntPtr __instance);
}
}
public unsafe partial class Optional<_Tp> : IDisposable
{
public __IntPtr __Instance { get; protected set; }
internal static readonly new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::Std.Optional<_Tp>> NativeToManagedMap =
new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::Std.Optional<_Tp>>();
internal static void __RecordNativeToManagedMapping(IntPtr native, global::Std.Optional<_Tp> managed)
{
NativeToManagedMap[native] = managed;
}
internal static bool __TryGetNativeToManagedMapping(IntPtr native, out global::Std.Optional<_Tp> managed)
{
return NativeToManagedMap.TryGetValue(native, out managed);
}
protected bool __ownsNativeInstance;
internal static Optional<_Tp> __CreateInstance(__IntPtr native, bool skipVTables = false)
{
if (native == __IntPtr.Zero)
return null;
return new Optional<_Tp>(native.ToPointer(), skipVTables);
}
internal static Optional<_Tp> __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
{
if (native == __IntPtr.Zero)
return null;
if (__TryGetNativeToManagedMapping(native, out var managed))
return (Optional<_Tp>)managed;
var result = __CreateInstance(native, skipVTables);
if (saveInstance)
__RecordNativeToManagedMapping(native, result);
return result;
}
internal static Optional<_Tp> __CreateInstance(global::Std.Optional.__Internalc__N_std_S_optional__i native, bool skipVTables = false)
{
return new Optional<_Tp>(native, skipVTables);
}
private static void* __CopyValue(global::Std.Optional.__Internalc__N_std_S_optional__i native)
{
var ret = Marshal.AllocHGlobal(sizeof(global::Std.Optional.__Internalc__N_std_S_optional__i));
*(global::Std.Optional.__Internalc__N_std_S_optional__i*) ret = native;
return ret.ToPointer();
}
private Optional(global::Std.Optional.__Internalc__N_std_S_optional__i native, bool skipVTables = false)
: this(__CopyValue(native), skipVTables)
{
__ownsNativeInstance = true;
__RecordNativeToManagedMapping(__Instance, this);
}
protected Optional(void* native, bool skipVTables = false)
{
if (native == null)
return;
__Instance = new __IntPtr(native);
}
public Optional()
{
var ___Tp = typeof(_Tp);
if (___Tp.IsAssignableFrom(typeof(uint)))
{
__Instance = Marshal.AllocHGlobal(sizeof(global::Std.Optional.__Internalc__N_std_S_optional__i));
__ownsNativeInstance = true;
__RecordNativeToManagedMapping(__Instance, this);
global::Std.Optional.__Internalc__N_std_S_optional__i.ctorc__N_std_S_optional__i(__Instance);
return;
}
throw new ArgumentOutOfRangeException("_Tp", string.Join(", ", new[] { typeof(_Tp).FullName }), "global::Std.Optional<_Tp> maps a C++ template class and therefore it only supports a limited set of types and their subclasses: <uint>.");
}
public void Dispose()
{
Dispose(disposing: true, callNativeDtor: __ownsNativeInstance);
}
partial void DisposePartial(bool disposing);
internal protected virtual void Dispose(bool disposing, bool callNativeDtor)
{
if (__Instance == IntPtr.Zero)
return;
NativeToManagedMap.TryRemove(__Instance, out _);
DisposePartial(disposing);
if (__ownsNativeInstance)
Marshal.FreeHGlobal(__Instance);
__Instance = IntPtr.Zero;
}
public bool HasValue
{
get
{
var ___Tp = typeof(_Tp);
if (___Tp.IsAssignableFrom(typeof(uint)))
{
var ___ret = global::Std.Optional.__Internalc__N_std_S_optional__i.HasValuec__N_std_S_optional__i(__Instance);
return ___ret;
}
throw new ArgumentOutOfRangeException("_Tp", string.Join(", ", new[] { typeof(_Tp).FullName }), "global::Std.Optional<_Tp> maps a C++ template class and therefore it only supports a limited set of types and their subclasses: <uint>.");
}
}
}
namespace OptionalPayload
{
[StructLayout(LayoutKind.Sequential, Size = 8)]
public unsafe partial struct __Internalc__N_std_S__Optional_payload__i_Vb1_Vb1_Vb1
{
internal global::Std.OptionalPayloadBase.Storage.__Internalc__N_std_S__Optional_payload_base__i_U__Storage__i_Vb1 _M_payload;
internal byte _M_engaged;
}
}
public unsafe static partial class OptionalExtensions
{
public partial struct __Internal
{
[SuppressUnmanagedCodeSecurity, DllImport("Std-symbols", EntryPoint = "_ZNKOSt8optionalIjE5valueEv", CallingConvention = __CallingConvention.Cdecl)]
internal static extern uint* Value(__IntPtr __instance);
}
public static uint Value(this global::Std.Optional<uint> @this)
{
var __arg0 = @this is null ? __IntPtr.Zero : @this.__Instance;
var ___ret = __Internal.Value(__arg0);
return *___ret;
}
}
}
namespace Std
{
}

57
src/CppParser/Bindings/CSharp/x86_64-pc-win32-msvc-d/CppSharp.CppParser.cs

@ -40207,7 +40207,7 @@ namespace CppSharp @@ -40207,7 +40207,7 @@ namespace CppSharp
public unsafe partial class PackExpansionExpr : global::CppSharp.Parser.AST.Expr, IDisposable
{
[StructLayout(LayoutKind.Sequential, Size = 80)]
[StructLayout(LayoutKind.Sequential, Size = 72)]
public new partial struct __Internal
{
internal global::CppSharp.Parser.AST.StmtClass stmtClass;
@ -40232,7 +40232,6 @@ namespace CppSharp @@ -40232,7 +40232,6 @@ namespace CppSharp
internal byte hasPlaceholderType;
internal fixed byte ellipsisLocPadding[4];
internal global::CppSharp.Parser.SourceLocation.__Internal ellipsisLoc;
internal global::Std.Optional.__Internal numExpansions;
[SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser.dll", EntryPoint = "??0PackExpansionExpr@AST@CppParser@CppSharp@@QEAA@XZ", CallingConvention = __CallingConvention.Cdecl)]
internal static extern __IntPtr ctor(__IntPtr __instance);
@ -40314,22 +40313,6 @@ namespace CppSharp @@ -40314,22 +40313,6 @@ namespace CppSharp
((__Internal*)__Instance)->ellipsisLoc = value.__Instance;
}
}
public System.Nullable<uint> NumExpansions
{
get
{
var __optionalRet0 = global::Std.Optional<uint>.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->numExpansions));
if (!__optionalRet0.HasValue)
return null;
return global::Std.OptionalExtensions.Value(__optionalRet0);
}
set
{
throw new System.NotImplementedException("Setting std::optional is currently not supported");
}
}
}
public unsafe partial class SizeOfPackExpr : global::CppSharp.Parser.AST.Expr, IDisposable
@ -40515,7 +40498,7 @@ namespace CppSharp @@ -40515,7 +40498,7 @@ namespace CppSharp
public unsafe partial class SubstNonTypeTemplateParmExpr : global::CppSharp.Parser.AST.Expr, IDisposable
{
[StructLayout(LayoutKind.Sequential, Size = 104)]
[StructLayout(LayoutKind.Sequential, Size = 96)]
public new partial struct __Internal
{
internal global::CppSharp.Parser.AST.StmtClass stmtClass;
@ -40543,7 +40526,6 @@ namespace CppSharp @@ -40543,7 +40526,6 @@ namespace CppSharp
internal __IntPtr replacement;
internal __IntPtr associatedDecl;
internal uint index;
internal global::Std.Optional.__Internal packIndex;
internal byte isReferenceParameter;
[SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser.dll", EntryPoint = "??0SubstNonTypeTemplateParmExpr@AST@CppParser@CppSharp@@QEAA@XZ", CallingConvention = __CallingConvention.Cdecl)]
@ -40668,22 +40650,6 @@ namespace CppSharp @@ -40668,22 +40650,6 @@ namespace CppSharp
}
}
public System.Nullable<uint> PackIndex
{
get
{
var __optionalRet0 = global::Std.Optional<uint>.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->packIndex));
if (!__optionalRet0.HasValue)
return null;
return global::Std.OptionalExtensions.Value(__optionalRet0);
}
set
{
throw new System.NotImplementedException("Setting std::optional is currently not supported");
}
}
public bool IsReferenceParameter
{
get
@ -41116,7 +41082,7 @@ namespace CppSharp @@ -41116,7 +41082,7 @@ namespace CppSharp
public unsafe partial class CXXFoldExpr : global::CppSharp.Parser.AST.Expr, IDisposable
{
[StructLayout(LayoutKind.Sequential, Size = 136)]
[StructLayout(LayoutKind.Sequential, Size = 128)]
public new partial struct __Internal
{
internal global::CppSharp.Parser.AST.StmtClass stmtClass;
@ -41150,7 +41116,6 @@ namespace CppSharp @@ -41150,7 +41116,6 @@ namespace CppSharp
internal global::CppSharp.Parser.SourceLocation.__Internal rParenLoc;
internal global::CppSharp.Parser.SourceLocation.__Internal ellipsisLoc;
internal global::CppSharp.Parser.AST.BinaryOperatorKind _operator;
internal global::Std.Optional.__Internal numExpansions;
[SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser.dll", EntryPoint = "??0CXXFoldExpr@AST@CppParser@CppSharp@@QEAA@XZ", CallingConvention = __CallingConvention.Cdecl)]
internal static extern __IntPtr ctor(__IntPtr __instance);
@ -41375,22 +41340,6 @@ namespace CppSharp @@ -41375,22 +41340,6 @@ namespace CppSharp
((__Internal*)__Instance)->_operator = value;
}
}
public System.Nullable<uint> NumExpansions
{
get
{
var __optionalRet0 = global::Std.Optional<uint>.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->numExpansions));
if (!__optionalRet0.HasValue)
return null;
return global::Std.OptionalExtensions.Value(__optionalRet0);
}
set
{
throw new System.NotImplementedException("Setting std::optional is currently not supported");
}
}
}
public unsafe partial class CXXParenListInitExpr : global::CppSharp.Parser.AST.Expr, IDisposable

4
src/CppParser/Bindings/CSharp/x86_64-pc-win32-msvc-d/Std-symbols.cpp

@ -2,7 +2,6 @@ @@ -2,7 +2,6 @@
#define _LIBCPP_HIDE_FROM_ABI
#include <string>
#include <optional>
#include <new>
template __declspec(dllexport) std::allocator<char>::allocator() noexcept;
@ -10,6 +9,3 @@ template __declspec(dllexport) std::basic_string<char, std::char_traits<char>, s @@ -10,6 +9,3 @@ template __declspec(dllexport) std::basic_string<char, std::char_traits<char>, s
template __declspec(dllexport) std::basic_string<char, std::char_traits<char>, std::allocator<char>>::~basic_string() noexcept;
template __declspec(dllexport) std::basic_string<char, std::char_traits<char>, std::allocator<char>>& std::basic_string<char, std::char_traits<char>, std::allocator<char>>::assign(const char* const);
template __declspec(dllexport) const char* std::basic_string<char, std::char_traits<char>, std::allocator<char>>::data() const noexcept;
template __declspec(dllexport) std::optional<unsigned int>::optional() noexcept;
template __declspec(dllexport) bool std::optional<unsigned int>::has_value() const noexcept;
template __declspec(dllexport) const unsigned int&& std::optional<unsigned int>::value() const&&;

166
src/CppParser/Bindings/CSharp/x86_64-pc-win32-msvc-d/Std.cs

@ -48,10 +48,6 @@ namespace Std @@ -48,10 +48,6 @@ namespace Std
}
}
namespace Std
{
}
namespace Std
{
namespace CompressedPair
@ -495,165 +491,3 @@ namespace Std @@ -495,165 +491,3 @@ namespace Std
}
}
}
namespace Std
{
namespace Optional
{
[StructLayout(LayoutKind.Explicit, Size = 8, Pack = 8)]
public unsafe partial struct __Internal
{
[FieldOffset(0)]
internal global::Std.NontrivialDummyType.__Internal _Dummy;
[FieldOffset(0)]
internal uint _Value;
[FieldOffset(4)]
internal byte _Has_value;
[SuppressUnmanagedCodeSecurity, DllImport("Std-symbols", EntryPoint = "??0?$optional@I@std@@QEAA@XZ", CallingConvention = __CallingConvention.Cdecl)]
internal static extern __IntPtr ctorc__N_std_S_optional__i(__IntPtr __instance);
[SuppressUnmanagedCodeSecurity, DllImport("Std-symbols", EntryPoint = "?has_value@?$optional@I@std@@QEBA_NXZ", CallingConvention = __CallingConvention.Cdecl)]
[return: MarshalAs(UnmanagedType.I1)]
internal static extern bool HasValuec__N_std_S_optional__i(__IntPtr __instance);
}
}
public unsafe partial class Optional<_Ty> : IDisposable
{
public __IntPtr __Instance { get; protected set; }
internal static readonly new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::Std.Optional<_Ty>> NativeToManagedMap =
new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::Std.Optional<_Ty>>();
internal static void __RecordNativeToManagedMapping(IntPtr native, global::Std.Optional<_Ty> managed)
{
NativeToManagedMap[native] = managed;
}
internal static bool __TryGetNativeToManagedMapping(IntPtr native, out global::Std.Optional<_Ty> managed)
{
return NativeToManagedMap.TryGetValue(native, out managed);
}
protected bool __ownsNativeInstance;
internal static Optional<_Ty> __CreateInstance(__IntPtr native, bool skipVTables = false)
{
if (native == __IntPtr.Zero)
return null;
return new Optional<_Ty>(native.ToPointer(), skipVTables);
}
internal static Optional<_Ty> __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
{
if (native == __IntPtr.Zero)
return null;
if (__TryGetNativeToManagedMapping(native, out var managed))
return (Optional<_Ty>)managed;
var result = __CreateInstance(native, skipVTables);
if (saveInstance)
__RecordNativeToManagedMapping(native, result);
return result;
}
internal static Optional<_Ty> __CreateInstance(global::Std.Optional.__Internal native, bool skipVTables = false)
{
return new Optional<_Ty>(native, skipVTables);
}
private static void* __CopyValue(global::Std.Optional.__Internal native)
{
var ret = Marshal.AllocHGlobal(sizeof(global::Std.Optional.__Internal));
*(global::Std.Optional.__Internal*) ret = native;
return ret.ToPointer();
}
private Optional(global::Std.Optional.__Internal native, bool skipVTables = false)
: this(__CopyValue(native), skipVTables)
{
__ownsNativeInstance = true;
__RecordNativeToManagedMapping(__Instance, this);
}
protected Optional(void* native, bool skipVTables = false)
{
if (native == null)
return;
__Instance = new __IntPtr(native);
}
public Optional()
{
var ___Ty = typeof(_Ty);
if (___Ty.IsAssignableFrom(typeof(uint)))
{
__Instance = Marshal.AllocHGlobal(sizeof(global::Std.Optional.__Internal));
__ownsNativeInstance = true;
__RecordNativeToManagedMapping(__Instance, this);
global::Std.Optional.__Internal.ctorc__N_std_S_optional__i(__Instance);
return;
}
throw new ArgumentOutOfRangeException("_Ty", string.Join(", ", new[] { typeof(_Ty).FullName }), "global::Std.Optional<_Ty> maps a C++ template class and therefore it only supports a limited set of types and their subclasses: <uint>.");
}
public void Dispose()
{
Dispose(disposing: true, callNativeDtor: __ownsNativeInstance);
}
partial void DisposePartial(bool disposing);
internal protected virtual void Dispose(bool disposing, bool callNativeDtor)
{
if (__Instance == IntPtr.Zero)
return;
NativeToManagedMap.TryRemove(__Instance, out _);
DisposePartial(disposing);
if (__ownsNativeInstance)
Marshal.FreeHGlobal(__Instance);
__Instance = IntPtr.Zero;
}
public bool HasValue
{
get
{
var ___Ty = typeof(_Ty);
if (___Ty.IsAssignableFrom(typeof(uint)))
{
var ___ret = global::Std.Optional.__Internal.HasValuec__N_std_S_optional__i(__Instance);
return ___ret;
}
throw new ArgumentOutOfRangeException("_Ty", string.Join(", ", new[] { typeof(_Ty).FullName }), "global::Std.Optional<_Ty> maps a C++ template class and therefore it only supports a limited set of types and their subclasses: <uint>.");
}
}
}
public unsafe static partial class NontrivialDummyType
{
[StructLayout(LayoutKind.Sequential, Size = 1, Pack = 8)]
public partial struct __Internal
{
}
}
public unsafe static partial class OptionalExtensions
{
public partial struct __Internal
{
[SuppressUnmanagedCodeSecurity, DllImport("Std-symbols", EntryPoint = "?value@?$optional@I@std@@QEHBA$$QEBIXZ", CallingConvention = __CallingConvention.Cdecl)]
internal static extern uint* Value(__IntPtr __instance);
}
public static uint Value(this global::Std.Optional<uint> @this)
{
var __arg0 = @this is null ? __IntPtr.Zero : @this.__Instance;
var ___ret = __Internal.Value(__arg0);
return *___ret;
}
}
}

57
src/CppParser/Bindings/CSharp/x86_64-pc-win32-msvc/CppSharp.CppParser.cs

@ -40207,7 +40207,7 @@ namespace CppSharp @@ -40207,7 +40207,7 @@ namespace CppSharp
public unsafe partial class PackExpansionExpr : global::CppSharp.Parser.AST.Expr, IDisposable
{
[StructLayout(LayoutKind.Sequential, Size = 80)]
[StructLayout(LayoutKind.Sequential, Size = 72)]
public new partial struct __Internal
{
internal global::CppSharp.Parser.AST.StmtClass stmtClass;
@ -40232,7 +40232,6 @@ namespace CppSharp @@ -40232,7 +40232,6 @@ namespace CppSharp
internal byte hasPlaceholderType;
internal fixed byte ellipsisLocPadding[4];
internal global::CppSharp.Parser.SourceLocation.__Internal ellipsisLoc;
internal global::Std.Optional.__Internal numExpansions;
[SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser.dll", EntryPoint = "??0PackExpansionExpr@AST@CppParser@CppSharp@@QEAA@XZ", CallingConvention = __CallingConvention.Cdecl)]
internal static extern __IntPtr ctor(__IntPtr __instance);
@ -40314,22 +40313,6 @@ namespace CppSharp @@ -40314,22 +40313,6 @@ namespace CppSharp
((__Internal*)__Instance)->ellipsisLoc = value.__Instance;
}
}
public System.Nullable<uint> NumExpansions
{
get
{
var __optionalRet0 = global::Std.Optional<uint>.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->numExpansions));
if (!__optionalRet0.HasValue)
return null;
return global::Std.OptionalExtensions.Value(__optionalRet0);
}
set
{
throw new System.NotImplementedException("Setting std::optional is currently not supported");
}
}
}
public unsafe partial class SizeOfPackExpr : global::CppSharp.Parser.AST.Expr, IDisposable
@ -40515,7 +40498,7 @@ namespace CppSharp @@ -40515,7 +40498,7 @@ namespace CppSharp
public unsafe partial class SubstNonTypeTemplateParmExpr : global::CppSharp.Parser.AST.Expr, IDisposable
{
[StructLayout(LayoutKind.Sequential, Size = 104)]
[StructLayout(LayoutKind.Sequential, Size = 96)]
public new partial struct __Internal
{
internal global::CppSharp.Parser.AST.StmtClass stmtClass;
@ -40543,7 +40526,6 @@ namespace CppSharp @@ -40543,7 +40526,6 @@ namespace CppSharp
internal __IntPtr replacement;
internal __IntPtr associatedDecl;
internal uint index;
internal global::Std.Optional.__Internal packIndex;
internal byte isReferenceParameter;
[SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser.dll", EntryPoint = "??0SubstNonTypeTemplateParmExpr@AST@CppParser@CppSharp@@QEAA@XZ", CallingConvention = __CallingConvention.Cdecl)]
@ -40668,22 +40650,6 @@ namespace CppSharp @@ -40668,22 +40650,6 @@ namespace CppSharp
}
}
public System.Nullable<uint> PackIndex
{
get
{
var __optionalRet0 = global::Std.Optional<uint>.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->packIndex));
if (!__optionalRet0.HasValue)
return null;
return global::Std.OptionalExtensions.Value(__optionalRet0);
}
set
{
throw new System.NotImplementedException("Setting std::optional is currently not supported");
}
}
public bool IsReferenceParameter
{
get
@ -41116,7 +41082,7 @@ namespace CppSharp @@ -41116,7 +41082,7 @@ namespace CppSharp
public unsafe partial class CXXFoldExpr : global::CppSharp.Parser.AST.Expr, IDisposable
{
[StructLayout(LayoutKind.Sequential, Size = 136)]
[StructLayout(LayoutKind.Sequential, Size = 128)]
public new partial struct __Internal
{
internal global::CppSharp.Parser.AST.StmtClass stmtClass;
@ -41150,7 +41116,6 @@ namespace CppSharp @@ -41150,7 +41116,6 @@ namespace CppSharp
internal global::CppSharp.Parser.SourceLocation.__Internal rParenLoc;
internal global::CppSharp.Parser.SourceLocation.__Internal ellipsisLoc;
internal global::CppSharp.Parser.AST.BinaryOperatorKind _operator;
internal global::Std.Optional.__Internal numExpansions;
[SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser.dll", EntryPoint = "??0CXXFoldExpr@AST@CppParser@CppSharp@@QEAA@XZ", CallingConvention = __CallingConvention.Cdecl)]
internal static extern __IntPtr ctor(__IntPtr __instance);
@ -41375,22 +41340,6 @@ namespace CppSharp @@ -41375,22 +41340,6 @@ namespace CppSharp
((__Internal*)__Instance)->_operator = value;
}
}
public System.Nullable<uint> NumExpansions
{
get
{
var __optionalRet0 = global::Std.Optional<uint>.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->numExpansions));
if (!__optionalRet0.HasValue)
return null;
return global::Std.OptionalExtensions.Value(__optionalRet0);
}
set
{
throw new System.NotImplementedException("Setting std::optional is currently not supported");
}
}
}
public unsafe partial class CXXParenListInitExpr : global::CppSharp.Parser.AST.Expr, IDisposable

4
src/CppParser/Bindings/CSharp/x86_64-pc-win32-msvc/Std-symbols.cpp

@ -2,7 +2,6 @@ @@ -2,7 +2,6 @@
#define _LIBCPP_HIDE_FROM_ABI
#include <string>
#include <optional>
#include <new>
template __declspec(dllexport) std::allocator<char>::allocator() noexcept;
@ -10,6 +9,3 @@ template __declspec(dllexport) std::basic_string<char, std::char_traits<char>, s @@ -10,6 +9,3 @@ template __declspec(dllexport) std::basic_string<char, std::char_traits<char>, s
template __declspec(dllexport) std::basic_string<char, std::char_traits<char>, std::allocator<char>>::~basic_string() noexcept;
template __declspec(dllexport) std::basic_string<char, std::char_traits<char>, std::allocator<char>>& std::basic_string<char, std::char_traits<char>, std::allocator<char>>::assign(const char* const);
template __declspec(dllexport) const char* std::basic_string<char, std::char_traits<char>, std::allocator<char>>::data() const noexcept;
template __declspec(dllexport) std::optional<unsigned int>::optional() noexcept;
template __declspec(dllexport) bool std::optional<unsigned int>::has_value() const noexcept;
template __declspec(dllexport) const unsigned int&& std::optional<unsigned int>::value() const&&;

166
src/CppParser/Bindings/CSharp/x86_64-pc-win32-msvc/Std.cs

@ -47,10 +47,6 @@ namespace Std @@ -47,10 +47,6 @@ namespace Std
}
}
namespace Std
{
}
namespace Std
{
namespace CompressedPair
@ -492,165 +488,3 @@ namespace Std @@ -492,165 +488,3 @@ namespace Std
}
}
}
namespace Std
{
namespace Optional
{
[StructLayout(LayoutKind.Explicit, Size = 8, Pack = 8)]
public unsafe partial struct __Internal
{
[FieldOffset(0)]
internal global::Std.NontrivialDummyType.__Internal _Dummy;
[FieldOffset(0)]
internal uint _Value;
[FieldOffset(4)]
internal byte _Has_value;
[SuppressUnmanagedCodeSecurity, DllImport("Std-symbols", EntryPoint = "??0?$optional@I@std@@QEAA@XZ", CallingConvention = __CallingConvention.Cdecl)]
internal static extern __IntPtr ctorc__N_std_S_optional__i(__IntPtr __instance);
[SuppressUnmanagedCodeSecurity, DllImport("Std-symbols", EntryPoint = "?has_value@?$optional@I@std@@QEBA_NXZ", CallingConvention = __CallingConvention.Cdecl)]
[return: MarshalAs(UnmanagedType.I1)]
internal static extern bool HasValuec__N_std_S_optional__i(__IntPtr __instance);
}
}
public unsafe partial class Optional<_Ty> : IDisposable
{
public __IntPtr __Instance { get; protected set; }
internal static readonly new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::Std.Optional<_Ty>> NativeToManagedMap =
new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::Std.Optional<_Ty>>();
internal static void __RecordNativeToManagedMapping(IntPtr native, global::Std.Optional<_Ty> managed)
{
NativeToManagedMap[native] = managed;
}
internal static bool __TryGetNativeToManagedMapping(IntPtr native, out global::Std.Optional<_Ty> managed)
{
return NativeToManagedMap.TryGetValue(native, out managed);
}
protected bool __ownsNativeInstance;
internal static Optional<_Ty> __CreateInstance(__IntPtr native, bool skipVTables = false)
{
if (native == __IntPtr.Zero)
return null;
return new Optional<_Ty>(native.ToPointer(), skipVTables);
}
internal static Optional<_Ty> __GetOrCreateInstance(__IntPtr native, bool saveInstance = false, bool skipVTables = false)
{
if (native == __IntPtr.Zero)
return null;
if (__TryGetNativeToManagedMapping(native, out var managed))
return (Optional<_Ty>)managed;
var result = __CreateInstance(native, skipVTables);
if (saveInstance)
__RecordNativeToManagedMapping(native, result);
return result;
}
internal static Optional<_Ty> __CreateInstance(global::Std.Optional.__Internal native, bool skipVTables = false)
{
return new Optional<_Ty>(native, skipVTables);
}
private static void* __CopyValue(global::Std.Optional.__Internal native)
{
var ret = Marshal.AllocHGlobal(sizeof(global::Std.Optional.__Internal));
*(global::Std.Optional.__Internal*) ret = native;
return ret.ToPointer();
}
private Optional(global::Std.Optional.__Internal native, bool skipVTables = false)
: this(__CopyValue(native), skipVTables)
{
__ownsNativeInstance = true;
__RecordNativeToManagedMapping(__Instance, this);
}
protected Optional(void* native, bool skipVTables = false)
{
if (native == null)
return;
__Instance = new __IntPtr(native);
}
public Optional()
{
var ___Ty = typeof(_Ty);
if (___Ty.IsAssignableFrom(typeof(uint)))
{
__Instance = Marshal.AllocHGlobal(sizeof(global::Std.Optional.__Internal));
__ownsNativeInstance = true;
__RecordNativeToManagedMapping(__Instance, this);
global::Std.Optional.__Internal.ctorc__N_std_S_optional__i(__Instance);
return;
}
throw new ArgumentOutOfRangeException("_Ty", string.Join(", ", new[] { typeof(_Ty).FullName }), "global::Std.Optional<_Ty> maps a C++ template class and therefore it only supports a limited set of types and their subclasses: <uint>.");
}
public void Dispose()
{
Dispose(disposing: true, callNativeDtor: __ownsNativeInstance);
}
partial void DisposePartial(bool disposing);
internal protected virtual void Dispose(bool disposing, bool callNativeDtor)
{
if (__Instance == IntPtr.Zero)
return;
NativeToManagedMap.TryRemove(__Instance, out _);
DisposePartial(disposing);
if (__ownsNativeInstance)
Marshal.FreeHGlobal(__Instance);
__Instance = IntPtr.Zero;
}
public bool HasValue
{
get
{
var ___Ty = typeof(_Ty);
if (___Ty.IsAssignableFrom(typeof(uint)))
{
var ___ret = global::Std.Optional.__Internal.HasValuec__N_std_S_optional__i(__Instance);
return ___ret;
}
throw new ArgumentOutOfRangeException("_Ty", string.Join(", ", new[] { typeof(_Ty).FullName }), "global::Std.Optional<_Ty> maps a C++ template class and therefore it only supports a limited set of types and their subclasses: <uint>.");
}
}
}
public unsafe static partial class NontrivialDummyType
{
[StructLayout(LayoutKind.Sequential, Size = 1, Pack = 8)]
public partial struct __Internal
{
}
}
public unsafe static partial class OptionalExtensions
{
public partial struct __Internal
{
[SuppressUnmanagedCodeSecurity, DllImport("Std-symbols", EntryPoint = "?value@?$optional@I@std@@QEHBA$$QEBIXZ", CallingConvention = __CallingConvention.Cdecl)]
internal static extern uint* Value(__IntPtr __instance);
}
public static uint Value(this global::Std.Optional<uint> @this)
{
var __arg0 = @this is null ? __IntPtr.Zero : @this.__Instance;
var ___ret = __Internal.Value(__arg0);
return *___ret;
}
}
}

3
src/CppParser/Bootstrap/Bootstrap.cs

@ -1781,6 +1781,9 @@ namespace CppSharp @@ -1781,6 +1781,9 @@ namespace CppSharp
if (typeName.Contains("DecomposedForm"))
return true;
if (typeName.Contains("optional"))
return true;
// ConstantExpr (TODO: Fix this properly)
if (property.Name.Contains("resultAsAP") ||
property.Name.Contains("aPValueResult") ||

3
src/CppParser/Expr.cpp

@ -1093,7 +1093,6 @@ CXXNoexceptExpr::CXXNoexceptExpr() @@ -1093,7 +1093,6 @@ CXXNoexceptExpr::CXXNoexceptExpr()
PackExpansionExpr::PackExpansionExpr()
: Expr(StmtClass::PackExpansionExpr)
, ellipsisLoc(SourceLocation())
, numExpansions(std::optional<unsigned int>())
{
}
@ -1114,7 +1113,6 @@ SubstNonTypeTemplateParmExpr::SubstNonTypeTemplateParmExpr() @@ -1114,7 +1113,6 @@ SubstNonTypeTemplateParmExpr::SubstNonTypeTemplateParmExpr()
, replacement(nullptr)
, associatedDecl(nullptr)
, index(0)
, packIndex(std::optional<unsigned int>())
, isReferenceParameter(false)
{
}
@ -1156,7 +1154,6 @@ CXXFoldExpr::CXXFoldExpr() @@ -1156,7 +1154,6 @@ CXXFoldExpr::CXXFoldExpr()
, rParenLoc(SourceLocation())
, ellipsisLoc(SourceLocation())
, _operator(BinaryOperatorKind::PtrMemD)
, numExpansions(std::optional<unsigned int>())
{
}

4
src/CppParser/Expr.h

@ -8,7 +8,6 @@ @@ -8,7 +8,6 @@
#pragma once
#include "Stmt.h"
#include <optional>
namespace CppSharp::CppParser::AST {
@ -1709,7 +1708,6 @@ class CS_API PackExpansionExpr : public Expr @@ -1709,7 +1708,6 @@ class CS_API PackExpansionExpr : public Expr
public:
PackExpansionExpr();
SourceLocation ellipsisLoc;
std::optional<unsigned int> numExpansions;
};
class CS_API SizeOfPackExpr : public Expr
@ -1732,7 +1730,6 @@ public: @@ -1732,7 +1730,6 @@ public:
Expr* replacement;
Declaration* associatedDecl;
unsigned int index;
std::optional<unsigned int> packIndex;
bool isReferenceParameter;
};
@ -1786,7 +1783,6 @@ public: @@ -1786,7 +1783,6 @@ public:
SourceLocation rParenLoc;
SourceLocation ellipsisLoc;
BinaryOperatorKind _operator;
std::optional<unsigned int> numExpansions;
};
class CS_API CXXParenListInitExpr : public Expr

3
src/CppParser/ParseExpr.cpp

@ -2509,7 +2509,6 @@ AST::Expr* Parser::WalkExpression(const clang::Expr* Expr) @@ -2509,7 +2509,6 @@ AST::Expr* Parser::WalkExpression(const clang::Expr* Expr)
_S->isOrdinaryOrBitFieldObject = S->isOrdinaryOrBitFieldObject();
_S->refersToMatrixElement = S->refersToMatrixElement();
_S->hasPlaceholderType = S->hasPlaceholderType();
_S->numExpansions = S->getNumExpansions();
_Expr = _S;
break;
}
@ -2560,7 +2559,6 @@ AST::Expr* Parser::WalkExpression(const clang::Expr* Expr) @@ -2560,7 +2559,6 @@ AST::Expr* Parser::WalkExpression(const clang::Expr* Expr)
_S->replacement = static_cast<AST::Expr*>(WalkExpression(S->getReplacement()));
_S->associatedDecl = static_cast<AST::Declaration*>(WalkDeclaration(S->getAssociatedDecl()));
_S->index = S->getIndex();
_S->packIndex = S->getPackIndex();
_S->isReferenceParameter = S->isReferenceParameter();
_Expr = _S;
break;
@ -2665,7 +2663,6 @@ AST::Expr* Parser::WalkExpression(const clang::Expr* Expr) @@ -2665,7 +2663,6 @@ AST::Expr* Parser::WalkExpression(const clang::Expr* Expr)
_S->pattern = static_cast<AST::Expr*>(WalkExpression(S->getPattern()));
_S->init = static_cast<AST::Expr*>(WalkExpression(S->getInit()));
_S->_operator = (AST::BinaryOperatorKind)S->getOperator();
_S->numExpansions = S->getNumExpansions();
_Expr = _S;
break;
}

2
src/CppParser/Parser.cpp

@ -157,8 +157,6 @@ Parser::Parser(CppParserOptions* Opts) @@ -157,8 +157,6 @@ Parser::Parser(CppParserOptions* Opts)
{
supportedStdTypes.insert("allocator");
supportedStdTypes.insert("basic_string");
supportedStdTypes.insert("optional");
supportedStdTypes.insert("vector");
}
LayoutField Parser::WalkVTablePointer(Class* Class,

25
src/Generator/Passes/IgnoreSystemDeclarationsPass.cs

@ -8,10 +8,9 @@ namespace CppSharp.Passes @@ -8,10 +8,9 @@ namespace CppSharp.Passes
{
public IgnoreSystemDeclarationsPass()
=> VisitOptions.ResetFlags(VisitFlags.NamespaceClasses |
VisitFlags.ClassTemplateSpecializations |
VisitFlags.NamespaceEnums |
VisitFlags.NamespaceFunctions |
//VisitFlags.NamespaceTypedefs | // FIXME: Adding this breaks test builds
VisitFlags.NamespaceEnums |
// VisitFlags.NamespaceFunctions |
// VisitFlags.NamespaceTypedefs | // FIXME: Adding this breaks test builds
VisitFlags.NamespaceVariables
);
@ -50,25 +49,12 @@ namespace CppSharp.Passes @@ -50,25 +49,12 @@ namespace CppSharp.Passes
case "basic_string":
case "allocator":
case "char_traits":
@class.GenerationKind = GenerationKind.Generate;
foreach (var specialization in from s in @class.Specializations
where !s.Arguments.Any(a =>
s.UnsupportedTemplateArgument(a, Context.TypeMaps))
let arg = s.Arguments[0].Type.Type.Desugar()
where arg.IsPrimitiveType(PrimitiveType.Char)
select s)
{
specialization.GenerationKind = GenerationKind.Generate;
InternalizeSpecializationsInFields(specialization);
}
break;
case "optional":
case "vector":
@class.GenerationKind = GenerationKind.Generate;
foreach (var specialization in from s in @class.Specializations
where !s.Arguments.Any(a =>
s.UnsupportedTemplateArgument(a, Context.TypeMaps))
let arg = s.Arguments[0].Type.Type.Desugar()
where arg.IsPrimitiveType(PrimitiveType.Char)
select s)
{
specialization.GenerationKind = GenerationKind.Generate;
@ -76,6 +62,7 @@ namespace CppSharp.Passes @@ -76,6 +62,7 @@ namespace CppSharp.Passes
}
break;
}
return true;
}

1
src/Generator/Passes/SymbolsCodeGenerator.cs

@ -34,7 +34,6 @@ namespace CppSharp.Passes @@ -34,7 +34,6 @@ namespace CppSharp.Passes
WriteLine("#define _LIBCPP_HIDE_FROM_ABI");
NewLine();
WriteLine("#include <string>");
WriteLine("#include <optional>");
}
else
foreach (var header in TranslationUnit.Module.Headers)

104
src/Generator/Types/Std/Stdlib.CLI.cs

@ -121,110 +121,6 @@ namespace CppSharp.Types.Std.CLI @@ -121,110 +121,6 @@ namespace CppSharp.Types.Std.CLI
ctx.ReturnVarName);
}
}
[TypeMap("std::optional", GeneratorKindID = GeneratorKind.CLI_ID)]
public class Optional : TypeMap
{
public override bool IsIgnored
{
get
{
var finalType = Type.GetFinalPointee() ?? Type;
if (finalType is not TemplateSpecializationType type)
{
var injectedClassNameType = (InjectedClassNameType)finalType;
type = (TemplateSpecializationType)injectedClassNameType.InjectedSpecializationType.Type;
}
var checker = new TypeIgnoreChecker(TypeMapDatabase);
type.Arguments[0].Type.Visit(checker);
return checker.IsIgnored;
}
}
public override Type SignatureType(TypePrinterContext ctx)
{
return new CustomType($"System::Nullable<{ ctx.GetTemplateParameterList() }>");
}
public override void MarshalToNative(MarshalContext ctx)
{
var desugared = Type.Desugar();
var templateType = desugared as TemplateSpecializationType;
var type = templateType!.Arguments[0].Type;
var isPointerToPrimitive = type.Type.IsPointerToPrimitiveType();
var managedType = isPointerToPrimitive
? new CILType(typeof(nint))
: type.Type;
var paramName = ctx.Parameter?.Name ?? ctx.ArgName;
ctx.Before.WriteLineIndent("if (!{0}.HasValue)", paramName);
ctx.Before.WriteOpenBraceAndIndent();
{
ctx.Before.WriteLine("{0} = std::nullopt;", ctx.ReturnVarName);
ctx.Before.WriteLine("return;");
ctx.Before.UnindentAndWriteCloseBrace();
}
var param = new Parameter
{
Name = paramName + ".Value",
QualifiedType = type
};
var elementCtx = new MarshalContext(ctx.Context, ctx.Indentation)
{
Parameter = param,
ArgName = param.Name,
};
var marshal = new CLIMarshalManagedToNativePrinter(elementCtx);
type.Type.Visit(marshal);
if (!string.IsNullOrWhiteSpace(marshal.Context.Before))
ctx.Before.Write(marshal.Context.Before);
if (isPointerToPrimitive)
ctx.Return.Write("{0}.ToPointer()", marshal.Context.Return);
else
ctx.Return.Write(marshal.Context.Return);
}
public override void MarshalToManaged(MarshalContext ctx)
{
var desugared = Type.Desugar();
var templateType = desugared as TemplateSpecializationType;
var type = templateType!.Arguments[0].Type;
var isPointerToPrimitive = type.Type.IsPointerToPrimitiveType();
var managedType = isPointerToPrimitive
? new CILType(typeof(nint))
: type.Type;
ctx.Before.WriteLine("if (!{0}.has_value())", ctx.ReturnVarName);
{
ctx.Before.WriteLineIndent("return {};");
ctx.Before.NewLine();
}
var elementCtx = new MarshalContext(ctx.Context, ctx.Indentation)
{
ReturnVarName = ctx.ReturnVarName + ".value()",
ReturnType = type
};
var marshal = new CLIMarshalNativeToManagedPrinter(elementCtx);
type.Type.Visit(marshal);
if (!string.IsNullOrWhiteSpace(marshal.Context.Before))
ctx.Before.Write(marshal.Context.Before);
if (isPointerToPrimitive)
ctx.Return.Write("{0}({1})", managedType, marshal.Context.Return);
else
ctx.Return.Write(marshal.Context.Return);
}
}
[TypeMap("std::vector", GeneratorKindID = GeneratorKind.CLI_ID)]
public class Vector : TypeMap

140
src/Generator/Types/Std/Stdlib.CSharp.cs

@ -411,146 +411,6 @@ namespace CppSharp.Types.Std.CSharp @@ -411,146 +411,6 @@ namespace CppSharp.Types.Std.CSharp
}
}
[TypeMap("std::optional", GeneratorKindID = GeneratorKind.CSharp_ID)]
public class Optional : TypeMap
{
public override bool IsIgnored
{
get
{
var finalType = Type.GetFinalPointee() ?? Type;
if (finalType is TagType)
return false;
if (finalType is not TemplateSpecializationType type)
{
var injectedClassNameType = (InjectedClassNameType)finalType;
type = (TemplateSpecializationType)injectedClassNameType.InjectedSpecializationType.Type;
}
var checker = new TypeIgnoreChecker(TypeMapDatabase);
type.Arguments[0].Type.Visit(checker);
return checker.IsIgnored;
}
}
public override Type SignatureType(TypePrinterContext ctx)
{
if (ctx.Kind == TypePrinterContextKind.Managed)
return new CustomType($"System.Nullable<{ctx.GetTemplateParameterList()}>");
var typePrinter = new CSharpTypePrinter(null);
typePrinter.PushContext(TypePrinterContextKind.Native);
if (ctx.Type.Desugar().IsAddress())
return new CustomType(typePrinter.IntPtrType);
ClassTemplateSpecialization optionalClass = GetOptionalClass(ctx.Type);
return new CustomType(optionalClass.Visit(typePrinter).Type);
}
public override void MarshalToNative(MarshalContext ctx)
{
Type type = ctx.Parameter.Type.Desugar();
ClassTemplateSpecialization optional = GetOptionalClass(type);
var typePrinter = new CSharpTypePrinter(ctx.Context);
if (!ctx.Parameter.Type.Desugar().IsAddress() &&
ctx.MarshalKind != MarshalKind.NativeField)
ctx.Return.Write($"*({typePrinter.PrintNative(optional)}*) ");
string qualifiedOptional = GetQualifiedOptionalClass(optional);
var assign = optional.Methods.First(m => m.OriginalName == "operator=");
if (ctx.MarshalKind == MarshalKind.NativeField)
{
string var;
if (ctx.ReturnVarName.LastIndexOf('.') > ctx.ReturnVarName.LastIndexOf("->"))
{
var = Generator.GeneratedIdentifier(ctx.ArgName);
ctx.Before.WriteLine($"fixed (void* {var} = &{ctx.ReturnVarName})");
ctx.Before.WriteOpenBraceAndIndent();
(ctx as CSharpMarshalContext)!.HasCodeBlock = true;
}
else
{
var = $"&{ctx.ReturnVarName}";
}
ctx.Return.Write($"{qualifiedOptional}Extensions.{Helpers.InternalStruct}.{assign.Name}(new {typePrinter.IntPtrType}({var}), ");
ctx.Return.Write($"{ctx.Parameter.Name})");
ctx.ReturnVarName = string.Empty;
}
else
{
var varOptional = $"__optional{ctx.ParameterIndex}";
ctx.Before.WriteLine($"var {varOptional} = new {optional.Visit(typePrinter)}();");
ctx.Before.Write($"{qualifiedOptional}Extensions.{assign.Name}({varOptional}, ");
ctx.Before.WriteLine($"{ctx.Parameter.Name});");
ctx.Return.Write($"{varOptional}.{Helpers.InstanceIdentifier}");
ctx.Cleanup.WriteLine($"{varOptional}.Dispose({(!Type.IsAddress() || ctx.Parameter?.IsIndirect == true ? "disposing: true, callNativeDtor:false" : string.Empty)});");
}
}
public override void MarshalToManaged(MarshalContext ctx)
{
var type = Type.Desugar(resolveTemplateSubstitution: false);
ClassTemplateSpecialization optional = GetOptionalClass(type);
var value = optional.Methods.First(m => m.OriginalName == "value");
var typePrinter = new CSharpTypePrinter(ctx.Context);
string qualifiedOptional = GetQualifiedOptionalClass(optional);
string varOptional = $"__optionalRet{ctx.ParameterIndex}";
bool usePointer = type.IsAddress() || ctx.MarshalKind == MarshalKind.NativeField ||
ctx.MarshalKind == MarshalKind.ReturnVariableArray;
ctx.Before.WriteLine($"var {varOptional} = {optional.Visit(typePrinter)}.{Helpers.CreateInstanceIdentifier}({(usePointer ? string.Empty : $"new {typePrinter.IntPtrType}(&")}{ctx.ReturnVarName}{(usePointer ? string.Empty : ")")});");
ctx.Before.WriteLine($"if (!{varOptional}.HasValue)");
ctx.Before.WriteLineIndent("return null;");
string retValue = $"{qualifiedOptional}Extensions.{value.Name}({varOptional})";
if (usePointer)
{
ctx.Return.Write(retValue);
}
else
{
string retString = $"{Generator.GeneratedIdentifier("retValue")}{ctx.ParameterIndex}";
ctx.Before.WriteLine($"var {retString} = {retValue};");
ctx.Before.WriteLine($"{varOptional}.Dispose();");
ctx.Return.Write(retString);
}
}
private static string GetQualifiedOptionalClass(ClassTemplateSpecialization optional)
{
var declContext = optional.TemplatedDecl.TemplatedDecl;
var names = new Stack<string>();
while (declContext is not TranslationUnit)
{
var isInlineNamespace = declContext is Namespace { IsInline: true };
if (!isInlineNamespace)
names.Push(declContext.Name);
declContext = declContext.Namespace;
}
return $"global::{string.Join(".", names)}";
}
private static ClassTemplateSpecialization GetOptionalClass(Type type)
{
var desugared = type.Desugar();
var template = (desugared.GetFinalPointee() ?? desugared).Desugar();
if (template is TemplateSpecializationType templateSpecializationType)
return templateSpecializationType.GetClassTemplateSpecialization();
return (ClassTemplateSpecialization)((TagType)template).Declaration;
}
}
[TypeMap("FILE", GeneratorKindID = GeneratorKind.CSharp_ID)]
public class FILE : TypeMap

3
src/Parser/ASTConverter.Expr.cs

@ -3565,7 +3565,6 @@ namespace CppSharp @@ -3565,7 +3565,6 @@ namespace CppSharp
_expr.RefersToMatrixElement = expr.RefersToMatrixElement;
_expr.HasPlaceholderType = expr.HasPlaceholderType;
_expr.EllipsisLoc = VisitSourceLocation(expr.EllipsisLoc);
_expr.NumExpansions = expr.NumExpansions;
return _expr;
}
@ -3626,7 +3625,6 @@ namespace CppSharp @@ -3626,7 +3625,6 @@ namespace CppSharp
_expr.Replacement = VisitExpression(expr.Replacement) as AST.Expr;
_expr.AssociatedDecl = VisitDeclaration(expr.AssociatedDecl) as AST.Declaration;
_expr.Index = expr.Index;
_expr.PackIndex = expr.PackIndex;
_expr.IsReferenceParameter = expr.IsReferenceParameter;
return _expr;
}
@ -3748,7 +3746,6 @@ namespace CppSharp @@ -3748,7 +3746,6 @@ namespace CppSharp
_expr.RParenLoc = VisitSourceLocation(expr.RParenLoc);
_expr.EllipsisLoc = VisitSourceLocation(expr.EllipsisLoc);
_expr.Operator = (AST.BinaryOperatorKind) expr.Operator;
_expr.NumExpansions = expr.NumExpansions;
return _expr;
}

Loading…
Cancel
Save