XML_Macros.h File Reference

#include "ace/config-all.h"
#include "ace/Exception_Macros.h"

Include dependency graph for XML_Macros.h:

This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Native C++ exceptions portability macros.

The following macros are used to write code portable between platforms with and without native C++ exception support. Their main goal is to hide the presence of the ACEXML_ENV_TYPE argument, but they collaborate with the ACEXML_TRY_* macros to emulate the try/catch blocks.

#define ACEXML_ENV_EMIT_CODE(X)   X
 Define a macro to emit code only when ACEXML_ENV_TYPE is used.
#define ACEXML_ENV_EMIT_CODE2(X, Y)   X,Y
 Another macro to emit code only when ACEXML_ENV_TYPE is used.
#define ACEXML_ENV_EMIT_DUMMY
 Helper macro.
#define ACEXML_ENV_ARG_DECL
#define ACEXML_ENV_ARG_DECL_NOT_USED
#define ACEXML_ENV_SINGLE_ARG_DECL   ACEXML_ENV_EMIT_CODE(ACEXML_ENV_TYPE &ACEXML_TRY_ENV)
#define ACEXML_ENV_SINGLE_ARG_DECL_NOT_USED   ACEXML_ENV_EMIT_CODE(ACEXML_ENV_TYPE &)
 Declare a ACEXML_ENV_TYPE argument for methods which don't use it.
#define ACEXML_ENV_ARG_PARAMETER
 Use the ACEXML_ENV_TYPE argument in a nested call.
#define ACEXML_ENV_SINGLE_ARG_PARAMETER   ACEXML_ENV_EMIT_CODE(ACEXML_TRY_ENV)
#define ACEXML_ENV_ARG_NOT_USED   ACEXML_ENV_EMIT_CODE(ACE_UNUSED_ARG(ACEXML_TRY_ENV))
 Eliminate unused argument warnings about ACEXML_TRY_ENV.

Defines

#define ACE_del_bad_alloc
#define ACEXML_ENV_TYPE   ACEXML_Env
#define ACEXML_TRY_ENV   _ACEXML_Env_variable
#define ACEXML_EXCEPTION_TYPE   ACEXML_Exception
#define ACEXML_ANY_EXCEPTION   ex
#define ACEXML_DECLARE_NEW_ENV   ACEXML_ENV_TYPE ACEXML_TRY_ENV
#define ACEXML_ADOPT_ENV(ENV)   ACEXML_ENV_TYPE &ACEXML_TRY_ENV = ENV
#define ACEXML_CHECK
#define ACEXML_CHECK_RETURN(RETV)
#define ACEXML_THROW_R_INT(EXCEPTION)   ACEXML_TRY_ENV.exception (new EXCEPTION)
#define ACEXML_THROW(EXCEPTION)
#define ACEXML_THROW_RETURN(EXCEPTION, RETV)
#define ACEXML_TRY
#define ACEXML_TRY_NEW_ENV
#define ACEXML_TRY_EX(LABEL)
#define ACEXML_TRY_CHECK
#define ACEXML_TRY_CHECK_EX(LABEL)
#define ACEXML_TRY_THROW(EXCEPTION)
#define ACEXML_TRY_THROW_EX(EXCEPTION, LABEL)
#define ACEXML_CATCH(TYPE, VAR)
#define ACEXML_CATCHANY   ACEXML_CATCH (ACEXML_EXCEPTION_TYPE, ACEXML_ANY_EXCEPTION)
#define ACEXML_CATCHALL   ACEXML_CATCHANY
#define ACEXML_RE_THROW
#define ACEXML_RE_THROW_EX(LABEL)
#define ACEXML_ENDTRY
#define ACEXML_NEW_THROW_EX(POINTER, CONSTRUCTOR, EXCEPTION)
#define ACEXML_GUARD_THROW_EX(MUTEX, OBJ, LOCK, EXCEPTION)
#define ACEXML_READ_GUARD_THROW_EX(MUTEX, OBJ, LOCK, EXCEPTION)
#define ACEXML_WRITE_GUARD_THROW_EX(MUTEX, OBJ, LOCK, EXCEPTION)
#define ACEXML_ENV_RAISE(ex)   ACEXML_TRY_ENV.exception (ex)


Detailed Description

Id
XML_Macros.h 80826 2008-03-04 14:51:23Z wotte

Writing code that is portable between platforms with or without native C++ exceptions is hard. The following macros offer some help on this task.

