[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