From 89f9648fc4daaa66a44742f1d559d899cf9f635b Mon Sep 17 00:00:00 2001 From: duckdoom5 Date: Sun, 23 Feb 2025 17:35:48 +0100 Subject: [PATCH] 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 --- src/AST/Expr.cs | 3 - src/CppParser/Bindings/CLI/Expr.cpp | 54 ------ src/CppParser/Bindings/CLI/Expr.h | 18 -- .../CppSharp.CppParser.cs | 57 +----- .../i686-apple-darwin12.4.0/Std-symbols.cpp | 7 +- .../CSharp/i686-apple-darwin12.4.0/Std.cs | 134 ++++++++------ .../CppSharp.CppParser.cs | 57 +----- .../i686-pc-win32-msvc-d/Std-symbols.cpp | 4 - .../CSharp/i686-pc-win32-msvc-d/Std.cs | 166 ------------------ .../i686-pc-win32-msvc/CppSharp.CppParser.cs | 57 +----- .../CSharp/i686-pc-win32-msvc/Std-symbols.cpp | 4 - .../Bindings/CSharp/i686-pc-win32-msvc/Std.cs | 166 ------------------ .../CppSharp.CppParser.cs | 57 +----- .../x86_64-apple-darwin12.4.0/Std-symbols.cpp | 7 +- .../CSharp/x86_64-apple-darwin12.4.0/Std.cs | 134 ++++++++------ .../CppSharp.CppParser.cs | 57 +----- .../x86_64-linux-gnu-cxx11abi/Std-symbols.cpp | 4 - .../CSharp/x86_64-linux-gnu-cxx11abi/Std.cs | 157 ----------------- .../x86_64-linux-gnu/CppSharp.CppParser.cs | 57 +----- .../CSharp/x86_64-linux-gnu/Std-symbols.cpp | 4 - .../Bindings/CSharp/x86_64-linux-gnu/Std.cs | 157 ----------------- .../CppSharp.CppParser.cs | 57 +----- .../x86_64-pc-win32-msvc-d/Std-symbols.cpp | 4 - .../CSharp/x86_64-pc-win32-msvc-d/Std.cs | 166 ------------------ .../CppSharp.CppParser.cs | 57 +----- .../x86_64-pc-win32-msvc/Std-symbols.cpp | 4 - .../CSharp/x86_64-pc-win32-msvc/Std.cs | 166 ------------------ src/CppParser/Bootstrap/Bootstrap.cs | 3 + src/CppParser/Expr.cpp | 3 - src/CppParser/Expr.h | 4 - src/CppParser/ParseExpr.cpp | 3 - src/CppParser/Parser.cpp | 2 - .../Passes/IgnoreSystemDeclarationsPass.cs | 25 +-- src/Generator/Passes/SymbolsCodeGenerator.cs | 1 - src/Generator/Types/Std/Stdlib.CLI.cs | 104 ----------- src/Generator/Types/Std/Stdlib.CSharp.cs | 140 --------------- src/Parser/ASTConverter.Expr.cs | 3 - 37 files changed, 193 insertions(+), 1910 deletions(-) diff --git a/src/AST/Expr.cs b/src/AST/Expr.cs index dcea52a4..979ec567 100644 --- a/src/AST/Expr.cs +++ b/src/AST/Expr.cs @@ -2141,7 +2141,6 @@ namespace CppSharp.AST } public SourceLocation EllipsisLoc { get; set; } - public uint? NumExpansions { get; set; } public override T Visit(IStmtVisitor visitor) => visitor.VisitPackExpansionExpr(this); @@ -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(IStmtVisitor visitor) => @@ -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(IStmtVisitor visitor) => visitor.VisitCXXFoldExpr(this); diff --git a/src/CppParser/Bindings/CLI/Expr.cpp b/src/CppParser/Bindings/CLI/Expr.cpp index 2ada2100..c81f4a57 100644 --- a/src/CppParser/Bindings/CLI/Expr.cpp +++ b/src/CppParser/Bindings/CLI/Expr.cpp @@ -9722,24 +9722,6 @@ void CppSharp::Parser::AST::PackExpansionExpr::EllipsisLoc::set(CppSharp::Parser ((class ::CppSharp::CppParser::AST::PackExpansionExpr*)NativePtr)->ellipsisLoc = _marshal0; } -System::Nullable 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 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 ((class ::CppSharp::CppParser::AST::SubstNonTypeTemplateParmExpr*)NativePtr)->index = value; } -System::Nullable 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 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 ((class ::CppSharp::CppParser::AST::CXXFoldExpr*)NativePtr)->_operator = (enum ::CppSharp::CppParser::AST::BinaryOperatorKind)value; } -System::Nullable 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 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) { diff --git a/src/CppParser/Bindings/CLI/Expr.h b/src/CppParser/Bindings/CLI/Expr.h index 35e06e9d..d4b495c6 100644 --- a/src/CppParser/Bindings/CLI/Expr.h +++ b/src/CppParser/Bindings/CLI/Expr.h @@ -5317,12 +5317,6 @@ namespace CppSharp CppSharp::Parser::SourceLocation get(); void set(CppSharp::Parser::SourceLocation); } - - property System::Nullable NumExpansions - { - System::Nullable get(); - void set(System::Nullable); - } }; public ref class SizeOfPackExpr : CppSharp::Parser::AST::Expr @@ -5414,12 +5408,6 @@ namespace CppSharp void set(unsigned int); } - property System::Nullable PackIndex - { - System::Nullable get(); - void set(System::Nullable); - } - property bool IsReferenceParameter { bool get(); @@ -5613,12 +5601,6 @@ namespace CppSharp CppSharp::Parser::AST::BinaryOperatorKind get(); void set(CppSharp::Parser::AST::BinaryOperatorKind); } - - property System::Nullable NumExpansions - { - System::Nullable get(); - void set(System::Nullable); - } }; public ref class CXXParenListInitExpr : CppSharp::Parser::AST::Expr diff --git a/src/CppParser/Bindings/CSharp/i686-apple-darwin12.4.0/CppSharp.CppParser.cs b/src/CppParser/Bindings/CSharp/i686-apple-darwin12.4.0/CppSharp.CppParser.cs index e08c4ada..8362852a 100644 --- a/src/CppParser/Bindings/CSharp/i686-apple-darwin12.4.0/CppSharp.CppParser.cs +++ b/src/CppParser/Bindings/CSharp/i686-apple-darwin12.4.0/CppSharp.CppParser.cs @@ -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 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 ((__Internal*)__Instance)->ellipsisLoc = value.__Instance; } } - - public System.Nullable NumExpansions - { - get - { - var __optionalRet0 = global::Std.Optional.__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 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 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 } } - public System.Nullable PackIndex - { - get - { - var __optionalRet0 = global::Std.Optional.__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 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 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 ((__Internal*)__Instance)->_operator = value; } } - - public System.Nullable NumExpansions - { - get - { - var __optionalRet0 = global::Std.Optional.__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 diff --git a/src/CppParser/Bindings/CSharp/i686-apple-darwin12.4.0/Std-symbols.cpp b/src/CppParser/Bindings/CSharp/i686-apple-darwin12.4.0/Std-symbols.cpp index f232c341..26e5ae16 100644 --- a/src/CppParser/Bindings/CSharp/i686-apple-darwin12.4.0/Std-symbols.cpp +++ b/src/CppParser/Bindings/CSharp/i686-apple-darwin12.4.0/Std-symbols.cpp @@ -2,9 +2,10 @@ #define _LIBCPP_HIDE_FROM_ABI #include -#include #include template std::allocator::allocator() noexcept; -template std::optional::optional() noexcept; -template const unsigned int&& std::optional::value() const&&; +template std::basic_string, std::allocator>::basic_string() noexcept(true); +template std::basic_string, std::allocator>::~basic_string() noexcept; +template std::basic_string, std::allocator>& std::basic_string, std::allocator>::assign(const char*); +template const char* std::basic_string, std::allocator>::data() const noexcept; diff --git a/src/CppParser/Bindings/CSharp/i686-apple-darwin12.4.0/Std.cs b/src/CppParser/Bindings/CSharp/i686-apple-darwin12.4.0/Std.cs index 90f4873e..f6c86134 100644 --- a/src/CppParser/Bindings/CSharp/i686-apple-darwin12.4.0/Std.cs +++ b/src/CppParser/Bindings/CSharp/i686-apple-darwin12.4.0/Std.cs @@ -34,10 +34,6 @@ namespace Std { } -namespace Std -{ -} - namespace Std { namespace CompressedPair @@ -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 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 } } -} - -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> NativeToManagedMap = - new global::System.Collections.Concurrent.ConcurrentDictionary>(); + internal static readonly new global::System.Collections.Concurrent.ConcurrentDictionary> NativeToManagedMap = + new global::System.Collections.Concurrent.ConcurrentDictionary>(); - 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 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)) && ___Allocator.IsAssignableFrom(typeof(global::Std.Allocator))) { - __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: ."); + 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: , global::Std.Allocator>."); } public void Dispose() @@ -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)) && ___Allocator.IsAssignableFrom(typeof(global::Std.Allocator))) + { + 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: , global::Std.Allocator>."); + } 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, global::Std.Allocator> Assign(this global::Std.BasicString, global::Std.Allocator> @this, string __s) + { + var __arg0 = @this is null ? __IntPtr.Zero : @this.__Instance; + var ___ret = __Internal.Assign(__arg0, __s); + var __result0 = global::Std.BasicString, global::Std.Allocator>.__GetOrCreateInstance(___ret, false); + return __result0; } - public static uint Value(this global::Std.Optional @this) + public static string Data(this global::Std.BasicString, global::Std.Allocator> @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); } } } diff --git a/src/CppParser/Bindings/CSharp/i686-pc-win32-msvc-d/CppSharp.CppParser.cs b/src/CppParser/Bindings/CSharp/i686-pc-win32-msvc-d/CppSharp.CppParser.cs index be814140..01798937 100644 --- a/src/CppParser/Bindings/CSharp/i686-pc-win32-msvc-d/CppSharp.CppParser.cs +++ b/src/CppParser/Bindings/CSharp/i686-pc-win32-msvc-d/CppSharp.CppParser.cs @@ -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 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 ((__Internal*)__Instance)->ellipsisLoc = value.__Instance; } } - - public System.Nullable NumExpansions - { - get - { - var __optionalRet0 = global::Std.Optional.__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 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 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 } } - public System.Nullable PackIndex - { - get - { - var __optionalRet0 = global::Std.Optional.__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 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 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 ((__Internal*)__Instance)->_operator = value; } } - - public System.Nullable NumExpansions - { - get - { - var __optionalRet0 = global::Std.Optional.__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 diff --git a/src/CppParser/Bindings/CSharp/i686-pc-win32-msvc-d/Std-symbols.cpp b/src/CppParser/Bindings/CSharp/i686-pc-win32-msvc-d/Std-symbols.cpp index 36849997..682e3991 100644 --- a/src/CppParser/Bindings/CSharp/i686-pc-win32-msvc-d/Std-symbols.cpp +++ b/src/CppParser/Bindings/CSharp/i686-pc-win32-msvc-d/Std-symbols.cpp @@ -2,7 +2,6 @@ #define _LIBCPP_HIDE_FROM_ABI #include -#include #include template __declspec(dllexport) std::allocator::allocator() noexcept; @@ -10,6 +9,3 @@ template __declspec(dllexport) std::basic_string, s template __declspec(dllexport) std::basic_string, std::allocator>::~basic_string() noexcept; template __declspec(dllexport) std::basic_string, std::allocator>& std::basic_string, std::allocator>::assign(const char* const); template __declspec(dllexport) const char* std::basic_string, std::allocator>::data() const noexcept; -template __declspec(dllexport) std::optional::optional() noexcept; -template __declspec(dllexport) bool std::optional::has_value() const noexcept; -template __declspec(dllexport) const unsigned int&& std::optional::value() const&&; diff --git a/src/CppParser/Bindings/CSharp/i686-pc-win32-msvc-d/Std.cs b/src/CppParser/Bindings/CSharp/i686-pc-win32-msvc-d/Std.cs index 8ef86add..0b33edeb 100644 --- a/src/CppParser/Bindings/CSharp/i686-pc-win32-msvc-d/Std.cs +++ b/src/CppParser/Bindings/CSharp/i686-pc-win32-msvc-d/Std.cs @@ -48,10 +48,6 @@ namespace Std } } -namespace Std -{ -} - namespace Std { namespace CompressedPair @@ -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> NativeToManagedMap = - new global::System.Collections.Concurrent.ConcurrentDictionary>(); - - 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: ."); - } - - 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: ."); - } - } - } - - 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 @this) - { - var __arg0 = @this is null ? __IntPtr.Zero : @this.__Instance; - var ___ret = __Internal.Value(__arg0); - return *___ret; - } - } -} diff --git a/src/CppParser/Bindings/CSharp/i686-pc-win32-msvc/CppSharp.CppParser.cs b/src/CppParser/Bindings/CSharp/i686-pc-win32-msvc/CppSharp.CppParser.cs index 43fa89db..fc1a21e5 100644 --- a/src/CppParser/Bindings/CSharp/i686-pc-win32-msvc/CppSharp.CppParser.cs +++ b/src/CppParser/Bindings/CSharp/i686-pc-win32-msvc/CppSharp.CppParser.cs @@ -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 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 ((__Internal*)__Instance)->ellipsisLoc = value.__Instance; } } - - public System.Nullable NumExpansions - { - get - { - var __optionalRet0 = global::Std.Optional.__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 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 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 } } - public System.Nullable PackIndex - { - get - { - var __optionalRet0 = global::Std.Optional.__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 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 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 ((__Internal*)__Instance)->_operator = value; } } - - public System.Nullable NumExpansions - { - get - { - var __optionalRet0 = global::Std.Optional.__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 diff --git a/src/CppParser/Bindings/CSharp/i686-pc-win32-msvc/Std-symbols.cpp b/src/CppParser/Bindings/CSharp/i686-pc-win32-msvc/Std-symbols.cpp index 36849997..682e3991 100644 --- a/src/CppParser/Bindings/CSharp/i686-pc-win32-msvc/Std-symbols.cpp +++ b/src/CppParser/Bindings/CSharp/i686-pc-win32-msvc/Std-symbols.cpp @@ -2,7 +2,6 @@ #define _LIBCPP_HIDE_FROM_ABI #include -#include #include template __declspec(dllexport) std::allocator::allocator() noexcept; @@ -10,6 +9,3 @@ template __declspec(dllexport) std::basic_string, s template __declspec(dllexport) std::basic_string, std::allocator>::~basic_string() noexcept; template __declspec(dllexport) std::basic_string, std::allocator>& std::basic_string, std::allocator>::assign(const char* const); template __declspec(dllexport) const char* std::basic_string, std::allocator>::data() const noexcept; -template __declspec(dllexport) std::optional::optional() noexcept; -template __declspec(dllexport) bool std::optional::has_value() const noexcept; -template __declspec(dllexport) const unsigned int&& std::optional::value() const&&; diff --git a/src/CppParser/Bindings/CSharp/i686-pc-win32-msvc/Std.cs b/src/CppParser/Bindings/CSharp/i686-pc-win32-msvc/Std.cs index b0d59775..10abef1f 100644 --- a/src/CppParser/Bindings/CSharp/i686-pc-win32-msvc/Std.cs +++ b/src/CppParser/Bindings/CSharp/i686-pc-win32-msvc/Std.cs @@ -47,10 +47,6 @@ namespace Std } } -namespace Std -{ -} - namespace Std { namespace CompressedPair @@ -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> NativeToManagedMap = - new global::System.Collections.Concurrent.ConcurrentDictionary>(); - - 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: ."); - } - - 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: ."); - } - } - } - - 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 @this) - { - var __arg0 = @this is null ? __IntPtr.Zero : @this.__Instance; - var ___ret = __Internal.Value(__arg0); - return *___ret; - } - } -} diff --git a/src/CppParser/Bindings/CSharp/x86_64-apple-darwin12.4.0/CppSharp.CppParser.cs b/src/CppParser/Bindings/CSharp/x86_64-apple-darwin12.4.0/CppSharp.CppParser.cs index a6569a15..3c205b95 100644 --- a/src/CppParser/Bindings/CSharp/x86_64-apple-darwin12.4.0/CppSharp.CppParser.cs +++ b/src/CppParser/Bindings/CSharp/x86_64-apple-darwin12.4.0/CppSharp.CppParser.cs @@ -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 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 ((__Internal*)__Instance)->ellipsisLoc = value.__Instance; } } - - public System.Nullable NumExpansions - { - get - { - var __optionalRet0 = global::Std.Optional.__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 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 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 } } - public System.Nullable PackIndex - { - get - { - var __optionalRet0 = global::Std.Optional.__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 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 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 ((__Internal*)__Instance)->_operator = value; } } - - public System.Nullable NumExpansions - { - get - { - var __optionalRet0 = global::Std.Optional.__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 diff --git a/src/CppParser/Bindings/CSharp/x86_64-apple-darwin12.4.0/Std-symbols.cpp b/src/CppParser/Bindings/CSharp/x86_64-apple-darwin12.4.0/Std-symbols.cpp index f232c341..26e5ae16 100644 --- a/src/CppParser/Bindings/CSharp/x86_64-apple-darwin12.4.0/Std-symbols.cpp +++ b/src/CppParser/Bindings/CSharp/x86_64-apple-darwin12.4.0/Std-symbols.cpp @@ -2,9 +2,10 @@ #define _LIBCPP_HIDE_FROM_ABI #include -#include #include template std::allocator::allocator() noexcept; -template std::optional::optional() noexcept; -template const unsigned int&& std::optional::value() const&&; +template std::basic_string, std::allocator>::basic_string() noexcept(true); +template std::basic_string, std::allocator>::~basic_string() noexcept; +template std::basic_string, std::allocator>& std::basic_string, std::allocator>::assign(const char*); +template const char* std::basic_string, std::allocator>::data() const noexcept; diff --git a/src/CppParser/Bindings/CSharp/x86_64-apple-darwin12.4.0/Std.cs b/src/CppParser/Bindings/CSharp/x86_64-apple-darwin12.4.0/Std.cs index 94dd87e7..3f791097 100644 --- a/src/CppParser/Bindings/CSharp/x86_64-apple-darwin12.4.0/Std.cs +++ b/src/CppParser/Bindings/CSharp/x86_64-apple-darwin12.4.0/Std.cs @@ -34,10 +34,6 @@ namespace Std { } -namespace Std -{ -} - namespace Std { namespace CompressedPair @@ -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 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 } } -} - -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> NativeToManagedMap = - new global::System.Collections.Concurrent.ConcurrentDictionary>(); + internal static readonly new global::System.Collections.Concurrent.ConcurrentDictionary> NativeToManagedMap = + new global::System.Collections.Concurrent.ConcurrentDictionary>(); - 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 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)) && ___Allocator.IsAssignableFrom(typeof(global::Std.Allocator))) { - __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: ."); + 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: , global::Std.Allocator>."); } public void Dispose() @@ -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)) && ___Allocator.IsAssignableFrom(typeof(global::Std.Allocator))) + { + 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: , global::Std.Allocator>."); + } 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, global::Std.Allocator> Assign(this global::Std.BasicString, global::Std.Allocator> @this, string __s) + { + var __arg0 = @this is null ? __IntPtr.Zero : @this.__Instance; + var ___ret = __Internal.Assign(__arg0, __s); + var __result0 = global::Std.BasicString, global::Std.Allocator>.__GetOrCreateInstance(___ret, false); + return __result0; } - public static uint Value(this global::Std.Optional @this) + public static string Data(this global::Std.BasicString, global::Std.Allocator> @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); } } } diff --git a/src/CppParser/Bindings/CSharp/x86_64-linux-gnu-cxx11abi/CppSharp.CppParser.cs b/src/CppParser/Bindings/CSharp/x86_64-linux-gnu-cxx11abi/CppSharp.CppParser.cs index 2c714c4f..d4437ab0 100644 --- a/src/CppParser/Bindings/CSharp/x86_64-linux-gnu-cxx11abi/CppSharp.CppParser.cs +++ b/src/CppParser/Bindings/CSharp/x86_64-linux-gnu-cxx11abi/CppSharp.CppParser.cs @@ -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 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 ((__Internal*)__Instance)->ellipsisLoc = value.__Instance; } } - - public System.Nullable NumExpansions - { - get - { - var __optionalRet0 = global::Std.Optional.__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 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 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 } } - public System.Nullable PackIndex - { - get - { - var __optionalRet0 = global::Std.Optional.__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 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 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 ((__Internal*)__Instance)->_operator = value; } } - - public System.Nullable NumExpansions - { - get - { - var __optionalRet0 = global::Std.Optional.__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 diff --git a/src/CppParser/Bindings/CSharp/x86_64-linux-gnu-cxx11abi/Std-symbols.cpp b/src/CppParser/Bindings/CSharp/x86_64-linux-gnu-cxx11abi/Std-symbols.cpp index 65b2a63a..3da01071 100644 --- a/src/CppParser/Bindings/CSharp/x86_64-linux-gnu-cxx11abi/Std-symbols.cpp +++ b/src/CppParser/Bindings/CSharp/x86_64-linux-gnu-cxx11abi/Std-symbols.cpp @@ -2,14 +2,10 @@ #define _LIBCPP_HIDE_FROM_ABI #include -#include #include template std::allocator::allocator() noexcept; template std::allocator::~allocator() noexcept; -template std::optional::optional(); -template bool std::optional::has_value() const noexcept; -template const unsigned int&& std::optional::value() const&&; template std::basic_string, std::allocator>::basic_string() noexcept(true); template std::basic_string, std::allocator>::~basic_string() noexcept; template std::basic_string, std::allocator>& std::basic_string, std::allocator>::assign(const char*); diff --git a/src/CppParser/Bindings/CSharp/x86_64-linux-gnu-cxx11abi/Std.cs b/src/CppParser/Bindings/CSharp/x86_64-linux-gnu-cxx11abi/Std.cs index 70e43766..d3798646 100644 --- a/src/CppParser/Bindings/CSharp/x86_64-linux-gnu-cxx11abi/Std.cs +++ b/src/CppParser/Bindings/CSharp/x86_64-linux-gnu-cxx11abi/Std.cs @@ -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> NativeToManagedMap = - new global::System.Collections.Concurrent.ConcurrentDictionary>(); - - 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: ."); - } - - 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: ."); - } - } - } - - 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 @this) - { - var __arg0 = @this is null ? __IntPtr.Zero : @this.__Instance; - var ___ret = __Internal.Value(__arg0); - return *___ret; - } - } -} - namespace Std { } diff --git a/src/CppParser/Bindings/CSharp/x86_64-linux-gnu/CppSharp.CppParser.cs b/src/CppParser/Bindings/CSharp/x86_64-linux-gnu/CppSharp.CppParser.cs index 8880b885..dc5953f1 100644 --- a/src/CppParser/Bindings/CSharp/x86_64-linux-gnu/CppSharp.CppParser.cs +++ b/src/CppParser/Bindings/CSharp/x86_64-linux-gnu/CppSharp.CppParser.cs @@ -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 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 ((__Internal*)__Instance)->ellipsisLoc = value.__Instance; } } - - public System.Nullable NumExpansions - { - get - { - var __optionalRet0 = global::Std.Optional.__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 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 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 } } - public System.Nullable PackIndex - { - get - { - var __optionalRet0 = global::Std.Optional.__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 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 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 ((__Internal*)__Instance)->_operator = value; } } - - public System.Nullable NumExpansions - { - get - { - var __optionalRet0 = global::Std.Optional.__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 diff --git a/src/CppParser/Bindings/CSharp/x86_64-linux-gnu/Std-symbols.cpp b/src/CppParser/Bindings/CSharp/x86_64-linux-gnu/Std-symbols.cpp index 766abc51..fc98a852 100644 --- a/src/CppParser/Bindings/CSharp/x86_64-linux-gnu/Std-symbols.cpp +++ b/src/CppParser/Bindings/CSharp/x86_64-linux-gnu/Std-symbols.cpp @@ -2,14 +2,10 @@ #define _LIBCPP_HIDE_FROM_ABI #include -#include #include template std::allocator::allocator() noexcept; template std::allocator::~allocator() noexcept; -template std::optional::optional(); -template bool std::optional::has_value() const noexcept; -template const unsigned int&& std::optional::value() const&&; template std::basic_string, std::allocator>::basic_string() noexcept; template std::basic_string, std::allocator>::~basic_string() noexcept; template std::basic_string, std::allocator>& std::basic_string, std::allocator>::assign(const char*); diff --git a/src/CppParser/Bindings/CSharp/x86_64-linux-gnu/Std.cs b/src/CppParser/Bindings/CSharp/x86_64-linux-gnu/Std.cs index 4b04920d..f0656bd1 100644 --- a/src/CppParser/Bindings/CSharp/x86_64-linux-gnu/Std.cs +++ b/src/CppParser/Bindings/CSharp/x86_64-linux-gnu/Std.cs @@ -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> NativeToManagedMap = - new global::System.Collections.Concurrent.ConcurrentDictionary>(); - - 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: ."); - } - - 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: ."); - } - } - } - - 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 @this) - { - var __arg0 = @this is null ? __IntPtr.Zero : @this.__Instance; - var ___ret = __Internal.Value(__arg0); - return *___ret; - } - } -} - namespace Std { } diff --git a/src/CppParser/Bindings/CSharp/x86_64-pc-win32-msvc-d/CppSharp.CppParser.cs b/src/CppParser/Bindings/CSharp/x86_64-pc-win32-msvc-d/CppSharp.CppParser.cs index f80fc9d1..c2973945 100644 --- a/src/CppParser/Bindings/CSharp/x86_64-pc-win32-msvc-d/CppSharp.CppParser.cs +++ b/src/CppParser/Bindings/CSharp/x86_64-pc-win32-msvc-d/CppSharp.CppParser.cs @@ -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 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 ((__Internal*)__Instance)->ellipsisLoc = value.__Instance; } } - - public System.Nullable NumExpansions - { - get - { - var __optionalRet0 = global::Std.Optional.__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 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 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 } } - public System.Nullable PackIndex - { - get - { - var __optionalRet0 = global::Std.Optional.__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 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 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 ((__Internal*)__Instance)->_operator = value; } } - - public System.Nullable NumExpansions - { - get - { - var __optionalRet0 = global::Std.Optional.__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 diff --git a/src/CppParser/Bindings/CSharp/x86_64-pc-win32-msvc-d/Std-symbols.cpp b/src/CppParser/Bindings/CSharp/x86_64-pc-win32-msvc-d/Std-symbols.cpp index 36849997..682e3991 100644 --- a/src/CppParser/Bindings/CSharp/x86_64-pc-win32-msvc-d/Std-symbols.cpp +++ b/src/CppParser/Bindings/CSharp/x86_64-pc-win32-msvc-d/Std-symbols.cpp @@ -2,7 +2,6 @@ #define _LIBCPP_HIDE_FROM_ABI #include -#include #include template __declspec(dllexport) std::allocator::allocator() noexcept; @@ -10,6 +9,3 @@ template __declspec(dllexport) std::basic_string, s template __declspec(dllexport) std::basic_string, std::allocator>::~basic_string() noexcept; template __declspec(dllexport) std::basic_string, std::allocator>& std::basic_string, std::allocator>::assign(const char* const); template __declspec(dllexport) const char* std::basic_string, std::allocator>::data() const noexcept; -template __declspec(dllexport) std::optional::optional() noexcept; -template __declspec(dllexport) bool std::optional::has_value() const noexcept; -template __declspec(dllexport) const unsigned int&& std::optional::value() const&&; diff --git a/src/CppParser/Bindings/CSharp/x86_64-pc-win32-msvc-d/Std.cs b/src/CppParser/Bindings/CSharp/x86_64-pc-win32-msvc-d/Std.cs index 1389aa56..8ca67dff 100644 --- a/src/CppParser/Bindings/CSharp/x86_64-pc-win32-msvc-d/Std.cs +++ b/src/CppParser/Bindings/CSharp/x86_64-pc-win32-msvc-d/Std.cs @@ -48,10 +48,6 @@ namespace Std } } -namespace Std -{ -} - namespace Std { namespace CompressedPair @@ -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> NativeToManagedMap = - new global::System.Collections.Concurrent.ConcurrentDictionary>(); - - 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: ."); - } - - 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: ."); - } - } - } - - 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 @this) - { - var __arg0 = @this is null ? __IntPtr.Zero : @this.__Instance; - var ___ret = __Internal.Value(__arg0); - return *___ret; - } - } -} diff --git a/src/CppParser/Bindings/CSharp/x86_64-pc-win32-msvc/CppSharp.CppParser.cs b/src/CppParser/Bindings/CSharp/x86_64-pc-win32-msvc/CppSharp.CppParser.cs index 877c82a5..0886cf3e 100644 --- a/src/CppParser/Bindings/CSharp/x86_64-pc-win32-msvc/CppSharp.CppParser.cs +++ b/src/CppParser/Bindings/CSharp/x86_64-pc-win32-msvc/CppSharp.CppParser.cs @@ -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 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 ((__Internal*)__Instance)->ellipsisLoc = value.__Instance; } } - - public System.Nullable NumExpansions - { - get - { - var __optionalRet0 = global::Std.Optional.__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 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 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 } } - public System.Nullable PackIndex - { - get - { - var __optionalRet0 = global::Std.Optional.__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 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 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 ((__Internal*)__Instance)->_operator = value; } } - - public System.Nullable NumExpansions - { - get - { - var __optionalRet0 = global::Std.Optional.__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 diff --git a/src/CppParser/Bindings/CSharp/x86_64-pc-win32-msvc/Std-symbols.cpp b/src/CppParser/Bindings/CSharp/x86_64-pc-win32-msvc/Std-symbols.cpp index 36849997..682e3991 100644 --- a/src/CppParser/Bindings/CSharp/x86_64-pc-win32-msvc/Std-symbols.cpp +++ b/src/CppParser/Bindings/CSharp/x86_64-pc-win32-msvc/Std-symbols.cpp @@ -2,7 +2,6 @@ #define _LIBCPP_HIDE_FROM_ABI #include -#include #include template __declspec(dllexport) std::allocator::allocator() noexcept; @@ -10,6 +9,3 @@ template __declspec(dllexport) std::basic_string, s template __declspec(dllexport) std::basic_string, std::allocator>::~basic_string() noexcept; template __declspec(dllexport) std::basic_string, std::allocator>& std::basic_string, std::allocator>::assign(const char* const); template __declspec(dllexport) const char* std::basic_string, std::allocator>::data() const noexcept; -template __declspec(dllexport) std::optional::optional() noexcept; -template __declspec(dllexport) bool std::optional::has_value() const noexcept; -template __declspec(dllexport) const unsigned int&& std::optional::value() const&&; diff --git a/src/CppParser/Bindings/CSharp/x86_64-pc-win32-msvc/Std.cs b/src/CppParser/Bindings/CSharp/x86_64-pc-win32-msvc/Std.cs index e9a3c2ee..979f8373 100644 --- a/src/CppParser/Bindings/CSharp/x86_64-pc-win32-msvc/Std.cs +++ b/src/CppParser/Bindings/CSharp/x86_64-pc-win32-msvc/Std.cs @@ -47,10 +47,6 @@ namespace Std } } -namespace Std -{ -} - namespace Std { namespace CompressedPair @@ -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> NativeToManagedMap = - new global::System.Collections.Concurrent.ConcurrentDictionary>(); - - 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: ."); - } - - 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: ."); - } - } - } - - 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 @this) - { - var __arg0 = @this is null ? __IntPtr.Zero : @this.__Instance; - var ___ret = __Internal.Value(__arg0); - return *___ret; - } - } -} diff --git a/src/CppParser/Bootstrap/Bootstrap.cs b/src/CppParser/Bootstrap/Bootstrap.cs index bb56e219..7a5bdccd 100644 --- a/src/CppParser/Bootstrap/Bootstrap.cs +++ b/src/CppParser/Bootstrap/Bootstrap.cs @@ -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") || diff --git a/src/CppParser/Expr.cpp b/src/CppParser/Expr.cpp index 26ced667..5281835c 100644 --- a/src/CppParser/Expr.cpp +++ b/src/CppParser/Expr.cpp @@ -1093,7 +1093,6 @@ CXXNoexceptExpr::CXXNoexceptExpr() PackExpansionExpr::PackExpansionExpr() : Expr(StmtClass::PackExpansionExpr) , ellipsisLoc(SourceLocation()) - , numExpansions(std::optional()) { } @@ -1114,7 +1113,6 @@ SubstNonTypeTemplateParmExpr::SubstNonTypeTemplateParmExpr() , replacement(nullptr) , associatedDecl(nullptr) , index(0) - , packIndex(std::optional()) , isReferenceParameter(false) { } @@ -1156,7 +1154,6 @@ CXXFoldExpr::CXXFoldExpr() , rParenLoc(SourceLocation()) , ellipsisLoc(SourceLocation()) , _operator(BinaryOperatorKind::PtrMemD) - , numExpansions(std::optional()) { } diff --git a/src/CppParser/Expr.h b/src/CppParser/Expr.h index 78c0e008..52fca9a3 100644 --- a/src/CppParser/Expr.h +++ b/src/CppParser/Expr.h @@ -8,7 +8,6 @@ #pragma once #include "Stmt.h" -#include namespace CppSharp::CppParser::AST { @@ -1709,7 +1708,6 @@ class CS_API PackExpansionExpr : public Expr public: PackExpansionExpr(); SourceLocation ellipsisLoc; - std::optional numExpansions; }; class CS_API SizeOfPackExpr : public Expr @@ -1732,7 +1730,6 @@ public: Expr* replacement; Declaration* associatedDecl; unsigned int index; - std::optional packIndex; bool isReferenceParameter; }; @@ -1786,7 +1783,6 @@ public: SourceLocation rParenLoc; SourceLocation ellipsisLoc; BinaryOperatorKind _operator; - std::optional numExpansions; }; class CS_API CXXParenListInitExpr : public Expr diff --git a/src/CppParser/ParseExpr.cpp b/src/CppParser/ParseExpr.cpp index 6eaf0882..357d43b0 100644 --- a/src/CppParser/ParseExpr.cpp +++ b/src/CppParser/ParseExpr.cpp @@ -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) _S->replacement = static_cast(WalkExpression(S->getReplacement())); _S->associatedDecl = static_cast(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) _S->pattern = static_cast(WalkExpression(S->getPattern())); _S->init = static_cast(WalkExpression(S->getInit())); _S->_operator = (AST::BinaryOperatorKind)S->getOperator(); - _S->numExpansions = S->getNumExpansions(); _Expr = _S; break; } diff --git a/src/CppParser/Parser.cpp b/src/CppParser/Parser.cpp index dd69b553..00d09f98 100644 --- a/src/CppParser/Parser.cpp +++ b/src/CppParser/Parser.cpp @@ -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, diff --git a/src/Generator/Passes/IgnoreSystemDeclarationsPass.cs b/src/Generator/Passes/IgnoreSystemDeclarationsPass.cs index b6a866c6..8b90d57b 100644 --- a/src/Generator/Passes/IgnoreSystemDeclarationsPass.cs +++ b/src/Generator/Passes/IgnoreSystemDeclarationsPass.cs @@ -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 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 } break; } + return true; } diff --git a/src/Generator/Passes/SymbolsCodeGenerator.cs b/src/Generator/Passes/SymbolsCodeGenerator.cs index 397c17f8..1b5bf760 100644 --- a/src/Generator/Passes/SymbolsCodeGenerator.cs +++ b/src/Generator/Passes/SymbolsCodeGenerator.cs @@ -34,7 +34,6 @@ namespace CppSharp.Passes WriteLine("#define _LIBCPP_HIDE_FROM_ABI"); NewLine(); WriteLine("#include "); - WriteLine("#include "); } else foreach (var header in TranslationUnit.Module.Headers) diff --git a/src/Generator/Types/Std/Stdlib.CLI.cs b/src/Generator/Types/Std/Stdlib.CLI.cs index 7edb6bbc..ffbe2dba 100644 --- a/src/Generator/Types/Std/Stdlib.CLI.cs +++ b/src/Generator/Types/Std/Stdlib.CLI.cs @@ -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 diff --git a/src/Generator/Types/Std/Stdlib.CSharp.cs b/src/Generator/Types/Std/Stdlib.CSharp.cs index 713f0d1c..6673604a 100644 --- a/src/Generator/Types/Std/Stdlib.CSharp.cs +++ b/src/Generator/Types/Std/Stdlib.CSharp.cs @@ -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(); - 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 diff --git a/src/Parser/ASTConverter.Expr.cs b/src/Parser/ASTConverter.Expr.cs index 8b3e7440..621a3d9d 100644 --- a/src/Parser/ASTConverter.Expr.cs +++ b/src/Parser/ASTConverter.Expr.cs @@ -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 _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 _expr.RParenLoc = VisitSourceLocation(expr.RParenLoc); _expr.EllipsisLoc = VisitSourceLocation(expr.EllipsisLoc); _expr.Operator = (AST.BinaryOperatorKind) expr.Operator; - _expr.NumExpansions = expr.NumExpansions; return _expr; }