HBitmapDecoder CodecLibrary::createDecoder(std::istream& sourceStream){ char str[100]; sourceStream.getline(str, 100); std::string firstChunk(str); for(auto pair : myDecoders) { if (pair.second->isSupported(firstChunk)) { sourceStream.clear(); sourceStream.seekg(0); return createDecoder(pair.first, sourceStream); } } throw std::runtime_error("No matching decder found"); }
vector<Chunk> combineUnmatchedChunks(vector<bool> chunkmatchstatus, vector<Chunk> chunkdetails){ vector<Chunk> combinedChunks; int unmatchcount=0; for(int i=0;i<chunkmatchstatus.size();i++){ if(!chunkmatchstatus[i]){ unmatchcount++; Chunk firstChunk(chunkdetails[i].getHash(),chunkdetails[i].getOffset(),chunkdetails[i].getLength(),chunkdetails[i].getPath()); while(i+1<chunkmatchstatus.size() && !chunkmatchstatus[i+1]){ firstChunk.setLength(chunkdetails[i+1].getLength()+firstChunk.getLength()); unmatchcount++; i++; } combinedChunks.push_back(firstChunk); } } return combinedChunks; }