//Editor-Info: -*- C++ -*-
//
//Subject: TOVE project/CC
//
//File: ccdebug.h
//
//Version: $Revision: 1.9 $
//
//State: $State: Exp $
//
//Date: $Date: 1997/12/08 16:27:19 $
//
//Organisation:
//      University of Technology
// 
//Author:
//      Pasi Nummisalo
//
//Description:
//     
//
//Copyright:
//     University of Technology
//     Laboratory of Telecommunications and Multimedia 
//      
//Licence:
//     
//
//History:
//

#ifndef __CC_DEBUG_H__
#define __CC_DEBUG_H__

#include <typeinfo>
#include <string>
#include <iostream.h>

#include <stdio.h>

#include "cctypes.h"
#include "ccprotocol.h"

#define traceDp(a,b) ccDebug::instance()->dp(a,b)
#define traceState(a,b) ccDebug::instance()->state(a,b)
#define traceSend(a,b,c,d) ccDebug::instance()->send(a,b,c,d)
#define traceInput(a,b,c,d) ccDebug::instance()->input(a,b,c,d)

class ccDebug
{
    public:
        static ccDebug *instance(void);

        void setTrace(int output_ = 0, int input_ = 0,
                      int state_ = 0, int dp_ = 0,
                      int tSide_ = 0, int ve_ = 0);

        void sendHelper(ccProtocol *sender_,
                   int receiver_,
                   string state_,
                   string messenger_);
        
        void send(int sender_,
                          int receiver_,
                          char *state_,
                          char *messenger_);

        void input(int sender_,
                           int receiver_,
                           char *state_,
                           char *messenger_);

        void state(int protocol_, char *state_);

        void dp(int protocol_, char* state_);

        void sendInapMessage(ccDp &dp_, ccProtocol *protocol_,
                        string message_, string target_);
        
        void sendCrossConnector(pfUlong port_);

    protected:
        ccDebug(void);
        ~ccDebug(void);
        
    private:
        char *ccTraceName[6];
        int ccTraceLocation[6];
        int _traceOutput;
        int _traceInput;
        int _traceTside;
        int _traceState;
        int _traceDp;
        int _traceVe;
        
    private:
        static ccDebug *_only;
    
};

#endif
