[48687] users/toby/objcports

toby at macports.org toby at macports.org
Thu Mar 26 23:34:32 PDT 2009


Revision: 48687
          http://trac.macports.org/changeset/48687
Author:   toby at macports.org
Date:     2009-03-26 23:34:32 -0700 (Thu, 26 Mar 2009)
Log Message:
-----------
portindex parser
also, eliminate lots of lame autorelease

Modified Paths:
--------------
    users/toby/objcports/MPArrayAdditions.h
    users/toby/objcports/MPArrayAdditions.m
    users/toby/objcports/MPStringAdditions.h
    users/toby/objcports/MPStringAdditions.m
    users/toby/objcports/objcports.xcodeproj/project.pbxproj
    users/toby/objcports/port.m

Added Paths:
-----------
    users/toby/objcports/MPDictionaryAdditions.h
    users/toby/objcports/MPDictionaryAdditions.m
    users/toby/objcports/MPIndex.h
    users/toby/objcports/MPIndex.m

Modified: users/toby/objcports/MPArrayAdditions.h
===================================================================
--- users/toby/objcports/MPArrayAdditions.h	2009-03-27 06:02:52 UTC (rev 48686)
+++ users/toby/objcports/MPArrayAdditions.h	2009-03-27 06:34:32 UTC (rev 48687)
@@ -1,4 +1,3 @@
 @interface NSArray (MPArrayAdditions)
-+ (id)arrayWithTclObjects:(Tcl_Obj * const *)objects count:(int)count;
 - (id)initWithTclObjects:(Tcl_Obj * const *)objects count:(int)count;
 @end

Modified: users/toby/objcports/MPArrayAdditions.m
===================================================================
--- users/toby/objcports/MPArrayAdditions.m	2009-03-27 06:02:52 UTC (rev 48686)
+++ users/toby/objcports/MPArrayAdditions.m	2009-03-27 06:34:32 UTC (rev 48687)
@@ -6,19 +6,19 @@
 
 @implementation NSArray (MPArrayAdditions)
 
-+ (id)arrayWithTclObjects:(Tcl_Obj * const *)objects count:(int)count
-{
-	return [[[self alloc] initWithTclObjects:objects count:count] autorelease];
-}
-
 - (id)initWithTclObjects:(Tcl_Obj * const *)objects count:(int)count
 {
 	int i;
 	NSString *array[count];
+	NSArray *result;
 	for (i = 0; i < count; i++) {
-		array[i] = [NSString stringWithTclObject:objects[i]];
+		array[i] = [[NSString alloc] initWithTclObject:objects[i]];
 	}
-	return [self initWithObjects:array count:count];
+	result = [self initWithObjects:array count:count];
+	for (i = 0; i < count; i++) {
+		[array[i] release];
+	}
+	return result;
 }
 
 @end

Added: users/toby/objcports/MPDictionaryAdditions.h
===================================================================
--- users/toby/objcports/MPDictionaryAdditions.h	                        (rev 0)
+++ users/toby/objcports/MPDictionaryAdditions.h	2009-03-27 06:34:32 UTC (rev 48687)
@@ -0,0 +1,3 @@
+ at interface NSDictionary (MPDictionaryAdditions)
+- (id)initWithTclObjects:(Tcl_Obj * const *)objects count:(int)count;
+ at end

Added: users/toby/objcports/MPDictionaryAdditions.m
===================================================================
--- users/toby/objcports/MPDictionaryAdditions.m	                        (rev 0)
+++ users/toby/objcports/MPDictionaryAdditions.m	2009-03-27 06:34:32 UTC (rev 48687)
@@ -0,0 +1,34 @@
+#include <Foundation/Foundation.h>
+#include <tcl.h>
+
+#include "MPDictionaryAdditions.h"
+#include "MPStringAdditions.h"
+
+ at implementation NSDictionary (MPDictionaryAdditions)
+
+- (id)initWithTclObjects:(Tcl_Obj * const *)objects count:(int)count
+{
+	int count2, i;
+	NSDictionary *result;
+
+	if ((count % 2) != 0) {
+		return nil;
+	}
+
+	count2 = count / 2;
+
+	NSString *keys[count2];
+	NSString *objs[count2];
+	for (i = 0; i < count2; i++) {
+		keys[i] = [[NSString alloc] initWithTclObject:objects[i * 2]];
+		objs[i] = [[NSString alloc] initWithTclObject:objects[i * 2 + 1]];
+	}
+	result = [self initWithObjects:objs forKeys:keys count:count2];
+	for (i = 0; i < count2; i++) {
+		[keys[i] release];
+		[objs[i] release];
+	}
+	return result;
+}
+
+ at end