Author:
Nanbor Wang <nanbor@cs.wustl.edu>

Aniruddha Gokhale <gokhale@sahyadri.research.bell-labs.com>

Carlos O'Ryan <coryan@uci.edu>

Krishnakumar B <kitty@cs.wustl.edu>, et al.

Definition in file XML_Macros.h.


Define Documentation

#define ACE_del_bad_alloc

Definition at line 45 of file XML_Macros.h.

#define ACEXML_ADOPT_ENV ( ENV   )     ACEXML_ENV_TYPE &ACEXML_TRY_ENV = ENV

Definition at line 176 of file XML_Macros.h.

#define ACEXML_ANY_EXCEPTION   ex

Definition at line 74 of file XML_Macros.h.

#define ACEXML_CATCH ( TYPE,
VAR   ) 

Value:

} while (0); \
   do \
     if (ACEXML_TRY_ENV.exception () != 0 && ACEXML_EXCEPTION_NOT_CAUGHT && \
       TYPE::_downcast(ACEXML_TRY_ENV.exception ()) != 0) \
       { \
         ACEXML_ENV_TYPE ACEXML_CAUGHT_ENV = ACEXML_TRY_ENV;\
         ACEXML_EXCEPTION_NOT_CAUGHT = 0; \
         TYPE &VAR = *TYPE::_downcast (ACEXML_CAUGHT_ENV.exception ()); \
         ACE_UNUSED_ARG (VAR); \
         ACEXML_TRY_ENV.clear ();

Definition at line 295 of file XML_Macros.h.

#define ACEXML_CATCHALL   ACEXML_CATCHANY

Definition at line 314 of file XML_Macros.h.

#define ACEXML_CATCHANY   ACEXML_CATCH (ACEXML_EXCEPTION_TYPE, ACEXML_ANY_EXCEPTION)

Definition at line 309 of file XML_Macros.h.

#define ACEXML_CHECK

Value:

if (ACEXML_TRY_ENV . exception () != 0) \
      return

Definition at line 181 of file XML_Macros.h.

Referenced by ACEXML_Parser::parse(), ACEXML_Parser::parse_element(), ACEXML_Parser::parse_encoding_decl(), ACEXML_Parser::parse_xml_decl(), and ACEXML_Parser::prefix_mapping().

#define ACEXML_CHECK_RETURN ( RETV   ) 

Value:

if (ACEXML_TRY_ENV . exception () != 0) \
      return RETV

Definition at line 185 of file XML_Macros.h.

Referenced by ACEXML_Parser::check_for_PE_reference(), ACEXML_Parser::parse_attlist_decl(), ACEXML_Parser::parse_attname(), ACEXML_Parser::parse_atttype(), ACEXML_Parser::parse_attvalue(), ACEXML_Parser::parse_cdata(), ACEXML_Parser::parse_child(), ACEXML_Parser::parse_children_definition(), ACEXML_Parser::parse_conditional_section(), ACEXML_Parser::parse_content(), ACEXML_Parser::parse_defaultdecl(), ACEXML_Parser::parse_doctypedecl(), ACEXML_Parser::parse_element_decl(), ACEXML_Parser::parse_entity_decl(), ACEXML_Parser::parse_entity_reference(), ACEXML_Parser::parse_entity_value(), ACEXML_Parser::parse_external_dtd(), ACEXML_Parser::parse_external_id(), ACEXML_Parser::parse_external_subset(), ACEXML_Parser::parse_ignoresect(), ACEXML_Parser::parse_includesect(), ACEXML_Parser::parse_internal_dtd(), ACEXML_Parser::parse_markup_decl(), ACEXML_Parser::parse_notation_decl(), ACEXML_Parser::parse_PE_reference(), ACEXML_Parser::parse_processing_instruction(), ACEXML_Parser::parse_text_decl(), ACEXML_Parser::parse_tokenized_type(), and ACEXML_Parser::pop_context().

#define ACEXML_DECLARE_NEW_ENV   ACEXML_ENV_TYPE ACEXML_TRY_ENV

Definition at line 79 of file XML_Macros.h.

#define ACEXML_ENDTRY

Value:

} while (0); \
    } while (0)

Definition at line 336 of file XML_Macros.h.

#define ACEXML_ENV_ARG_DECL

Value:

Normally this macro is used as follows:

void my_funct (int x, int y ACEXML_ENV_ARG_DECL);

