/* ====================================================================
 * Copyright (c) 2003-2006, Martin Hauner
 *                          http://subcommander.tigris.org
 *
 * Subcommander is licensed as described in the file doc/COPYING, which
 * you should have received as part of this distribution.
 * ====================================================================
 */

#ifndef _SC_UTIL_APR_H
#define _SC_UTIL_APR_H

// sc
#include "Error.h"

// apr
#include <apr_errno.h>
struct apr_pool_t;



/** factory methods for an Error based on an apr_status_t */
#define createErrorApr(status) createError(status,apr::strError(status))


namespace apr
{

// setup
void initialize( int argc, char* argv[] );

// pools
apr_pool_t* createPool( apr_pool_t* parent = 0 );
void        destroyPool( apr_pool_t* pool );

// portable
sc::String getDefaultEncoding();
sc::String getLocaleEncoding();

// errors
sc::String strError( apr_status_t status );


/**
 * \brief scoped apr pool.
 */
class Pool
{
public:
  Pool( apr_pool_t* parent = 0, bool subpool = true )
  {
    if( subpool )
    {
      _pool = createPool(parent);
    }
    else
    {
      _pool = parent;
    }
  }

  ~Pool()
  {
    destroyPool(_pool);
  }

  operator apr_pool_t*() const
  {
    return _pool;
  }

private:
  apr_pool_t* _pool;
};


} // namespace


/** helper macro */

#define APR_ERR(status)\
{\
  if( status != APR_SUCCESS )\
  {\
    return createError(status,apr::strError(status));\
  }\
}


#endif // _SC_UTIL_APR_H



syntax highlighted by Code2HTML, v. 0.9.1