Added: users/toby/objcports/MPIndex.h
===================================================================
--- users/toby/objcports/MPIndex.h	                        (rev 0)
+++ users/toby/objcports/MPIndex.h	2009-03-27 06:34:32 UTC (rev 48687)
@@ -0,0 +1,8 @@
+ at interface MPIndex : NSObject
+{
+	NSMutableDictionary *_storage;
+}
+
+- (id)initWithPortindex:(NSString *)portindex;
+
+ at end

Added: users/toby/objcports/MPIndex.m
===================================================================
--- users/toby/objcports/MPIndex.m	                        (rev 0)
+++ users/toby/objcports/MPIndex.m	2009-03-27 06:34:32 UTC (rev 48687)
@@ -0,0 +1,112 @@
+#include <Foundation/Foundation.h>
+#include <tcl.h>
+
+#include "MPIndex.h"
+#include "MPArrayAdditions.h"
+#include "MPDictionaryAdditions.h"
+#include "MPStringAdditions.h"
+
+static NSDictionary *
+CopyIndexEntryFromTclList(Tcl_Interp *interp, Tcl_Obj **objects, int count)
+{
+	int count2, i;
+	NSDictionary *result = nil;
+
+	if ((count % 2) != 0) {
+		return nil;
+	}
+
+	count2 = count / 2;
+
+	NSString *keys[count2];
+	id objs[count2];
+	for (i = 0; i < count2; i++) {
+		keys[i] = [[NSString alloc] initWithTclObject:objects[i * 2]];
+		if ([keys[i] isEqualToString:@"variant_desc"]) {
+			int objc;
+			Tcl_Obj **objv;
+			Tcl_ListObjGetElements(interp, objects[i * 2 + 1], &objc, &objv);
+			objs[i] = [[NSDictionary alloc] initWithTclObjects:objv count:objc];
+		} else if ([keys[i] isEqualToString:@"categories"] || [keys[i] isEqualToString:@"maintainers"] || [keys[i] isEqualToString:@"platforms"] || [keys[i] isEqualToString:@"variants"]) {
+			int objc;
+			Tcl_Obj **objv;
+			Tcl_ListObjGetElements(interp, objects[i * 2 + 1], &objc, &objv);
+			objs[i] = [[NSArray alloc] initWithTclObjects:objv count:objc];
+		} else {
+			objs[i] = [[NSString alloc] initWithTclObject:objects[i * 2 + 1]];
+		}
+	}
+	result = [[NSDictionary alloc] initWithObjects:objs forKeys:keys count:count2];
+	for (i = 0; i < count2; i++) {
+		[keys[i] release];
+		[objs[i] release];
+	}
+	return result;
+}
+
+ at implementation MPIndex
+
+- (id)initWithPortindex:(NSString *)portindex
+{
+	Tcl_Interp *interp;
+	Tcl_Channel chan;
+
+	self = [super init];
+
+	_storage = [[NSMutableDictionary alloc] initWithCapacity:0];
+
+	interp = Tcl_CreateInterp();
+	assert(Tcl_SetSystemEncoding(interp, "utf-8") == TCL_OK);
+	chan = Tcl_OpenFileChannel(interp, [portindex UTF8String], "r", 0);
+	Tcl_RegisterChannel(interp, chan);
+
+	while (1) {
+		int objc;
+		Tcl_Obj **objv;
+		id key, object;
+		NSArray *info;
+		Tcl_Obj *line;
+		int len;
+
+		line = Tcl_NewObj();
+		Tcl_IncrRefCount(line);
+
+		/* Read info line. */
+		if (Tcl_GetsObj(chan, line) < 0) {
+			Tcl_DecrRefCount(line);
+			break;
+		}
+		Tcl_ListObjGetElements(interp, line, &objc, &objv);
+		info = [[NSArray alloc] initWithTclObjects:objv count:objc];
+		assert([info count] == 2);
+		key = [[info objectAtIndex:0] retain];
+		len = [[info objectAtIndex:1] intValue];
+		[info release];
+
+		/* Read dictionary. */
+		Tcl_ReadChars(chan, line, len, 0);
+		Tcl_ListObjGetElements(interp, line, &objc, &objv);
+		object = CopyIndexEntryFromTclList(interp, objv, objc);
+		assert(object != nil);
+
+		/* Store data. */
+		[_storage setObject:object forKey:key];
+		[object release];
+		[key release];
+
+		Tcl_DecrRefCount(line);
+	}
+
+	Tcl_UnregisterChannel(interp, chan);
+	Tcl_DeleteInterp(interp);
+
+	return self;
+}
+
+- (void)dealloc
+{
+	[_storage release];
+	[super dealloc];
+}
+
+ at end