Its purpose is to provide developers (and users) with a mechanism to write code that is portable to platforms with and without native C++ exceptions.

Definition at line 409 of file XML_Macros.h.

#define ACEXML_ENV_ARG_DECL_NOT_USED

Value:

Similar to ACEXML_ENV_ARG_DECL, but the formal parameter name is dropped to avoid warnings about unused parameters

Definition at line 419 of file XML_Macros.h.

#define ACEXML_ENV_ARG_NOT_USED   ACEXML_ENV_EMIT_CODE(ACE_UNUSED_ARG(ACEXML_TRY_ENV))

Eliminate unused argument warnings about ACEXML_TRY_ENV.

Definition at line 443 of file XML_Macros.h.

#define ACEXML_ENV_ARG_PARAMETER

Value:

Use the ACEXML_ENV_TYPE argument in a nested call.

Definition at line 433 of file XML_Macros.h.

Referenced by ACEXML_XMLFilterImpl::characters(), ACEXML_Parser::check_for_PE_reference(), ACEXML_XMLFilterImpl::endElement(), ACEXML_XMLFilterImpl::endPrefixMapping(), ACEXML_XMLFilterImpl::error(), ACEXML_Parser::error(), ACEXML_Parser::fatal_error(), ACEXML_XMLFilterImpl::fatalError(), ACEXML_XMLFilterImpl::getFeature(), ACEXML_XMLFilterImpl::getProperty(), ACEXML_XMLFilterImpl::ignorableWhitespace(), ACEXML_XMLFilterImpl::notationDecl(), ACEXML_XMLFilterImpl::parse(), ACEXML_Parser::parse(), ACEXML_Parser::parse_attlist_decl(), ACEXML_Parser::parse_attname(), ACEXML_Parser::parse_atttype(), ACEXML_Parser::parse_attvalue(), ACEXML_Parser::parse_cdata(), ACEXML_Parser::parse_child(), ACEXML_Parser::parse_children_definition(), ACEXML_Parser::parse_conditional_section(), ACEXML_Parser::parse_content(), ACEXML_Parser::parse_defaultdecl(), ACEXML_Parser::parse_doctypedecl(), ACEXML_Parser::parse_element(), ACEXML_Parser::parse_element_decl(), ACEXML_Parser::parse_encoding_decl(), ACEXML_Parser::parse_entity_decl(), ACEXML_Parser::parse_entity_reference(), ACEXML_Parser::parse_entity_value(), ACEXML_Parser::parse_external_dtd(), ACEXML_Parser::parse_external_id(), ACEXML_Parser::parse_external_subset(), ACEXML_Parser::parse_ignoresect(), ACEXML_Parser::parse_includesect(), ACEXML_Parser::parse_internal_dtd(), ACEXML_Parser::parse_markup_decl(), ACEXML_Parser::parse_notation_decl(), ACEXML_Parser::parse_PE_reference(), ACEXML_Parser::parse_processing_instruction(), ACEXML_Parser::parse_text_decl(), ACEXML_Parser::parse_tokenized_type(), ACEXML_Parser::parse_version_info(), ACEXML_Parser::parse_xml_decl(), ACEXML_Parser::pop_context(), ACEXML_Parser::prefix_mapping(), ACEXML_XMLFilterImpl::processingInstruction(), ACEXML_XMLFilterImpl::resolveEntity(), ACEXML_XMLFilterImpl::setFeature(), ACEXML_XMLFilterImpl::setProperty(), ACEXML_XMLFilterImpl::skippedEntity(), ACEXML_XMLFilterImpl::startElement(), ACEXML_XMLFilterImpl::startPrefixMapping(), ACEXML_XMLFilterImpl::unparsedEntityDecl(), ACEXML_XMLFilterImpl::warning(), and ACEXML_Parser::warning().

#define ACEXML_ENV_EMIT_CODE (  )     X

Define a macro to emit code only when ACEXML_ENV_TYPE is used.

Definition at line 383 of file XML_Macros.h.

#define ACEXML_ENV_EMIT_CODE2 ( X,
 )     X,Y

Another macro to emit code only when ACEXML_ENV_TYPE is used.

Definition at line 390 of file XML_Macros.h.

#define ACEXML_ENV_EMIT_DUMMY

Helper macro.

Definition at line 396 of file XML_Macros.h.

#define ACEXML_ENV_RAISE ( ex   )     ACEXML_TRY_ENV.exception (ex)

Definition at line 449 of file XML_Macros.h.

