示例#1
0
static void test6()
{
	auto vec1_ptr = new CloneableContainers::PtrVector<Wrap2_Base*>();
	CloneableContainers::PtrVector<Wrap2_Base*>& vec1 = *vec1_ptr;

	auto token1 = vec1.PushBack(std::unique_ptr<Wrap2_Base>(new Wrap2(40007)));
	for (auto it = vec1.GetFirst(); !vec1.ReachedEnd(it); vec1.StepNext(it)) {
		PrintPointerInfo(vec1.Get(it));
	}

	std::cout << "==" << std::endl;
	auto token2 = vec1.PushBack(std::unique_ptr<Wrap2_Base>(new Wrap2(3004005)));
	for (auto it = vec1.GetFirst(); !vec1.ReachedEnd(it); vec1.StepNext(it)) {
		PrintPointerInfo(vec1.Get(it));
	}

	std::cout << "==" << std::endl;
	auto vec2 = vec1;
	for (auto it = vec1.GetFirst(); !vec1.ReachedEnd(it); vec1.StepNext(it)) {
		PrintPointerInfo(vec1.Get(it));
	}
	for (auto it = vec2.GetFirst(); !vec2.ReachedEnd(it); vec2.StepNext(it)) {
		PrintPointerInfo(vec2.Get(it));
	}

	std::cout << "==" << std::endl;
	delete vec1_ptr;
	for (auto it = vec2.GetFirst(); !vec2.ReachedEnd(it); vec2.StepNext(it)) {
		PrintPointerInfo(vec2.Get(it));
	}
}
示例#2
0
netcode::RawPacket* CDemoReader::GetData(float readTime)
{
	if (ReachedEnd())
		return NULL;

	// when paused, modGameTime does not increase (ie. we
	// always pass the same readTime value) so no seperate
	// check needed
	if (readTime > nextDemoReadTime) {
		netcode::RawPacket* buf = new netcode::RawPacket(chunkHeader.length);
		playbackDemo.read((char*)(buf->data), chunkHeader.length);
		bytesRemaining -= chunkHeader.length;

		if (!ReachedEnd()) {
			// read next chunk header
			playbackDemo.read((char*)&chunkHeader, sizeof(chunkHeader));
			chunkHeader.swab();
			nextDemoReadTime = chunkHeader.modGameTime + demoTimeOffset;
			bytesRemaining -= sizeof(chunkHeader);
		}

		return buf;
	} else {
		return NULL;
	}
}
示例#3
0
static void test1()
{
	auto vec1 = std::make_unique<CloneableContainers::Vector<std::string>>();

	auto token1_1 = vec1->PushBack("item1");
	auto token1_2 = vec1->PushBack("item2");

	std::cout << "==" << std::endl;
	std::cout << "token1_1 = " << vec1->Get(token1_1) << std::endl;
	std::cout << "token1_2 = " << vec1->Get(token1_2) << std::endl;

	for (auto it = vec1->GetFirst(); !vec1->ReachedEnd(it); vec1->StepNext(it)) {
		std::cout << "Iterated vec1: " << vec1->Get(it) << std::endl;
	}

	std::cout << "==" << std::endl;
	auto vec2 = *vec1;
	auto token2_1 = token1_1;
	auto token2_2 = token1_2;
	std::cout << "token1_1 = " << vec1->Get(token1_1) << std::endl;
	std::cout << "token1_2 = " << vec1->Get(token1_2) << std::endl;
	std::cout << "token2_1 = " << vec2.Get(token2_1) << std::endl;
	std::cout << "token2_2 = " << vec2.Get(token2_2) << std::endl;
	for (auto it = vec1->GetFirst(); !vec1->ReachedEnd(it); vec1->StepNext(it)) {
		std::cout << "Iterated vec1: " << vec1->Get(it) << std::endl;
	}
	for (auto it = vec2.GetFirst(); !vec2.ReachedEnd(it); vec2.StepNext(it)) {
		std::cout << "Iterated vec2: " << vec2.Get(it) << std::endl;
	}

	std::cout << "==" << std::endl;
	vec1.reset();
	std::cout << "token2_1 = " << vec2.Get(token2_1) << std::endl;
	std::cout << "token2_2 = " << vec2.Get(token2_2) << std::endl;
	for (auto it = vec2.GetFirst(); !vec2.ReachedEnd(it); vec2.StepNext(it)) {
		std::cout << "Iterated vec2: " << vec2.Get(it) << std::endl;
	}

}
示例#4
0
netcode::RawPacket* CDemoReader::GetData(float readTime)
{
	if (ReachedEnd())
		return NULL;

	// when paused, modGameTime does not increase (ie. we
	// always pass the same readTime value) so no seperate
	// check needed
	if (readTime >= nextDemoReadTime) {
		netcode::RawPacket* buf = new netcode::RawPacket(chunkHeader.length);
		if (playbackDemo->Read((char*)(buf->data), chunkHeader.length) < chunkHeader.length) {
			bytesRemaining = 0;
			return NULL;
		}
		bytesRemaining -= chunkHeader.length;

		if (bytesRemaining > 0 && !playbackDemo->Eof()) {
			long curPos = playbackDemo->GetPos();
			if (readTime == nextDemoReadTime) {
				playbackDemo->Seek(0, std::ios::end);
				if (playbackDemoSize != playbackDemo->GetPos())
					readTime = -nextDemoReadTime;
				playbackDemo->Seek(curPos);
			}
			if (curPos < playbackDemoSize) {
				// read next chunk header
				if (playbackDemo->Read((char*)&chunkHeader, sizeof(chunkHeader)) < sizeof(chunkHeader)) {
					bytesRemaining = 0;
					return NULL;
				}
				chunkHeader.swab();
				nextDemoReadTime = chunkHeader.modGameTime + demoTimeOffset;
				bytesRemaining -= sizeof(chunkHeader);
			}
		}

		return (readTime < 0) ? NULL : buf;
	} else {
		return NULL;
	}
}
示例#5
0
netcode::RawPacket* CDemoReader::GetData(float curTime)
{
	if (ReachedEnd())
		return 0;

	// when paused, modGameTime wont increase so no seperate check needed
	if (nextDemoRead < curTime) {
		netcode::RawPacket* buf = new netcode::RawPacket(chunkHeader.length);
		playbackDemo->Read((void*)(buf->data), chunkHeader.length);
		bytesRemaining -= chunkHeader.length;

		playbackDemo->Read((void*)&chunkHeader, sizeof(chunkHeader));
		chunkHeader.swab();
		nextDemoRead = chunkHeader.modGameTime + demoTimeOffset;
		bytesRemaining -= sizeof(chunkHeader);

		return buf;
	} else {
		return 0;
	}
}
示例#6
0
static void test3()
{
	CloneableContainers::RemovableVector<std::string> vec1;

	auto token1 = vec1.PushBack("first");
	auto token2 = vec1.PushBack("second");

	for (auto it = vec1.GetFirst(); !vec1.ReachedEnd(it); vec1.StepNext(it)) {
		std::cout << "Iterated vec1: " << *vec1.Get(it) << std::endl;
	}

	std::cout << "==" << std::endl;
	auto token3 = vec1.PushBack("third");
	for (auto it = vec1.GetFirst(); !vec1.ReachedEnd(it); vec1.StepNext(it)) {
		std::cout << "Iterated vec1: " << *vec1.Get(it) << std::endl;
	}

	auto vec2 = vec1;

	std::cout << "==" << std::endl;
	vec1.Remove(token2);
	std::cout << "get a removed token: " << vec1.Get(token2) << std::endl;
	std::cout << "get the token from copied container: " << *vec2.Get(token2) << std::endl;
	for (auto it = vec1.GetFirst(); !vec1.ReachedEnd(it); vec1.StepNext(it)) {
		std::cout << "Iterated vec1: " << *vec1.Get(it) << std::endl;
	}

	std::cout << "==" << std::endl;
	vec1.PushBack("forth");
	for (auto it = vec1.GetFirst(); !vec1.ReachedEnd(it); vec1.StepNext(it)) {
		std::cout << "Iterated vec1: " << *vec1.Get(it) << std::endl;
	}

	std::cout << "==" << std::endl;
	for (auto it = vec2.GetFirst(); !vec2.ReachedEnd(it); vec2.StepNext(it)) {
		std::cout << "Iterated vec2: " << *vec2.Get(it) << std::endl;
	}
}