#ifndef _H_UException
#define _H_UException
#pragma once
#include <UDebugging.h>
#include <Carbon/Carbon.h>
#include <Carbon/Carbon.h>
#include <Carbon/Carbon.h>
#if PP_Uses_Pragma_Import
#pragma import on
#endif
const ExceptionCode err_NilPointer = FOUR_CHAR_CODE('nilP');
const ExceptionCode err_AssertFailed = FOUR_CHAR_CODE('asrt');
#define Try_ try
#define Catch_(err) catch(PP_PowerPlant::ExceptionCode err)
#define EndCatch_
#define ThrowThisIf_(test,err) \
do { \
if (test) Throw_(err); \
} while (false)
#define ThrowThisIfNot_(test,err) \
do { \
if (!(test)) Throw_(err); \
} while (false)
#define ThrowThisIfNULL_(ptr,err) \
do { \
if ((ptr) == NULL) Throw_(err); \
} while (false)
#define ThrowThisIfOSErr_(err,value) \
do { \
OSErr __theErr = err; \
if (__theErr != eDSNoErr) { \
Throw_(value); \
} \
} while (false)
#define ThrowIfOSStatus_(err) \
do { \
OSStatus __theErr = err; \
if (__theErr != noErr) { \
Throw_(__theErr); \
} \
} while (false)
#define ThrowIfOSErr_(err) \
do { \
OSErr __theErr = err; \
if (__theErr != noErr) { \
Throw_(__theErr); \
} \
} while (false)
#define ThrowIfError_(err) \
do { \
PP_PowerPlant::ExceptionCode __theErr = err; \
if (__theErr != 0) { \
Throw_(__theErr); \
} \
} while (false)
#define ThrowOSErr_(err) Throw_(err)
#define ThrowIfNil_(ptr) \
do { \
if ((ptr) == nil) Throw_(PP_PowerPlant::err_NilPointer); \
} while (false)
#define ThrowIfNULL_(ptr) \
do { \
if ((ptr) == nil) Throw_(PP_PowerPlant::err_NilPointer); \
} while (false)
#define ThrowIfResError_() ThrowIfOSErr_(::ResError())
#define ThrowIfMemError_() ThrowIfOSErr_(::MemError())
#define ThrowIfQDError_() ThrowIfOSErr_(::QDError())
#define ThrowIfPrError_() ThrowIfOSErr_(::PrError())
#define ThrowIfResFail_(h) \
do { \
if ((h) == nil) { \
OSErr __theErr = ::ResError(); \
if (__theErr == noErr) { \
__theErr = resNotFound; \
} \
Throw_(__theErr); \
} \
} while (false)
#define ThrowIfMemFail_(p) \
do { \
if ((p) == nil) { \
OSErr __theErr = ::MemError(); \
if (__theErr == noErr) __theErr = memFullErr; \
Throw_(__theErr); \
} \
} while (false)
#define ThrowIf_(test) \
do { \
if (test) Throw_(PP_PowerPlant::err_AssertFailed); \
} while (false)
#define ThrowIfNot_(test) \
do { \
if (!(test)) Throw_(PP_PowerPlant::err_AssertFailed); \
} while (false)
#define FailOSErr_(err) ThrowIfOSErr_(err)
#define FailNIL_(ptr) ThrowIfNil_(ptr)
#if PP_Uses_Pragma_Import
#pragma import reset
#endif
#endif