Skip to content

Instantly share code, notes, and snippets.

@shaps80
Forked from samdods/gist:8979831
Created March 16, 2014 21:47
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save shaps80/9590376 to your computer and use it in GitHub Desktop.
Save shaps80/9590376 to your computer and use it in GitHub Desktop.
typedef NS_ENUM(NSInteger, kErrorCode) {
kErrorCodeInternal = 431432,
};
extern NSError *NSErrorMake(NSString *message, NSInteger code, NSDictionary *aUserInfo, NSString *methodOrFunction);
#define NSObjcAssert NSAssert
#define InvalidConditionString(condition) (@"Invalid condition not satisfying: " #condition)
#define GenericAssertCondition(ctype, condition) NS ## ctype ## Assert((condition), InvalidConditionString((condition)))
#define GenericErrorMake(condition, func) NSErrorMake(InvalidConditionString((condition)), kErrorCodeInternal, nil, func)
#define GenericAssertTrueOrPerformAction(ctype, condition, action) do{ ctype ## AssertCondition(condition); \
if (!(condition)) { ctype ## ErrorMake(condition); action; } } while(0)
#pragma mark - Objective-C methods
#define ObjcAssertCondition(condition) GenericAssertCondition(Objc, condition)
#define ObjcErrorMake(condition) GenericErrorMake((condition), NSStringFromSelector(_cmd))
#define AssertTrueOrReturnError(condition) do{ ObjcAssertCondition(condition); \
if (!(condition)) { return ErrorMake(condition); } } while(0)
#define AssertTrueOrPerformAction(condition, action) GenericAssertTrueOrPerformAction(Objc, condition, action)
#define AssertTrueOrReturn(condition) AssertTrueOrPerformAction(condition, return)
#define AssertTrueOrReturnNo(condition) AssertTrueOrPerformAction(condition, return NO)
#define AssertTrueOrReturnNil(condition) AssertTrueOrPerformAction(condition, return nil)
#pragma mark - C-based Functions
#define CAssertCondition(condition) GenericAssertCondition(C, condition)
#define CErrorMake(condition) GenericErrorMake((condition), [NSString stringWithUTF8String:__PRETTY_FUNCTION__])
#define CAssertTrueOrReturnError(condition) do{ CAssertCondition(condition); \
if (!(condition)) { return CErrorMake(condition); } } while(0)
#define CAssertTrueOrPerformAction(condition, action) GenericAssertTrueOrPerformAction(C, condition, action)
#define CAssertTrueOrReturn(condition) CAssertTrueOrPerformAction(condition, return)
#define CAssertTrueOrReturnNo(condition) CAssertTrueOrPerformAction(condition, return NO)
#define CAssertTrueOrReturnNil(condition) CAssertTrueOrPerformAction(condition, return nil)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment