/* Web Polygraph http://www.web-polygraph.org/
* (C) 2003-2006 The Measurement Factory
* Licensed under the Apache License, Version 2.0 */
#ifndef POLYGRAPH__PGL_ADDRSCHEMESYM_H
#define POLYGRAPH__PGL_ADDRSCHEMESYM_H
#include "pgl/PglRecSym.h"
class NetAddr;
class NetAddrSym;
class ArraySym;
class BenchSym;
class AddrSchemeSym: public RecSym {
public:
static String TheType;
public:
typedef ArraySym *(AddrSchemeSym::*AddrCalc)(const BenchSym *bench, String &err) const;
public:
AddrSchemeSym(const String &aType, PglRec *aRec);
virtual bool isA(const String &type) const;
String kind() const;
ArraySym *robots(const BenchSym *bench, String &err) const;
ArraySym *servers(const BenchSym *bench, String &err) const;
ArraySym *proxies(const BenchSym *bench, String &err) const;
protected:
virtual String robots(ArraySym *&addrs) const = 0;
virtual String servers(ArraySym *&addrs) const = 0;
virtual String proxies(ArraySym *&addrs) const;
void makeAddrSym(const NetAddrSym &mask, int x, int y, int subnet, NetAddrSym &nas) const;
//ArraySym *ipStrToArr(const String &str) const;
//ArraySym *addresses(const NetAddr &mask, double reqRate, double hostLoad, double agentLoad, int xOffset) const;
String minSubnet(int maxAddrPerHost, int &minSubnet) const;
String ipRangeToStr(const NetAddrSym &mask, int maxX, int countX, int minY, int countY) const;
int singleDiv(int factor, double n) const;
int doubleDiv(int factor, double n, double d) const;
void printOctetRange(ostream &os, int beg, int count) const;
virtual void setBench(const BenchSym *bench) const;
void kind(const String &aKind);
protected:
mutable const BenchSym *theBench; // valid during robots/servers calls
};
#endif
syntax highlighted by Code2HTML, v. 0.9.1