/* 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/PglArraySym.h"
#include "pgl/PglNetAddrRange.h"
#include "pgl/BenchSym.h"
#include "pgl/BenchSideSym.h"
#include "pgl/WebAxe4AsSym.h"



const String WebAxe4AsSym::TheType = "WebAxe4As";

static String strAddrArr = "addr[]";

static const String strWebAxe4 = "WebAxe-4";

WebAxe4AsSym::WebAxe4AsSym(): VerFourAsSym(TheType, new PglRec) {
	kind(strAddrArr);
}

WebAxe4AsSym::WebAxe4AsSym(const String &aType, PglRec *aRec): VerFourAsSym(aType, aRec) {
}

bool WebAxe4AsSym::isA(const String &type) const {
	return VerFourAsSym::isA(type) || type == TheType;
}

SynSym *WebAxe4AsSym::dupe(const String &type) const {
	if (isA(type))
		return new WebAxe4AsSym(this->type(), theRec->clone());
	return VerFourAsSym::dupe(type);
}

String WebAxe4AsSym::robots(ArraySym *&addrs) const {
	return addresses(theBench->clientSide(), addrs);
}

String WebAxe4AsSym::servers(ArraySym *&addrs) const {
	if (theBench->serverSide()->addrSpace()) {
		cerr << loc() << "warning: WebAxe4As addressing scheme "
			<< " uses server_side.hosts only; your setting of "
			<< " server_side.addr_space will be ignored" << endl;
	}

	if (const ArraySym *hosts = theBench->serverSide()->hostsSym()) {
		if (hosts->count()) {
			addrs = &((ArraySym&)hosts->clone()->cast(strAddrArr));
			return String();
		}
	}
	return "no server_side.hosts specified";
}

String WebAxe4AsSym::proxies(ArraySym *&addrs) const {
	return addresses(theBench->proxySide(), addrs);
}


syntax highlighted by Code2HTML, v. 0.9.1