ref. counting macro, starting remote client implementation

This commit is contained in:
Matej Sekoranja
2011-01-02 12:59:33 +01:00
parent 9a8c205d54
commit 95148e2d50
3 changed files with 1100 additions and 185 deletions

View File

@@ -11,35 +11,9 @@
using namespace epics::pvData;
using namespace epics::pvAccess;
static volatile int64 mockChannelProcess_totalConstruct = 0;
static volatile int64 mockChannelProcess_totalDestruct = 0;
static Mutex *mockChannelProcess_globalMutex = 0;
static int64 mockChannelProcess_processTotalConstruct()
{
Lock xx(mockChannelProcess_globalMutex);
return mockChannelProcess_totalConstruct;
}
static int64 mockChannelProcess_processTotalDestruct()
{
Lock xx(mockChannelProcess_globalMutex);
return mockChannelProcess_totalDestruct;
}
static ConstructDestructCallback *mockChannelProcess_pConstructDestructCallback;
static void mockChannelProcess_init()
{
static Mutex mutex = Mutex();
Lock xx(&mutex);
if(mockChannelProcess_globalMutex==0) {
mockChannelProcess_globalMutex = new Mutex();
mockChannelProcess_pConstructDestructCallback = new ConstructDestructCallback(
String("mockChannelProcess"),
mockChannelProcess_processTotalConstruct,mockChannelProcess_processTotalDestruct,0);
}
}
PVDATA_REFCOUNT_MONITOR_DEFINE(mockChannelProcess);
class MockChannelProcess : public ChannelProcess
{
@@ -51,19 +25,14 @@ class MockChannelProcess : public ChannelProcess
private:
~MockChannelProcess()
{
Lock xx(mockChannelProcess_globalMutex);
mockChannelProcess_totalDestruct++;
PVDATA_REFCOUNT_MONITOR_DESTRUCT(mockChannelProcess);
}
public:
MockChannelProcess(ChannelProcessRequester* channelProcessRequester, PVStructure *pvStructure, PVStructure *pvRequest) :
m_channelProcessRequester(channelProcessRequester), m_pvStructure(pvStructure)
{
mockChannelProcess_init();
Lock xx(mockChannelProcess_globalMutex);
mockChannelProcess_totalConstruct++;
PVDATA_REFCOUNT_MONITOR_CONSTRUCT(mockChannelProcess);
PVField* field = pvStructure->getSubField(String("value"));
if (field == 0)
@@ -185,37 +154,7 @@ class MockChannelProcess : public ChannelProcess
static volatile int64 mockChannelGet_totalConstruct = 0;
static volatile int64 mockChannelGet_totalDestruct = 0;
static Mutex *mockChannelGet_globalMutex = 0;
static int64 mockChannelGet_getTotalConstruct()
{
Lock xx(mockChannelGet_globalMutex);
return mockChannelGet_totalConstruct;
}
static int64 mockChannelGet_getTotalDestruct()
{
Lock xx(mockChannelGet_globalMutex);
return mockChannelGet_totalDestruct;
}
static ConstructDestructCallback *mockChannelGet_pConstructDestructCallback;
static void mockChannelGet_init()
{
static Mutex mutex = Mutex();
Lock xx(&mutex);
if(mockChannelGet_globalMutex==0) {
mockChannelGet_globalMutex = new Mutex();
mockChannelGet_pConstructDestructCallback = new ConstructDestructCallback(
String("mockChannelGet"),
mockChannelGet_getTotalConstruct,mockChannelGet_getTotalDestruct,0);
}
}
PVDATA_REFCOUNT_MONITOR_DEFINE(mockChannelGet);
class MockChannelGet : public ChannelGet
{
@@ -228,8 +167,7 @@ class MockChannelGet : public ChannelGet
private:
~MockChannelGet()
{
Lock xx(mockChannelGet_globalMutex);
mockChannelGet_totalDestruct++;
PVDATA_REFCOUNT_MONITOR_DESTRUCT(mockChannelGet);
}
public:
@@ -237,10 +175,7 @@ class MockChannelGet : public ChannelGet
m_channelGetRequester(channelGetRequester), m_pvStructure(pvStructure),
m_bitSet(new BitSet(pvStructure->getNumberFields())), m_first(true)
{
mockChannelGet_init();
Lock xx(mockChannelGet_globalMutex);
mockChannelGet_totalConstruct++;
PVDATA_REFCOUNT_MONITOR_CONSTRUCT(mockChannelGet);
// TODO pvRequest
m_channelGetRequester->channelGetConnect(getStatusCreate()->getStatusOK(), this, m_pvStructure, m_bitSet);
@@ -274,37 +209,7 @@ class MockChannelGet : public ChannelGet
static volatile int64 mockChannelPut_totalConstruct = 0;
static volatile int64 mockChannelPut_totalDestruct = 0;
static Mutex *mockChannelPut_globalMutex = 0;
static int64 mockChannelPut_getTotalConstruct()
{
Lock xx(mockChannelPut_globalMutex);
return mockChannelPut_totalConstruct;
}
static int64 mockChannelPut_getTotalDestruct()
{
Lock xx(mockChannelPut_globalMutex);
return mockChannelPut_totalDestruct;
}
static ConstructDestructCallback *mockChannelPut_pConstructDestructCallback;
static void mockChannelPut_init()
{
static Mutex mutex = Mutex();
Lock xx(&mutex);
if(mockChannelPut_globalMutex==0) {
mockChannelPut_globalMutex = new Mutex();
mockChannelPut_pConstructDestructCallback = new ConstructDestructCallback(
String("mockChannelPut"),
mockChannelPut_getTotalConstruct,mockChannelPut_getTotalDestruct,0);
}
}
PVDATA_REFCOUNT_MONITOR_DEFINE(mockChannelPut);
class MockChannelPut : public ChannelPut
{
@@ -317,8 +222,7 @@ class MockChannelPut : public ChannelPut
private:
~MockChannelPut()
{
Lock xx(mockChannelPut_globalMutex);
mockChannelPut_totalDestruct++;
PVDATA_REFCOUNT_MONITOR_DESTRUCT(mockChannelPut);
}
public:
@@ -326,10 +230,7 @@ class MockChannelPut : public ChannelPut
m_channelPutRequester(channelPutRequester), m_pvStructure(pvStructure),
m_bitSet(new BitSet(pvStructure->getNumberFields())), m_first(true)
{
mockChannelPut_init();
Lock xx(mockChannelPut_globalMutex);
mockChannelPut_totalConstruct++;
PVDATA_REFCOUNT_MONITOR_CONSTRUCT(mockChannelPut);
// TODO pvRequest
m_channelPutRequester->channelPutConnect(getStatusCreate()->getStatusOK(), this, m_pvStructure, m_bitSet);
@@ -361,40 +262,7 @@ class MockChannelPut : public ChannelPut
static volatile int64 mockMonitor_totalConstruct = 0;
static volatile int64 mockMonitor_totalDestruct = 0;
static Mutex *mockMonitor_globalMutex = 0;
static int64 mockMonitor_getTotalConstruct()
{
Lock xx(mockMonitor_globalMutex);
return mockMonitor_totalConstruct;
}
static int64 mockMonitor_getTotalDestruct()
{
Lock xx(mockMonitor_globalMutex);
return mockMonitor_totalDestruct;
}
static ConstructDestructCallback *mockMonitor_pConstructDestructCallback;
static void mockMonitor_init()
{
static Mutex mutex = Mutex();
Lock xx(&mutex);
if(mockMonitor_globalMutex==0) {
mockMonitor_globalMutex = new Mutex();
mockMonitor_pConstructDestructCallback = new ConstructDestructCallback(
String("mockMonitor"),
mockMonitor_getTotalConstruct,mockMonitor_getTotalDestruct,0);
}
}
PVDATA_REFCOUNT_MONITOR_DEFINE(mockMonitor);
class MockMonitor : public Monitor, public MonitorElement
{
@@ -410,8 +278,7 @@ class MockMonitor : public Monitor, public MonitorElement
private:
~MockMonitor()
{
Lock xx(mockMonitor_globalMutex);
mockMonitor_totalDestruct++;
PVDATA_REFCOUNT_MONITOR_DESTRUCT(mockMonitor);
}
public:
@@ -423,10 +290,7 @@ class MockMonitor : public Monitor, public MonitorElement
m_lock(new Mutex()),
m_count(0)
{
mockMonitor_init();
Lock xx(mockMonitor_globalMutex);
mockMonitor_totalConstruct++;
PVDATA_REFCOUNT_MONITOR_CONSTRUCT(mockMonitor);
m_changedBitSet->set(0);
@@ -505,37 +369,7 @@ class MockMonitor : public Monitor, public MonitorElement
static volatile int64 mockChannel_totalConstruct = 0;
static volatile int64 mockChannel_totalDestruct = 0;
static Mutex *mockChannel_globalMutex = 0;
static int64 mockChannel_getTotalConstruct()
{
Lock xx(mockChannel_globalMutex);
return mockChannel_totalConstruct;
}
static int64 mockChannel_getTotalDestruct()
{
Lock xx(mockChannel_globalMutex);
return mockChannel_totalDestruct;
}
static ConstructDestructCallback *mockChannel_pConstructDestructCallback;
static void mockChannel_init()
{
static Mutex mutex = Mutex();
Lock xx(&mutex);
if(mockChannel_globalMutex==0) {
mockChannel_globalMutex = new Mutex();
mockChannel_pConstructDestructCallback = new ConstructDestructCallback(
String("mockChannel"),
mockChannel_getTotalConstruct,mockChannel_getTotalDestruct,0);
}
}
PVDATA_REFCOUNT_MONITOR_DEFINE(mockChannel);
class MockChannel : public Channel {
private:
@@ -549,8 +383,7 @@ class MockChannel : public Channel {
private:
~MockChannel()
{
Lock xx(mockChannel_globalMutex);
mockChannel_totalDestruct++;
PVDATA_REFCOUNT_MONITOR_DESTRUCT(mockChannel);
}
public:
@@ -565,10 +398,7 @@ class MockChannel : public Channel {
m_name(name),
m_remoteAddress(remoteAddress)
{
mockChannel_init();
Lock xx(mockChannel_globalMutex);
mockChannel_totalConstruct++;
PVDATA_REFCOUNT_MONITOR_CONSTRUCT(mockChannel);
ScalarType stype = pvDouble;