Skip to content

Commit

Permalink
Release City
Browse files Browse the repository at this point in the history
  • Loading branch information
IsaacMarovitz committed May 23, 2024
1 parent 2e1e22e commit 68f74c2
Show file tree
Hide file tree
Showing 71 changed files with 1,287 additions and 182 deletions.
19 changes: 18 additions & 1 deletion src/SharpMetal.Generator/Instances/ClassInstance.cs
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ public List<ObjectiveCInstance> Generate(List<ClassInstance> classCache, List<En
context.WriteLine("[SupportedOSPlatform(\"macos\")]");

// TODO: Handle LibraryImport usage on MTLDevice (requires partial)
var classDecl = $"public struct {Name}";
var classDecl = $"public struct {Name}: IDisposable";

context.WriteLine(classDecl);

Expand Down Expand Up @@ -116,6 +116,14 @@ public List<ObjectiveCInstance> Generate(List<ClassInstance> classCache, List<En
context.LeaveScope();
}

context.WriteLine();
context.WriteLine("public void Dispose()");
context.EnterScope();

context.WriteLine("ObjectiveCRuntime.objc_msgSend(NativePtr, sel_release);");

context.LeaveScope();

if (_propertyInstances.Any())
{
context.WriteLine();
Expand Down Expand Up @@ -148,13 +156,22 @@ public List<ObjectiveCInstance> Generate(List<ClassInstance> classCache, List<En
context.WriteLine($"private static readonly Selector {selector.Name} = \"{selector.Selector}\";");
}

context.WriteLine($"private static readonly Selector sel_release = \"release\";");

context.LeaveScope();
return objectiveCInstances;
}

public static ClassInstance Build(string line, string namespacePrefix, StreamReader sr, List<MethodInstance> inFlightUnscopedMethods)
{
var classInfo = line.Split(" ", StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries);

if (classInfo.Length < 3)
{
Console.WriteLine($"BAD CLASS! {line}");
return new ClassInstance("");
}

var className = namespacePrefix + classInfo[1];
var instance = new ClassInstance(className);

Expand Down
8 changes: 7 additions & 1 deletion src/SharpMetal/Foundation/NSArray.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
namespace SharpMetal.Foundation
{
[SupportedOSPlatform("macos")]
public struct NSArray
public struct NSArray: IDisposable
{
public IntPtr NativePtr;
public static implicit operator IntPtr(NSArray obj) => obj.NativePtr;
Expand All @@ -16,6 +16,11 @@ public NSArray()
NativePtr = cls.AllocInit();
}

public void Dispose()
{
ObjectiveCRuntime.objc_msgSend(NativePtr, sel_release);
}

public ulong Count => ObjectiveCRuntime.ulong_objc_msgSend(NativePtr, sel_count);

public static NSArray Array(NSObject pObject)
Expand Down Expand Up @@ -50,5 +55,6 @@ public IntPtr Object(ulong index)
private static readonly Selector sel_initWithCoder = "initWithCoder:";
private static readonly Selector sel_count = "count";
private static readonly Selector sel_objectAtIndex = "objectAtIndex:";
private static readonly Selector sel_release = "release";
}
}
8 changes: 7 additions & 1 deletion src/SharpMetal/Foundation/NSAutoreleasePool.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
namespace SharpMetal.Foundation
{
[SupportedOSPlatform("macos")]
public struct NSAutoreleasePool
public struct NSAutoreleasePool: IDisposable
{
public IntPtr NativePtr;
public static implicit operator IntPtr(NSAutoreleasePool obj) => obj.NativePtr;
Expand All @@ -16,6 +16,11 @@ public NSAutoreleasePool()
NativePtr = cls.AllocInit();
}

public void Dispose()
{
ObjectiveCRuntime.objc_msgSend(NativePtr, sel_release);
}

public void Drain()
{
ObjectiveCRuntime.objc_msgSend(NativePtr, sel_drain);
Expand All @@ -34,5 +39,6 @@ public static void ShowPools()
private static readonly Selector sel_drain = "drain";
private static readonly Selector sel_addObject = "addObject:";
private static readonly Selector sel_showPools = "showPools";
private static readonly Selector sel_release = "release";
}
}
8 changes: 7 additions & 1 deletion src/SharpMetal/Foundation/NSBundle.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
namespace SharpMetal.Foundation
{
[SupportedOSPlatform("macos")]
public struct NSBundle
public struct NSBundle: IDisposable
{
public IntPtr NativePtr;
public static implicit operator IntPtr(NSBundle obj) => obj.NativePtr;
Expand All @@ -16,6 +16,11 @@ public NSBundle()
NativePtr = cls.Alloc();
}

public void Dispose()
{
ObjectiveCRuntime.objc_msgSend(NativePtr, sel_release);
}

public NSArray AllBundles => new(ObjectiveCRuntime.IntPtr_objc_msgSend(NativePtr, sel_allBundles));

public NSArray AllFrameworks => new(ObjectiveCRuntime.IntPtr_objc_msgSend(NativePtr, sel_allFrameworks));
Expand Down Expand Up @@ -147,5 +152,6 @@ public NSObject ObjectForInfoDictionaryKey(NSString pKey)
private static readonly Selector sel_localizedInfoDictionary = "localizedInfoDictionary";
private static readonly Selector sel_objectForInfoDictionaryKey = "objectForInfoDictionaryKey:";
private static readonly Selector sel_localizedStringForKeyvaluetable = "localizedStringForKey:value:table:";
private static readonly Selector sel_release = "release";
}
}
8 changes: 7 additions & 1 deletion src/SharpMetal/Foundation/NSData.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,23 @@
namespace SharpMetal.Foundation
{
[SupportedOSPlatform("macos")]
public struct NSData
public struct NSData: IDisposable
{
public IntPtr NativePtr;
public static implicit operator IntPtr(NSData obj) => obj.NativePtr;
public NSData(IntPtr ptr) => NativePtr = ptr;

public void Dispose()
{
ObjectiveCRuntime.objc_msgSend(NativePtr, sel_release);
}

public IntPtr MutableBytes => new(ObjectiveCRuntime.IntPtr_objc_msgSend(NativePtr, sel_mutableBytes));

public ulong Length => ObjectiveCRuntime.ulong_objc_msgSend(NativePtr, sel_length);

private static readonly Selector sel_mutableBytes = "mutableBytes";
private static readonly Selector sel_length = "length";
private static readonly Selector sel_release = "release";
}
}
8 changes: 7 additions & 1 deletion src/SharpMetal/Foundation/NSDate.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,23 @@
namespace SharpMetal.Foundation
{
[SupportedOSPlatform("macos")]
public struct NSDate
public struct NSDate: IDisposable
{
public IntPtr NativePtr;
public static implicit operator IntPtr(NSDate obj) => obj.NativePtr;
public NSDate(IntPtr ptr) => NativePtr = ptr;

public void Dispose()
{
ObjectiveCRuntime.objc_msgSend(NativePtr, sel_release);
}

public static NSDate DateWithTimeIntervalSinceNow(IntPtr secs)
{
return new(ObjectiveCRuntime.IntPtr_objc_msgSend(new ObjectiveCClass("NSDate"), sel_dateWithTimeIntervalSinceNow, secs));
}

private static readonly Selector sel_dateWithTimeIntervalSinceNow = "dateWithTimeIntervalSinceNow:";
private static readonly Selector sel_release = "release";
}
}
8 changes: 7 additions & 1 deletion src/SharpMetal/Foundation/NSDictionary.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
namespace SharpMetal.Foundation
{
[SupportedOSPlatform("macos")]
public struct NSDictionary
public struct NSDictionary: IDisposable
{
public IntPtr NativePtr;
public static implicit operator IntPtr(NSDictionary obj) => obj.NativePtr;
Expand All @@ -16,6 +16,11 @@ public NSDictionary()
NativePtr = cls.AllocInit();
}

public void Dispose()
{
ObjectiveCRuntime.objc_msgSend(NativePtr, sel_release);
}

public NSEnumerator KeyEnumerator => new(ObjectiveCRuntime.IntPtr_objc_msgSend(NativePtr, sel_keyEnumerator));

public ulong Count => ObjectiveCRuntime.ulong_objc_msgSend(NativePtr, sel_count);
Expand Down Expand Up @@ -53,5 +58,6 @@ public IntPtr Object(NSObject pKey)
private static readonly Selector sel_keyEnumerator = "keyEnumerator";
private static readonly Selector sel_objectForKey = "objectForKey:";
private static readonly Selector sel_count = "count";
private static readonly Selector sel_release = "release";
}
}
16 changes: 14 additions & 2 deletions src/SharpMetal/Foundation/NSEnumerator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,28 +12,39 @@ public struct NSFastEnumerationState
}

