Thrift-1340: Add support of ARC to Objective-C
Client: Objective-c
Patch: Hirano Satoshi

Adds -objc-arc flag to compiler and if used removes the retain/release/autorelease from generated code



git-svn-id: https://svn.apache.org/repos/asf/thrift/trunk@1210732 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/lib/cocoa/src/transport/THTTPClient.m b/lib/cocoa/src/transport/THTTPClient.m
index 1eaa859..5617d45 100644
--- a/lib/cocoa/src/transport/THTTPClient.m
+++ b/lib/cocoa/src/transport/THTTPClient.m
@@ -19,6 +19,7 @@
 
 #import "THTTPClient.h"
 #import "TTransportException.h"
+#import "TObjective-C.h"
 
 @implementation THTTPClient
 
@@ -26,7 +27,7 @@
 - (void) setupRequest
 {
   if (mRequest != nil) {
-    [mRequest release];
+    [mRequest release_stub];
   }
 
   // set up our request object that we'll use for each request
@@ -67,9 +68,9 @@
 
   mTimeout = timeout;
   if (userAgent) {
-    mUserAgent = [userAgent retain];
+    mUserAgent = [userAgent retain_stub];
   }
-  mURL = [aURL retain];
+  mURL = [aURL retain_stub];
 
   [self setupRequest];
 
@@ -82,8 +83,8 @@
 
 - (void) setURL: (NSURL *) aURL
 {
-  [aURL retain];
-  [mURL release];
+  [aURL retain_stub];
+  [mURL release_stub];
   mURL = aURL;
 
   [self setupRequest];
@@ -92,12 +93,12 @@
 
 - (void) dealloc
 {
-  [mURL release];
-  [mUserAgent release];
-  [mRequest release];
-  [mRequestData release];
-  [mResponseData release];
-  [super dealloc];
+  [mURL release_stub];
+  [mUserAgent release_stub];
+  [mRequest release_stub];
+  [mRequestData release_stub];
+  [mResponseData release_stub];
+  [super dealloc_stub];
 }
 
 
@@ -151,8 +152,8 @@
   }
 
   // phew!
-  [mResponseData release];
-  mResponseData = [responseData retain];
+  [mResponseData release_stub];
+  mResponseData = [responseData retain_stub];
   mResponseDataOffset = 0;
 }
 
diff --git a/lib/cocoa/src/transport/TMemoryBuffer.m b/lib/cocoa/src/transport/TMemoryBuffer.m
index 869010a..c3801c7 100644
--- a/lib/cocoa/src/transport/TMemoryBuffer.m
+++ b/lib/cocoa/src/transport/TMemoryBuffer.m
@@ -19,6 +19,7 @@
 
 #import "TMemoryBuffer.h"
 #import "TTransportException.h"
+#import "TObjective-C.h"
 
 #define GARBAGE_BUFFER_SIZE 4096 // 4KiB
 
@@ -61,11 +62,11 @@
 }
 
 - (NSData *)getBuffer {
-	return [[mBuffer copy] autorelease];
+	return [[mBuffer copy] autorelease_stub];
 }
 
 - (void)dealloc {
-	[mBuffer release];
-	[super dealloc];
+	[mBuffer release_stub];
+	[super dealloc_stub];
 }
 @end
diff --git a/lib/cocoa/src/transport/TNSFileHandleTransport.m b/lib/cocoa/src/transport/TNSFileHandleTransport.m
index b218218..0ff200b 100644
--- a/lib/cocoa/src/transport/TNSFileHandleTransport.m
+++ b/lib/cocoa/src/transport/TNSFileHandleTransport.m
@@ -20,6 +20,7 @@
 
 #import "TNSFileHandleTransport.h"
 #import "TTransportException.h"
+#import "TObjective-C.h"
 
 
 @implementation TNSFileHandleTransport
@@ -36,17 +37,17 @@
 {
   self = [super init];
 
-  mInputFileHandle = [inputFileHandle retain];
-  mOutputFileHandle = [outputFileHandle retain];
+  mInputFileHandle = [inputFileHandle retain_stub];
+  mOutputFileHandle = [outputFileHandle retain_stub];
 
   return self;
 }
 
 
 - (void) dealloc {
-  [mInputFileHandle release];
-  [mOutputFileHandle release];
-  [super dealloc];
+  [mInputFileHandle release_stub];
+  [mOutputFileHandle release_stub];
+  [super dealloc_stub];
 }
 
 
@@ -66,9 +67,10 @@
 }
 
 
-- (void) write: (uint8_t *) data offset: (unsigned int) offset length: (unsigned int) length
+- (void) write: (const uint8_t *) data offset: (unsigned int) offset length: (unsigned int) length
 {
-  NSData * dataObject = [[NSData alloc] initWithBytesNoCopy: data+offset
+  void *pos = (void *) data + offset;
+  NSData * dataObject = [[NSData alloc] initWithBytesNoCopy: pos // data+offset
                                                      length: length
                                                freeWhenDone: NO];
 
@@ -79,7 +81,7 @@
                                            reason: [NSString stringWithFormat: @"%s: Unable to write data: %@", __PRETTY_FUNCTION__, e]];
   }
 