Referenced by ACEXML_Parser::error(), and ACEXML_Parser::fatal_error().

#define ACEXML_ENV_SINGLE_ARG_DECL   ACEXML_ENV_EMIT_CODE(ACEXML_ENV_TYPE &ACEXML_TRY_ENV)

Declare a ACEXML_ENV_TYPE argument for methods that do not take any other parameters

Definition at line 425 of file XML_Macros.h.

#define ACEXML_ENV_SINGLE_ARG_DECL_NOT_USED   ACEXML_ENV_EMIT_CODE(ACEXML_ENV_TYPE &)

Declare a ACEXML_ENV_TYPE argument for methods which don't use it.

Definition at line 429 of file XML_Macros.h.

#define ACEXML_ENV_SINGLE_ARG_PARAMETER   ACEXML_ENV_EMIT_CODE(ACEXML_TRY_ENV)

Use the ACEXML_ENV_TYPE argument in a nested call, assuming that the called function takes only the ACEXML_TRY_ENV argument.

Definition at line 439 of file XML_Macros.h.

Referenced by ACEXML_Parser::check_for_PE_reference(), ACEXML_XMLFilterImpl::endDocument(), ACEXML_Parser::parse(), ACEXML_Parser::parse_attlist_decl(), ACEXML_Parser::parse_atttype(), ACEXML_Parser::parse_attvalue(), ACEXML_Parser::parse_child(), ACEXML_Parser::parse_children_definition(), ACEXML_Parser::parse_conditional_section(), ACEXML_Parser::parse_content(), ACEXML_Parser::parse_doctypedecl(), ACEXML_Parser::parse_element_decl(), ACEXML_Parser::parse_entity_value(), ACEXML_Parser::parse_external_dtd(), ACEXML_Parser::parse_external_subset(), ACEXML_Parser::parse_includesect(), ACEXML_Parser::parse_internal_dtd(), ACEXML_Parser::parse_markup_decl(), ACEXML_Parser::parse_notation_decl(), ACEXML_Parser::parse_PE_reference(), ACEXML_Parser::parse_text_decl(), ACEXML_Parser::parse_xml_decl(), and ACEXML_XMLFilterImpl::startDocument().

#define ACEXML_ENV_TYPE   ACEXML_Env

Definition at line 53 of file XML_Macros.h.

#define ACEXML_EXCEPTION_TYPE   ACEXML_Exception

Definition at line 69 of file XML_Macros.h.

#define ACEXML_GUARD_THROW_EX ( MUTEX,
OBJ,
LOCK,
EXCEPTION   ) 

Value:

ACE_Guard< MUTEX > OBJ (LOCK); \
    if (OBJ.locked () == 0) ACEXML_THROW_R_INT (EXCEPTION);

Definition at line 359 of file XML_Macros.h.

#define ACEXML_NEW_THROW_EX ( POINTER,
CONSTRUCTOR,
EXCEPTION   ) 

Value:

do { POINTER = new CONSTRUCTOR; \
       if (POINTER == 0) { errno = ENOMEM; ACEXML_THROW_R_INT (EXCEPTION); } \
     } while (0)

Definition at line 352 of file XML_Macros.h.

#define ACEXML_RE_THROW

Value:

do {\
      ACEXML_TRY_ENV = ACEXML_CAUGHT_ENV; \
      goto ACEXML_TRY_LABEL; \
    } while (0)

Definition at line 321 of file XML_Macros.h.

#define ACEXML_RE_THROW_EX ( LABEL   ) 

Value:

do {\
      ACEXML_TRY_ENV = ACEXML_CAUGHT_ENV; \
      goto ACEXML_TRY_LABEL ## LABEL; \
    } while (0)

Definition at line 326 of file XML_Macros.h.

#define ACEXML_READ_GUARD_THROW_EX ( MUTEX,
OBJ,
LOCK,
EXCEPTION   ) 

Value:

ACE_Read_Guard< MUTEX > OBJ (LOCK); \
    if (OBJ.locked () == 0) ACEXML_THROW_R_INT (EXCEPTION);

Definition at line 363 of file XML_Macros.h.

#define ACEXML_THROW ( EXCEPTION   ) 

Value:

do \
      { \
        ACEXML_TRY_ENV.exception (new EXCEPTION); \
        return; \
      } while (0)

Definition at line 195 of file XML_Macros.h.

