/* Web Polygraph http://www.web-polygraph.org/
* (C) 2003-2006 The Measurement Factory
* Licensed under the Apache License, Version 2.0 */
#include "pgl/pgl.h"
#include "xstd/h/math.h"
#include "xstd/h/iostream.h"
#include "xstd/h/sstream.h"
#include "xstd/String.h"
#include "pgl/PglRec.h"
#include "pgl/PglIntSym.h"
#include "pgl/PglNetAddrSym.h"
#include "pgl/PglArraySym.h"
#include "pgl/PglRateSym.h"
#include "pgl/BenchSideSym.h"
#include "pgl/BenchSym.h"
String BenchSideSym::TheType = "BenchSide";
static String strAddrArr = "addr[]";
static String strAddr_mask = "addr_mask";
static String strAddr_space = "addr_space";
static String strHosts = "hosts";
static String strMax_agent_load = "max_agent_load";
static String strMax_host_load = "max_host_load";
BenchSideSym::BenchSideSym(): RecSym(TheType, new PglRec), theBench(0) {
theRec->bAdd(strAddrArr, strHosts, 0);
theRec->bAdd(RateSym::TheType, strMax_host_load, 0);
theRec->bAdd(RateSym::TheType, strMax_agent_load, 0);
theRec->bAdd(strAddrArr, strAddr_space, 0);
theRec->bAdd(NetAddrSym::TheType, strAddr_mask, 0);
}
BenchSideSym::BenchSideSym(const String &aType, PglRec *aRec): RecSym(aType, aRec), theBench(0) {
}
bool BenchSideSym::isA(const String &type) const {
return RecSym::isA(type) || type == TheType;
}
SynSym *BenchSideSym::dupe(const String &type) const {
if (isA(type))
return new BenchSideSym(this->type(), theRec->clone());
return RecSym::dupe(type);
}
bool BenchSideSym::hosts(Array<NetAddr*> &addrs) const {
if (ArraySym *a = getArraySym(strHosts)) {
for (int i = 0; i < a->count(); ++i) {
const NetAddr &addr = ((const NetAddrSym&)(*a)[i]->cast(NetAddrSym::TheType)).val();
addrs.append(new NetAddr(addr));
}
return true;
}
return false;
}
ArraySym *BenchSideSym::hostsSym() const {
return getArraySym(strHosts);
}
const ArraySym *BenchSideSym::addrSpace() const {
return getArraySym(strAddr_space);
}
NetAddr BenchSideSym::addrMask() const {
return getNetAddr(strAddr_mask);
}
NetAddrSym* BenchSideSym::addrMaskSym() const {
SynSymTblItem *mi;
Assert(theRec->find(strAddr_mask, mi));
if (!mi->sym())
return 0;
return &(NetAddrSym&)mi->sym()->cast(NetAddrSym::TheType);
}
bool BenchSideSym::maxHostLoad(double &load) const {
return getRate(strMax_host_load, load);
}
bool BenchSideSym::maxAgentLoad(double &load) const {
return getRate(strMax_agent_load, load);
}
syntax highlighted by Code2HTML, v. 0.9.1