#ifndef __ac_FIRST__net_hpsvmmo_home_mmo_AOP_AOP_Builds_Dbc_simple_src__
#define __ac_FIRST__net_hpsvmmo_home_mmo_AOP_AOP_Builds_Dbc_simple_src__
#define __ac_FIRST_FILE__net_hpsvmmo_home_mmo_AOP_AOP_Builds_Dbc_simple_src_DBC_ah__

#ifndef __ac_h_
#define __ac_h_
namespace AC {
  typedef const char* Type;
  enum JPType { CALL = 0x0004, EXECUTION = 0x0008, CONSTRUCTION = 0x0010, DESTRUCTION = 0x0020 };
  struct Action {
    void **_args; void *_result; void *_target; void *_that; void *_fptr;
    void (*_wrapper)(Action &);
    inline void trigger () { _wrapper (*this); }
  };
  struct AnyResultBuffer {};
  template <typename T> struct ResultBuffer : public AnyResultBuffer {
    char _data[sizeof (T)];
    ~ResultBuffer () { ((T*)_data)->T::~T(); }
    operator T& () const { return *(T*)_data; }
  };
  template <class Aspect, int Index>
  struct CFlow {
    static int &instance () {
      static int counter = 0;
      return counter;
    }
    CFlow () { instance ()++; }
    ~CFlow () { instance ()--; }
    static bool active () { return instance () > 0; }
  };
}
inline void * operator new (unsigned int, AC::AnyResultBuffer *p) { return p; }
inline void operator delete (void *, AC::AnyResultBuffer *) { } // for VC++
#endif // __ac_h_
#endif // __ac_FIRST__net_hpsvmmo_home_mmo_AOP_AOP_Builds_Dbc_simple_src__
#ifndef DBC_AH
#define DBC_AH

#include <iostream>
#include <errno.h>

using namespace std;
#include "api.h"


class ArgChecker {
public:
  static ArgChecker *aspectof () {
    static ArgChecker __instance;
    return &__instance;
  }
  static ArgChecker *aspectOf () {
    return aspectof ();
  }
private:


   class ArgChecker;
template< class TJP, int N >
   struct stream_params {  friend class ::ArgChecker;

     static void process (ostream& os, TJP* tjp ) {
       os << *tjp->arg<TJP::ARGS-N>() << ", ";
       stream_params< TJP, N - 1 >::process( os, tjp);
     }
   };
   class ArgChecker;
template< class TJP >
   struct stream_params < TJP, 1 > {  friend class ::ArgChecker;

     static void process(ostream& os, TJP* tjp) {
       os << *tjp->arg< TJP::ARGS - 1>();
       os << endl;
     }
   };

   

   
public: template<class JoinPoint> void __a0_around (JoinPoint *tjp) {
  typedef typename JoinPoint::That __JP_That;
  typedef typename JoinPoint::Target __JP_Target;
  typedef typename JoinPoint::Result __JP_Result;

      
      cerr << "AC: Inside ArgChecker for:  " << JoinPoint::signature() << endl;
      stream_params< JoinPoint, JoinPoint::ARGS >::process(cerr, tjp );

      tjp->proceed();
      cerr << "AC: Done executing around " << JoinPoint::signature() << endl;
   }
private:

};
namespace AC {
  template <class JoinPoint>
  inline void invoke_ArgChecker_ArgChecker_a0_around (JoinPoint *tjp) {
    ::ArgChecker::aspectof()->__a0_around (tjp);
  }
} 


#endif

#ifdef __ac_FIRST_FILE__net_hpsvmmo_home_mmo_AOP_AOP_Builds_Dbc_simple_src_DBC_ah__
/*** begin of aspect includes ***/
#if !defined(__ac_have__net_hpsvmmo_home_mmo_AOP_AOP_Builds_Dbc_simple_src_DBC_ah__) && defined(__ac_need__net_hpsvmmo_home_mmo_AOP_AOP_Builds_Dbc_simple_src_DBC_ah__)
#define __ac_have__net_hpsvmmo_home_mmo_AOP_AOP_Builds_Dbc_simple_src_DBC_ah__
#include "DBC.ah"
#endif
/*** end of aspect includes ***/
#undef __ac_FIRST__net_hpsvmmo_home_mmo_AOP_AOP_Builds_Dbc_simple_src__
#undef __ac_FIRST_FILE__net_hpsvmmo_home_mmo_AOP_AOP_Builds_Dbc_simple_src_DBC_ah__
#endif // __ac_FIRST_FILE__net_hpsvmmo_home_mmo_AOP_AOP_Builds_Dbc_simple_src_DBC_ah__