Referenced by Basic_Content_Tester::characters(), ACEXML_XMLFilterImpl::parse(), ACEXML_XMLFilterImpl::setFeature(), ACEXML_Parser::setFeature(), ACEXML_XMLFilterImpl::setProperty(), and ACEXML_Parser::setProperty().

#define ACEXML_THROW_R_INT ( EXCEPTION   )     ACEXML_TRY_ENV.exception (new EXCEPTION)

Definition at line 190 of file XML_Macros.h.

#define ACEXML_THROW_RETURN ( EXCEPTION,
RETV   ) 

Value:

do \
      { \
        ACEXML_TRY_ENV.exception (new EXCEPTION); \
        return RETV; \
      } while (0)

Definition at line 202 of file XML_Macros.h.

Referenced by ACEXML_XMLFilterImpl::getFeature(), ACEXML_Parser::getFeature(), ACEXML_XMLFilterImpl::getProperty(), ACEXML_Parser::getProperty(), ACEXML_Debug_DTD_Manager::getValidator(), ACEXML_Debug_Attributes_Builder::insertAttribute(), ACEXML_Debug_DTD_Manager::insertAttributes_Definition(), ACEXML_Debug_DTD_Manager::insertElement_Definition(), ACEXML_Debug_Attribute_Builder::setAttType(), and ACEXML_Debug_Element_Builder::setContentType().

#define ACEXML_TRY

Value:

do { \
     int ACEXML_TRY_FLAG = 1; \
     int ACEXML_EXCEPTION_NOT_CAUGHT = 1; \
   ACEXML_TRY_LABEL: \
     if (ACEXML_TRY_FLAG) \
       do {

Definition at line 218 of file XML_Macros.h.

#define ACEXML_TRY_CHECK

Value:

{ \
      if (ACEXML_TRY_ENV.exception () != 0) \
        { \
          ACEXML_TRY_FLAG = 0; \
          goto ACEXML_TRY_LABEL; \
        } \
    }

Definition at line 251 of file XML_Macros.h.

#define ACEXML_TRY_CHECK_EX ( LABEL   ) 

Value:

{ \
      if (ACEXML_TRY_ENV.exception () != 0) \
        { \
          ACEXML_TRY_FLAG = 0; \
          goto ACEXML_TRY_LABEL ## LABEL; \
        } \
    }

Definition at line 261 of file XML_Macros.h.

#define ACEXML_TRY_ENV   _ACEXML_Env_variable

Definition at line 62 of file XML_Macros.h.

#define ACEXML_TRY_EX ( LABEL   ) 

Value:

do { \
     int ACEXML_TRY_FLAG = 1; \
     int ACEXML_EXCEPTION_NOT_CAUGHT = 1; \
   ACEXML_TRY_LABEL ## LABEL: \
     if (ACEXML_TRY_FLAG) \
       do {

Definition at line 242 of file XML_Macros.h.

#define ACEXML_TRY_NEW_ENV

Value:

do { \
     ACEXML_ENV_TYPE ACEXML_TRY_ENV;\
     int ACEXML_TRY_FLAG = 1; \
     int ACEXML_EXCEPTION_NOT_CAUGHT = 1; \
   ACEXML_TRY_LABEL: \
     if (ACEXML_TRY_FLAG) \
       do {

Definition at line 229 of file XML_Macros.h.

#define ACEXML_TRY_THROW ( EXCEPTION   ) 

Value:

{ \
      ACEXML_TRY_ENV.exception (new EXCEPTION); \
      ACEXML_TRY_FLAG = 0; \
      goto ACEXML_TRY_LABEL; \
    }

Definition at line 271 of file XML_Macros.h.

#define ACEXML_TRY_THROW_EX ( EXCEPTION,
LABEL   ) 

Value:

{ \
      ACEXML_TRY_ENV.exception (new EXCEPTION); \
      ACEXML_TRY_FLAG = 0; \
      goto ACEXML_TRY_LABEL ## LABEL; \
    }

Definition at line 278 of file XML_Macros.h.

#define ACEXML_WRITE_GUARD_THROW_EX ( MUTEX,
OBJ,
LOCK,
EXCEPTION   ) 

Value:

ACE_Write_Guard< MUTEX > OBJ (LOCK); \
    if (OBJ.locked () == 0) ACEXML_THROW_R_INT (EXCEPTION);

Definition at line 367 of file XML_Macros.h.


Generated on Tue Feb 2 17:37:12 2010 for ACEXML by  doxygen 1.4.7