Modified: users/toby/objcports/MPStringAdditions.h
===================================================================
--- users/toby/objcports/MPStringAdditions.h	2009-03-27 06:02:52 UTC (rev 48686)
+++ users/toby/objcports/MPStringAdditions.h	2009-03-27 06:34:32 UTC (rev 48687)
@@ -1,4 +1,3 @@
 @interface NSString (MPStringAdditions)
-+ (id)stringWithTclObject:(Tcl_Obj *)object;
 - (id)initWithTclObject:(Tcl_Obj *)object;
 @end

Modified: users/toby/objcports/MPStringAdditions.m
===================================================================
--- users/toby/objcports/MPStringAdditions.m	2009-03-27 06:02:52 UTC (rev 48686)
+++ users/toby/objcports/MPStringAdditions.m	2009-03-27 06:34:32 UTC (rev 48687)
@@ -5,11 +5,6 @@
 
 @implementation NSString (MPStringAdditions)
 
-+ (id)stringWithTclObject:(Tcl_Obj *)object
-{
-	return [[[self alloc] initWithTclObject:object] autorelease];
-}
-
 - (id)initWithTclObject:(Tcl_Obj *)object
 {
 	return [self initWithUTF8String:Tcl_GetString(object)];

Modified: users/toby/objcports/objcports.xcodeproj/project.pbxproj
===================================================================
--- users/toby/objcports/objcports.xcodeproj/project.pbxproj	2009-03-27 06:02:52 UTC (rev 48686)
+++ users/toby/objcports/objcports.xcodeproj/project.pbxproj	2009-03-27 06:34:32 UTC (rev 48687)
@@ -8,6 +8,8 @@
 
 /* Begin PBXBuildFile section */
 		8DD76F9C0486AA7600D96B5E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 08FB779EFE84155DC02AAC07 /* Foundation.framework */; };
+		DA96BED00F7C9C2500362779 /* MPIndex.m in Sources */ = {isa = PBXBuildFile; fileRef = DA96BECF0F7C9C2500362779 /* MPIndex.m */; };
+		DA96BF4C0F7CA1A700362779 /* MPDictionaryAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = DA96BF4B0F7CA1A700362779 /* MPDictionaryAdditions.m */; };
 		DAD371710F0280EF0064AFF4 /* port.m in Sources */ = {isa = PBXBuildFile; fileRef = DAD371680F0280EF0064AFF4 /* port.m */; };
 		DAD371720F0280EF0064AFF4 /* MPArrayAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = DAD3716A0F0280EF0064AFF4 /* MPArrayAdditions.m */; };
 		DAD371730F0280EF0064AFF4 /* MPParser.m in Sources */ = {isa = PBXBuildFile; fileRef = DAD3716C0F0280EF0064AFF4 /* MPParser.m */; };