-  [dataObject release];
+  [dataObject release_stub];
 }
 
 
diff --git a/lib/cocoa/src/transport/TNSStreamTransport.m b/lib/cocoa/src/transport/TNSStreamTransport.m
index 1d4cfee..265e0ba 100644
--- a/lib/cocoa/src/transport/TNSStreamTransport.m
+++ b/lib/cocoa/src/transport/TNSStreamTransport.m
@@ -19,6 +19,7 @@
 
 #import "TNSStreamTransport.h"
 #import "TTransportException.h"
+#import "TObjective-C.h"
 
 
 @implementation TNSStreamTransport
@@ -26,9 +27,9 @@
 - (id) initWithInputStream: (NSInputStream *) input
               outputStream: (NSOutputStream *) output
 {
-  [super init];
-  mInput = [input retain];
-  mOutput = [output retain];
+  self = [super init];
+  mInput = [input retain_stub];
+  mOutput = [output retain_stub];
   return self;
 }
 
@@ -44,9 +45,9 @@
 
 - (void) dealloc
 {
-  [mInput release];
-  [mOutput release];
-  [super dealloc];
+  [mInput release_stub];
+  [mOutput release_stub];
+  [super dealloc_stub];
 }
 
 
@@ -65,7 +66,7 @@
 }
 
 
-- (void) write: (uint8_t *) data offset: (unsigned int) offset length: (unsigned int) length
+- (void) write: (const uint8_t *) data offset: (unsigned int) offset length: (unsigned int) length
 {
   int got = 0;
   int result = 0;
diff --git a/lib/cocoa/src/transport/TSocketClient.h b/lib/cocoa/src/transport/TSocketClient.h
index 0ea957d..372850f 100644
--- a/lib/cocoa/src/transport/TSocketClient.h
+++ b/lib/cocoa/src/transport/TSocketClient.h
@@ -20,7 +20,11 @@
 #import <Foundation/Foundation.h>
 #import "TNSStreamTransport.h"
 
-@interface TSocketClient : TNSStreamTransport {
+@interface TSocketClient : TNSStreamTransport 
+#if TARGET_OS_IPHONE || (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6)
+<NSStreamDelegate>
+#endif
+{
 }
 
 - (id) initWithHostname: (NSString *) hostname
diff --git a/lib/cocoa/src/transport/TSocketClient.m b/lib/cocoa/src/transport/TSocketClient.m
index 74d4af9..256ecf3 100644
--- a/lib/cocoa/src/transport/TSocketClient.m
+++ b/lib/cocoa/src/transport/TSocketClient.m
@@ -17,6 +17,7 @@
  * under the License.
  */
 #import "TSocketClient.h"
+#import "TObjective-C.h"
 
 #if !TARGET_OS_IPHONE
 #import <CoreServices/CoreServices.h>
@@ -33,22 +34,24 @@
 	NSOutputStream * outputStream = NULL;
 	CFReadStreamRef readStream = NULL;
 	CFWriteStreamRef writeStream = NULL;
-	CFStreamCreatePairWithSocketToHost(kCFAllocatorDefault, (CFStringRef)hostname, port, &readStream, &writeStream);
+	CFStreamCreatePairWithSocketToHost(kCFAllocatorDefault, (bridge_stub CFStringRef)hostname, port, &readStream, &writeStream);
 	if (readStream && writeStream) {
 		CFReadStreamSetProperty(readStream, kCFStreamPropertyShouldCloseNativeSocket, kCFBooleanTrue);
 		CFWriteStreamSetProperty(writeStream, kCFStreamPropertyShouldCloseNativeSocket, kCFBooleanTrue);
 		
-		inputStream = (NSInputStream *)readStream;
-		[inputStream retain];
+		inputStream = (bridge_stub NSInputStream *)readStream;
+		[inputStream retain_stub];
 		[inputStream setDelegate:self];
 		[inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
 		[inputStream open];
 		
-		outputStream = (NSOutputStream *)writeStream;
-		[outputStream retain];
+		outputStream = (bridge_stub NSOutputStream *)writeStream;
+		[outputStream retain_stub];
 		[outputStream setDelegate:self];
 		[outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
 		[outputStream open];
+        CFRelease(readStream);
+        CFRelease(writeStream);
 	}
 	
 	self = [super initWithInputStream: inputStream outputStream: outputStream];
diff --git a/lib/cocoa/src/transport/TTransportException.m b/lib/cocoa/src/transport/TTransportException.m
index aa67149..43cdfbd 100644
--- a/lib/cocoa/src/transport/TTransportException.m
+++ b/lib/cocoa/src/transport/TTransportException.m
@@ -18,6 +18,7 @@
  */
 
 #import "TTransportException.h"
+#import "TObjective-C.h"
 
 @implementation TTransportException