From 0d3c3d1b2a5960b157fa85bdbca89a6721d8d0da Mon Sep 17 00:00:00 2001 From: Gregory John Casamento Date: Sat, 24 Apr 2021 06:06:45 -0400 Subject: [PATCH] Add interface and abstract implementation of modelLoaderForData: --- .../GNUstepGUI/GSModelLoaderFactory.h | 6 +++-- Source/GSModelLoaderFactory.m | 25 +++++++++++++++++++ 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/Headers/Additions/GNUstepGUI/GSModelLoaderFactory.h b/Headers/Additions/GNUstepGUI/GSModelLoaderFactory.h index 157720402..af6470623 100644 --- a/Headers/Additions/GNUstepGUI/GSModelLoaderFactory.h +++ b/Headers/Additions/GNUstepGUI/GSModelLoaderFactory.h @@ -1,6 +1,6 @@ -/** NSBundleAdditions +/** GSModelLoaderFactory - Implementation of NSBundle Additions + Interface of GSModelLoader and GSModelLoaderFactory Copyright (C) 2005 Free Software Foundation, Inc. @@ -39,6 +39,7 @@ @class NSBundle; @interface GSModelLoader : NSObject ++ (BOOL) canReadData: (NSData *)theData; + (NSString *) type; + (float) priority; - (BOOL) loadModelData: (NSData *)data @@ -57,6 +58,7 @@ + (NSString *) supportedModelFileAtPath: (NSString *)modelPath; + (GSModelLoader *) modelLoaderForFileType: (NSString *)type; + (GSModelLoader *) modelLoaderForFileName: (NSString *)modelPath; ++ (GSModelLoader *) modelLoaderForData: (NSData *)theData; @end #endif diff --git a/Source/GSModelLoaderFactory.m b/Source/GSModelLoaderFactory.m index 1dc674f2f..4d2857f5b 100644 --- a/Source/GSModelLoaderFactory.m +++ b/Source/GSModelLoaderFactory.m @@ -38,6 +38,11 @@ #import "GNUstepGUI/GSModelLoaderFactory.h" @implementation GSModelLoader ++ (BOOL) canReadData: (NSData *)theData +{ + return NO; +} + + (NSString *) type { return nil; @@ -103,6 +108,7 @@ static NSMutableDictionary *_modelMap = nil; @implementation GSModelLoaderFactory + + (void) initialize { NSArray *classes = GSObjCAllSubclassesOfClass([GSModelLoader class]); @@ -216,4 +222,23 @@ static NSMutableDictionary *_modelMap = nil; return result; } + ++ (GSModelLoader *) modelLoaderForData: (NSData *)theData +{ + NSEnumerator *oen = [_modelMap objectEnumerator]; + Class aClass = nil; + GSModelLoader *result = nil; + + while ((aClass = [oen nextObject]) != nil) + { + if ([aClass canReadData: theData]) + { + result = AUTORELEASE([[aClass alloc] init]); + break; + } + } + + return result; +} + @end