@@ -31,6 +33,10 @@
 /* Begin PBXFileReference section */
 		08FB779EFE84155DC02AAC07 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = "<absolute>"; };
 		8DD76FA10486AA7600D96B5E /* port */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = port; sourceTree = BUILT_PRODUCTS_DIR; };
+		DA96BECE0F7C9C2500362779 /* MPIndex.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPIndex.h; sourceTree = "<group>"; };
+		DA96BECF0F7C9C2500362779 /* MPIndex.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPIndex.m; sourceTree = "<group>"; };
+		DA96BF4A0F7CA1A700362779 /* MPDictionaryAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPDictionaryAdditions.h; sourceTree = "<group>"; };
+		DA96BF4B0F7CA1A700362779 /* MPDictionaryAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPDictionaryAdditions.m; sourceTree = "<group>"; };
 		DAD371680F0280EF0064AFF4 /* port.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = port.m; sourceTree = "<group>"; };
 		DAD371690F0280EF0064AFF4 /* MPArrayAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPArrayAdditions.h; sourceTree = "<group>"; };
 		DAD3716A0F0280EF0064AFF4 /* MPArrayAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPArrayAdditions.m; sourceTree = "<group>"; };
@@ -73,6 +79,10 @@
 				DAD371680F0280EF0064AFF4 /* port.m */,
 				DAD371690F0280EF0064AFF4 /* MPArrayAdditions.h */,
 				DAD3716A0F0280EF0064AFF4 /* MPArrayAdditions.m */,
+				DA96BF4A0F7CA1A700362779 /* MPDictionaryAdditions.h */,
+				DA96BF4B0F7CA1A700362779 /* MPDictionaryAdditions.m */,
+				DA96BECE0F7C9C2500362779 /* MPIndex.h */,
+				DA96BECF0F7C9C2500362779 /* MPIndex.m */,
 				DAD3716B0F0280EF0064AFF4 /* MPParser.h */,
 				DAD3716C0F0280EF0064AFF4 /* MPParser.m */,
 				DAD3716D0F0280EF0064AFF4 /* MPPort.h */,
@@ -152,9 +162,11 @@
 			files = (
 				DAD371710F0280EF0064AFF4 /* port.m in Sources */,
 				DAD371720F0280EF0064AFF4 /* MPArrayAdditions.m in Sources */,
+				DAD371750F0280EF0064AFF4 /* MPStringAdditions.m in Sources */,
+				DA96BED00F7C9C2500362779 /* MPIndex.m in Sources */,
 				DAD371730F0280EF0064AFF4 /* MPParser.m in Sources */,
 				DAD371740F0280EF0064AFF4 /* MPPort.m in Sources */,
-				DAD371750F0280EF0064AFF4 /* MPStringAdditions.m in Sources */,
+				DA96BF4C0F7CA1A700362779 /* MPDictionaryAdditions.m in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};

Modified: users/toby/objcports/port.m
===================================================================
--- users/toby/objcports/port.m	2009-03-27 06:02:52 UTC (rev 48686)
+++ users/toby/objcports/port.m	2009-03-27 06:34:32 UTC (rev 48687)
@@ -1,6 +1,7 @@
 #include <Foundation/Foundation.h>
 #include <tcl.h>
 
+#include "MPIndex.h"
 #include "MPPort.h"
 
 int
@@ -11,6 +12,15 @@
 	if (argc < 2)
 		exit(1);
 
+#if 0
+	NSString *filename = [[NSString alloc] initWithUTF8String:argv[1]];
+	MPIndex *index = [[MPIndex alloc] initWithPortindex:filename];
+	[filename release];
+	// do stuff
+	[index release];
+	return 0;
+#endif
+
 	while (--argc) {
 		MPPort *port = [[MPPort alloc] initWithPortfile:[NSString stringWithUTF8String:*++argv] options:nil];
 		NSLog(@"%@ @%@ (%@)", [port variable:@"name"], [port variable:@"version"], [port variable:@"categories"]);
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macports-changes/attachments/20090326/2cfee96d/attachment.html>


More information about the macports-changes mailing list