Listing 1: Using the Trace class
#include <iostream.h>
#include <stdio.h>
const int MAX_PACKET_SIZE = 50;
class Packet{
char m_Data[MAX_PACKET_SIZE];
public:
Packet(int num) {sprintf(m_Data,"Packet No. %d",num);}
// This function dumps class Packet
void Dump() const
{
cout <<m_Data<<endl;
}
};
class Trace{
public:
// For tracing an integer variable
const Trace& operator()(const char *s,int iVal)const
{cout << s << iVal<<endl;return *this;}
// For tracing an object of class Packet
const Trace& operator()(const char *s,const Packet &pkt)const
{ pkt.Dump();return *this;}
// For tracing an array of strings
const Trace& operator()(const char *s,char **p,int numStr)const
{
cout << s << endl;
for(int i=0;i<numStr;i++)
cout << p[i] << endl;
return *this;
}
};
Trace gTrace;
void main(char argc,char **argv)
{
gTrace("The commandLine args=",argv,argc);
char *strArray[10];
Packet sendPacket(1);
Packet recvPacket(2);
int numPkt = 2;
for(int i=0;i<10;i++)
{
strArray[i] = new char[20];
sprintf(strArray[i],"String No. %d ",i);
}
gTrace("The no. of Strings=", 10)("strArray=", strArray, 10)
("sendPacket=", sendPacket)("recvPacket=", recvPacket)
("numPackets=", numPkt);
for(i=0;i<10;i++)
delete[] strArray[i];
}
//End of File