+/*
+ * For time immemorial, Mac OS X has defined version of most of these macros without the __ prefix, which
+ * could collide with similarly named functions or macros in user code, including new functionality in
+ * Boost and the C++ standard library.
+ *
+ * A future release of Mac OS X will no longer do this, and will require that clients move to the
+ * new macros as defined above. However, in the interim both the new and old macros will work, unless
+ * clients define a macro __ASSERT_MACROS_DEFINE_VERSIONS_WITHOUT_UNDERSCORES before this file is included
+ * in their compilations. Clients who do not want the older macros defined can accomplish this by adding
+ * #define __ASSERT_MACROS_DEFINE_VERSIONS_WITHOUT_UNDERSCORES 0
+ * at the top of their sources, or my adding -D__ASSERT_MACROS_DEFINE_VERSIONS_WITHOUT_UNDERSCORES=0 to the
+ * gcc compilation options.
+ *
+ * To aid users of these macros in converting their sources, the following tops script will convert usages
+ * of the old macros into the new equivalents. To do so, in Terminal go into the directory containing the
+ * sources to be converted and run this command.
+ *
+ find . -name '*.[c|cc|cp|cpp|m|mm|h]' -print0 | xargs -0 tops -verbose \
+ replace "check(<b args>)" with "__Check(<args>)" \
+ replace "check_noerr(<b args>)" with "__Check_noErr(<args>)" \
+ replace "check_noerr_string(<b args>)" with "__Check_noErr_String(<args>)" \
+ replace "check_string(<b args>)" with "__Check_String(<args>)" \
+ replace "require(<b args>)" with "__Require(<args>)" \
+ replace "require_action(<b args>)" with "__Require_Action(<args>)" \
+ replace "require_action_string(<b args>)" with "__Require_Action_String(<args>)" \
+ replace "require_noerr(<b args>)" with "__Require_noErr(<args>)" \
+ replace "require_noerr_action(<b args>)" with "__Require_noErr_Action(<args>)" \
+ replace "require_noerr_action_string(<b args>)" with "__Require_noErr_Action_String(<args>)" \
+ replace "require_noerr_string(<b args>)" with "__Require_noErr_String(<args>)" \
+ replace "require_string(<b args>)" with "__Require_String(<args>)" \
+ replace "verify(<b args>)" with "__Verify(<args>)" \
+ replace "verify_action(<b args>)" with "__Verify_Action(<args>)" \
+ replace "verify_noerr(<b args>)" with "__Verify_noErr(<args>)" \
+ replace "verify_noerr_action(<b args>)" with "__Verify_noErr_Action(<args>)" \
+ replace "verify_noerr_string(<b args>)" with "__Verify_noErr_String(<args>)" \
+ replace "verify_string(<b args>)" with "__Verify_String(<args>)" \
+ replace "ncheck(<b args>)" with "__nCheck(<args>)" \
+ replace "ncheck_string(<b args>)" with "__nCheck_String(<args>)" \
+ replace "nrequire(<b args>)" with "__nRequire(<args>)" \
+ replace "nrequire_action(<b args>)" with "__nRequire_Action(<args>)" \
+ replace "nrequire_action_quiet(<b args>)" with "__nRequire_Action_Quiet(<args>)" \
+ replace "nrequire_action_string(<b args>)" with "__nRequire_Action_String(<args>)" \
+ replace "nrequire_quiet(<b args>)" with "__nRequire_Quiet(<args>)" \
+ replace "nrequire_string(<b args>)" with "__nRequire_String(<args>)" \
+ replace "nverify(<b args>)" with "__nVerify(<args>)" \
+ replace "nverify_string(<b args>)" with "__nVerify_String(<args>)" \
+ replace "require_action_quiet(<b args>)" with "__Require_Action_Quiet(<args>)" \
+ replace "require_noerr_action_quiet(<b args>)" with "__Require_noErr_Action_Quiet(<args>)" \
+ replace "require_noerr_quiet(<b args>)" with "__Require_noErr_Quiet(<args>)" \
+ replace "require_quiet(<b args>)" with "__Require_Quiet(<args>)" \
+ replace "check_compile_time(<b args>)" with "__Check_Compile_Time(<args>)" \
+ replace "debug_string(<b args>)" with "__Debug_String(<args>)"
+ *
+ */
+
+#ifndef __ASSERT_MACROS_DEFINE_VERSIONS_WITHOUT_UNDERSCORES
+ /* If we haven't set this yet, it defaults to on. In the next release, this will default to off. */
+ #define __ASSERT_MACROS_DEFINE_VERSIONS_WITHOUT_UNDERSCORES 1
+#endif
+
+#if __ASSERT_MACROS_DEFINE_VERSIONS_WITHOUT_UNDERSCORES
+
+ #ifndef check
+ #define check(assertion) __Check(assertion)
+ #endif
+
+ #ifndef check_noerr
+ #define check_noerr(errorCode) __Check_noErr(errorCode)
+ #endif
+
+ #ifndef check_noerr_string
+ #define check_noerr_string(errorCode, message) __Check_noErr_String(errorCode, message)
+ #endif
+
+ #ifndef check_string
+ #define check_string(assertion, message) __Check_String(assertion, message)
+ #endif
+
+ #ifndef require
+ #define require(assertion, exceptionLabel) __Require(assertion, exceptionLabel)
+ #endif
+
+ #ifndef require_action
+ #define require_action(assertion, exceptionLabel, action) __Require_Action(assertion, exceptionLabel, action)
+ #endif
+
+ #ifndef require_action_string
+ #define require_action_string(assertion, exceptionLabel, action, message) __Require_Action_String(assertion, exceptionLabel, action, message)
+ #endif
+
+ #ifndef require_noerr
+ #define require_noerr(errorCode, exceptionLabel) __Require_noErr(errorCode, exceptionLabel)
+ #endif