[SupportedOSPlatform("macos")]
public struct NSFastEnumeration
public struct NSFastEnumeration: IDisposable
{
public IntPtr NativePtr;
public static implicit operator IntPtr(NSFastEnumeration obj) => obj.NativePtr;
public NSFastEnumeration(IntPtr ptr) => NativePtr = ptr;

public void Dispose()
{
ObjectiveCRuntime.objc_msgSend(NativePtr, sel_release);
}

public ulong CountByEnumerating(NSFastEnumerationState pState, NSObject pBuffer, ulong len)
{
return ObjectiveCRuntime.ulong_objc_msgSend(NativePtr, sel_countByEnumeratingWithStateobjectscount, pState, pBuffer, len);
}

private static readonly Selector sel_countByEnumeratingWithStateobjectscount = "countByEnumeratingWithState:objects:count:";
private static readonly Selector sel_release = "release";
}

[SupportedOSPlatform("macos")]
public struct NSEnumerator
public struct NSEnumerator: IDisposable
{
public IntPtr NativePtr;
public static implicit operator IntPtr(NSEnumerator obj) => obj.NativePtr;
public static implicit operator NSFastEnumeration(NSEnumerator obj) => new(obj.NativePtr);
public NSEnumerator(IntPtr ptr) => NativePtr = ptr;

public void Dispose()
{
ObjectiveCRuntime.objc_msgSend(NativePtr, sel_release);
}



public ulong CountByEnumerating(NSFastEnumerationState pState, NSObject pBuffer, ulong len)
Expand All @@ -42,5 +53,6 @@ public ulong CountByEnumerating(NSFastEnumerationState pState, NSObject pBuffer,
}

private static readonly Selector sel_countByEnumeratingWithStateobjectscount = "countByEnumeratingWithState:objects:count:";
private static readonly Selector sel_release = "release";
}
}
8 changes: 7 additions & 1 deletion src/SharpMetal/Foundation/NSError.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
namespace SharpMetal.Foundation
{
[SupportedOSPlatform("macos")]
public struct NSError
public struct NSError: IDisposable
{
public IntPtr NativePtr;
public static implicit operator IntPtr(NSError obj) => obj.NativePtr;
Expand All @@ -16,6 +16,11 @@ public NSError()
NativePtr = cls.AllocInit();
}

public void Dispose()
{
ObjectiveCRuntime.objc_msgSend(NativePtr, sel_release);
}

public long Code => ObjectiveCRuntime.long_objc_msgSend(NativePtr, sel_code);

public IntPtr Domain => new(ObjectiveCRuntime.IntPtr_objc_msgSend(NativePtr, sel_domain));
Expand Down Expand Up @@ -49,5 +54,6 @@ public NSError Init(IntPtr domain, long code, NSDictionary pDictionary)
private static readonly Selector sel_localizedRecoveryOptions = "localizedRecoveryOptions";
private static readonly Selector sel_localizedRecoverySuggestion = "localizedRecoverySuggestion";
private static readonly Selector sel_localizedFailureReason = "localizedFailureReason";
private static readonly Selector sel_release = "release";
}
}
16 changes: 14 additions & 2 deletions src/SharpMetal/Foundation/NSLock.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,21 @@
namespace SharpMetal.Foundation
{
[SupportedOSPlatform("macos")]
public struct NSLocking
public struct NSLocking: IDisposable
{
public IntPtr NativePtr;
public static implicit operator IntPtr(NSLocking obj) => obj.NativePtr;
public NSLocking(IntPtr ptr) => NativePtr = ptr;

public void Dispose()
{
ObjectiveCRuntime.objc_msgSend(NativePtr, sel_release);
}
private static readonly Selector sel_release = "release";
}

[SupportedOSPlatform("macos")]
public struct NSCondition
public struct NSCondition: IDisposable
{
public IntPtr NativePtr;
public static implicit operator IntPtr(NSCondition obj) => obj.NativePtr;
Expand All @@ -24,6 +30,11 @@ public NSCondition()
NativePtr = cls.AllocInit();
}

public void Dispose()
{
ObjectiveCRuntime.objc_msgSend(NativePtr, sel_release);
}

public void Wait()
{
ObjectiveCRuntime.objc_msgSend(NativePtr, sel_wait);
Expand All @@ -48,5 +59,6 @@ public void Broadcast()
private static readonly Selector sel_waitUntilDate = "waitUntilDate:";
private static readonly Selector sel_signal = "signal";
private static readonly Selector sel_broadcast = "broadcast";
private static readonly Selector sel_release = "release";
}
}
16 changes: 14 additions & 2 deletions src/SharpMetal/Foundation/NSNotification.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,17 @@
namespace SharpMetal.Foundation
{
[SupportedOSPlatform("macos")]
public struct NSNotification
public struct NSNotification: IDisposable
{
public IntPtr NativePtr;
public static implicit operator IntPtr(NSNotification obj) => obj.NativePtr;
public NSNotification(IntPtr ptr) => NativePtr = ptr;

public void Dispose()
{
ObjectiveCRuntime.objc_msgSend(NativePtr, sel_release);
}

public NSString Name => new(ObjectiveCRuntime.IntPtr_objc_msgSend(NativePtr, sel_name));

public NSObject Object => new(ObjectiveCRuntime.IntPtr_objc_msgSend(NativePtr, sel_object));
Expand All @@ -19,20 +24,27 @@ public struct NSNotification
private static readonly Selector sel_name = "name";
private static readonly Selector sel_object = "object";
private static readonly Selector sel_userInfo = "userInfo";
private static readonly Selector sel_release = "release";
}

[SupportedOSPlatform("macos")]
public struct NSNotificationCenter
public struct NSNotificationCenter: IDisposable
{
public IntPtr NativePtr;
public static implicit operator IntPtr(NSNotificationCenter obj) => obj.NativePtr;
public NSNotificationCenter(IntPtr ptr) => NativePtr = ptr;

public void Dispose()
{
ObjectiveCRuntime.objc_msgSend(NativePtr, sel_release);
}

public static NSNotificationCenter DefaultCenter()
{
return new(ObjectiveCRuntime.IntPtr_objc_msgSend(new ObjectiveCClass("NSNotificationCenter"), sel_defaultCenter));
}

private static readonly Selector sel_defaultCenter = "defaultCenter";
private static readonly Selector sel_release = "release";
}
}
Loading

0 comments on commit 68f74c2

Please sign in to comment.