aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Hoà V. DINH <dinh.viet.hoa@gmail.com>2013-10-25 19:00:51 -0700
committerGravatar Hoà V. DINH <dinh.viet.hoa@gmail.com>2013-10-25 19:00:51 -0700
commitfcca7cc26cbdfc8739edd8db678b497af23d5b21 (patch)
tree24c5e66dd6625845e5a8de1de05231cbcdf3ba92
parentaa98c2e77818ffa0d355ff4008b7759a7acfe810 (diff)
parentc8f7c51fde01bf067ec18c3907508b923e61f200 (diff)
Merge pull request #431 from CodaFi/assume-main-thread
- Assume main thread. - Added Obj-C accessors for callbackDispatchQueue.
-rw-r--r--src/core/basetypes/MCOperation.cc30
-rw-r--r--src/core/basetypes/MCOperation.h42
-rw-r--r--src/objc/utils/MCOOperation.h11
-rw-r--r--src/objc/utils/MCOOperation.mm2
4 files changed, 46 insertions, 39 deletions
diff --git a/src/core/basetypes/MCOperation.cc b/src/core/basetypes/MCOperation.cc
index 5829d739..0995340b 100644
--- a/src/core/basetypes/MCOperation.cc
+++ b/src/core/basetypes/MCOperation.cc
@@ -4,11 +4,11 @@ using namespace mailcore;
Operation::Operation()
{
- mCallback = NULL;
- mCancelled = false;
- pthread_mutex_init(&mLock, NULL);
+ mCallback = NULL;
+ mCancelled = false;
+ pthread_mutex_init(&mLock, NULL);
#if __APPLE__
- mCallbackDispatchQueue = dispatch_get_current_queue();
+ mCallbackDispatchQueue = dispatch_get_main_queue();
#else
mCallbackDispatchQueue = NULL;
#endif
@@ -16,33 +16,33 @@ Operation::Operation()
Operation::~Operation()
{
- pthread_mutex_destroy(&mLock);
+ pthread_mutex_destroy(&mLock);
}
void Operation::setCallback(OperationCallback * callback)
{
- mCallback = callback;
+ mCallback = callback;
}
OperationCallback * Operation::callback()
{
- return mCallback;
+ return mCallback;
}
void Operation::cancel()
{
- pthread_mutex_lock(&mLock);
- mCancelled = true;
- pthread_mutex_unlock(&mLock);
+ pthread_mutex_lock(&mLock);
+ mCancelled = true;
+ pthread_mutex_unlock(&mLock);
}
bool Operation::isCancelled()
{
- pthread_mutex_lock(&mLock);
- bool value = mCancelled;
- pthread_mutex_unlock(&mLock);
-
- return value;
+ pthread_mutex_lock(&mLock);
+ bool value = mCancelled;
+ pthread_mutex_unlock(&mLock);
+
+ return value;
}
void Operation::beforeMain()
diff --git a/src/core/basetypes/MCOperation.h b/src/core/basetypes/MCOperation.h
index db0e5b35..bd61e073 100644
--- a/src/core/basetypes/MCOperation.h
+++ b/src/core/basetypes/MCOperation.h
@@ -13,23 +13,23 @@
namespace mailcore {
- class OperationCallback;
-
- class Operation : public Object {
- public:
- Operation();
- virtual ~Operation();
-
- virtual void setCallback(OperationCallback * callback);
- virtual OperationCallback * callback();
+ class OperationCallback;
+
+ class Operation : public Object {
+ public:
+ Operation();
+ virtual ~Operation();
+
+ virtual void setCallback(OperationCallback * callback);
+ virtual OperationCallback * callback();
+
+ virtual void cancel();
+ virtual bool isCancelled();
- virtual void cancel();
- virtual bool isCancelled();
-
// Will be called on main thread.
virtual void beforeMain();
- virtual void main();
+ virtual void main();
// Will be called on main thread.
virtual void afterMain();
@@ -40,17 +40,17 @@ namespace mailcore {
virtual void setCallbackDispatchQueue(dispatch_queue_t callbackDispatchQueue);
virtual dispatch_queue_t callbackDispatchQueue();
#endif
-
- private:
- OperationCallback * mCallback;
- bool mCancelled;
- pthread_mutex_t mLock;
+
+ private:
+ OperationCallback * mCallback;
+ bool mCancelled;
+ pthread_mutex_t mLock;
#ifdef __APPLE__
dispatch_queue_t mCallbackDispatchQueue;
#endif
-
- };
-
+
+ };
+
}
#endif
diff --git a/src/objc/utils/MCOOperation.h b/src/objc/utils/MCOOperation.h
index 3f6b42c5..08e74d84 100644
--- a/src/objc/utils/MCOOperation.h
+++ b/src/objc/utils/MCOOperation.h
@@ -14,15 +14,20 @@
@interface MCOOperation : NSObject
+/** Returns whether the operation is cancelled.*/
@property (readonly) BOOL isCancelled;
-// This methods is called on the main thread when the asynchronous operation is finished.
-// Needs to be overriden by subclasses.
+/** The queue this operation dispatches the callback on. Defaults to the main queue.*/
+@property (nonatomic, assign) dispatch_queue_t callbackDispatchQueue;
+
+/** This methods is called on the main thread when the asynchronous operation is finished.
+ Needs to be overriden by subclasses.*/
- (void) operationCompleted;
-// Cancel the operation.
+/** Cancel the operation.*/
- (void) cancel;
+
@end
#endif
diff --git a/src/objc/utils/MCOOperation.mm b/src/objc/utils/MCOOperation.mm
index 37146b39..7502afae 100644
--- a/src/objc/utils/MCOOperation.mm
+++ b/src/objc/utils/MCOOperation.mm
@@ -81,6 +81,8 @@ public:
return MCO_NATIVE_INSTANCE->isCancelled();
}
+MCO_OBJC_SYNTHESIZE_SCALAR(dispatch_queue_t, dispatch_queue_t, setCallbackDispatchQueue, callbackDispatchQueue);
+
- (void) cancel
{
if (_started) {