Browse Source

Added experimental WIP std.resource.Resouce class.

Mark Sibly 9 years ago
parent
commit
e9141330b4
2 changed files with 53 additions and 0 deletions
  1. 51 0
      modules/std/resource/resource.monkey2
  2. 2 0
      modules/std/std.monkey2

+ 51 - 0
modules/std/resource/resource.monkey2

@@ -0,0 +1,51 @@
+
+Namespace std.resource
+
+Class Resource
+
+	Field OnDiscarded:Void()
+	
+	Property Discarded:Bool()
+	
+		Return _discarded
+	End
+	
+	Method Discard()
+	
+		If _discarded Or _refs Return
+		
+		_discarded=True
+	
+		OnDiscard()
+		
+		OnDiscarded()
+	End
+	
+	Protected
+	
+	Method OnDiscard() Virtual
+	End
+	
+	Function OpenResource:Resource( slug:String )
+	
+		Return _open[slug]
+	End
+	
+	Function AddResource( slug:String,r:Resource )
+	
+		If _open.Contains( slug ) Return
+	
+		_open[slug]=r
+		
+		If r r._refs+=1
+	End
+	
+	Private
+	
+	Field _refs:Int
+	
+	Field _discarded:=False
+	
+	Global _open:=New StringMap<Resource>
+	
+End

+ 2 - 0
modules/std/std.monkey2

@@ -13,6 +13,8 @@ Namespace std
 #Import "collections/map"
 #Import "collections/map"
 #Import "collections/deque"
 #Import "collections/deque"
 
 
+#Import "resource/resource"
+
 #Import "stream/stream"
 #Import "stream/stream"
 #Import "stream/filestream"
 #Import "stream/filestream"