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)); } }
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; } }
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; } }
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; } }
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; } }
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; } }