/* Web Polygraph       http://www.web-polygraph.org/
 * (C) 2003-2006 The Measurement Factory
 * Licensed under the Apache License, Version 2.0 */

#include "base/polygraph.h"

#include "xstd/Rnd.h"
#include "pgl/AddrMapSym.h"
#include "runtime/AddrMapItems.h"


/* AddrMapItem */

AddrMapItem::AddrMapItem(const NetAddr &aName): theName(aName) {
	Assert(theName);
}


/* Name2NameMapItem */

Name2NameMapItem::Name2NameMapItem(const NetAddr &aName): AddrMapItem(aName) {
	Assert(!theName.isDomainName());
}


/* Name2AddrMapItem */

Name2AddrMapItem::Name2AddrMapItem(const NetAddr &aName, const NetAddr &anAddr):
	AddrMapItem(aName), theAddr(anAddr) {
	Assert(theAddr);
	Assert(!theAddr.isDomainName());
}


/* Name2AddrsMapItem */

Name2AddrsMapItem::Name2AddrsMapItem(const NetAddr &aName, const Array<NetAddr*> &anAddrs):
	AddrMapItem(aName) {
	theAddrs.stretch(anAddrs.count());
	for (int i = 0; i < anAddrs.count(); ++i) {
		const NetAddr &addr = *anAddrs[i];
		Assert(!addr.isDomainName());
		theAddrs.append(new NetAddr(addr));
	}
}

Name2AddrsMapItem::~Name2AddrsMapItem() {
	while (theAddrs.count()) delete theAddrs.pop();
}

const NetAddr &Name2AddrsMapItem::selectAddr() const {
	static RndGen rng;
	const int idx = rng(0, theAddrs.count());
	return addrAt(idx);
}


syntax highlighted by Code2HTML, v. 0.9.1