Пример #1
0
			static std::pair<uint64_t,uint64_t> getParamPair(std::string const & filename, uint64_t const offset)
			{
				libmaus2::aio::InputStreamInstance istr(filename);
				
				istr.seekg ( offset, std::ios::beg );
						
				uint64_t const b = deserializeNumber(istr);
				uint64_t const n = deserializeNumber(istr);
								
				return std::pair<uint64_t,uint64_t>(b,n);
			}
Пример #2
0
			static std::pair<uint64_t,uint64_t> getParamPair(std::string const & filename, uint64_t const offset)
			{
				std::ifstream istr(filename.c_str(),std::ios::binary);
				assert ( istr.is_open() );
				
				istr.seekg ( offset, std::ios::beg );
						
				uint64_t const b = deserializeNumber(istr);
				uint64_t const n = deserializeNumber(istr);
				
				istr.close();
				
				return std::pair<uint64_t,uint64_t>(b,n);
			}
Пример #3
0
libmaus2::util::Array864::Array864(std::istream & in)
: n(deserializeNumber(in)), B(in), R(new ::libmaus2::rank::ERank222B(B.get(),B.size()*64)), A8(in), A64(in)
{
}
Пример #4
0
			static unique_ptr_type concat(
				std::string const & filename,
				::libmaus::autoarray::AutoArray<uint64_t> const & offsets,
				uint64_t const li, uint64_t const ri
			)
			{
				unique_ptr_type ptr;
			
				if ( ri != li )
				{
					assert ( ri > li );
				
					uint64_t const b = getParamPair(filename,offsets[0]).first;
					uint64_t n = 0;
				
					for ( uint64_t i = li; i < ri; ++i )
					{
						std::pair<uint64_t,uint64_t> const p = getParamPair(filename,offsets[i]);
						assert ( b == p.first );
						n += p.second;
					}
					
					ptr = unique_ptr_type(new this_type(n,b));
					
					uint64_t totalbits = 0;
					
					for ( uint64_t i = li; i < ri; ++i )
					{
						std::ifstream istr(filename.c_str(),std::ios::binary);
						istr.seekg ( offsets[i], std::ios::beg );
						assert ( istr.is_open() );
								
						uint64_t const b = deserializeNumber(istr);
						uint64_t const n = deserializeNumber(istr);
						uint64_t const s = deserializeNumber(istr);
						uint64_t const as = deserializeNumber(istr);
						assert ( s == as );
						
						uint64_t const blocksize = 16*1024;
						uint64_t wordsleft = (n*b+63)/64;
						::libmaus::autoarray::AutoArray<uint64_t> B(blocksize,false);
						
						unsigned int const mod = totalbits % 64;
						unsigned int const mod64 = 64-mod;
						uint64_t * D = ptr->D + (totalbits/64);

						if ( !mod )
						{
							while ( wordsleft )
							{
								uint64_t const wordstoread = std::min(wordsleft,blocksize);
								uint64_t const bytestoread = wordstoread*sizeof(uint64_t);
								
								istr.read ( reinterpret_cast<char *>(B.get()), bytestoread );
								assert ( istr );
								assert ( istr.gcount() == static_cast<int64_t>(bytestoread) );
								
								for ( uint64_t z = 0; z < wordstoread; ++z )
									*(D++) = B[z];
								
								wordsleft -= wordstoread;
							}
						}
						else
						{
							while ( wordsleft )
							{
								uint64_t const wordstoread = std::min(wordsleft,blocksize);
								uint64_t const bytestoread = wordstoread*sizeof(uint64_t);
								
								istr.read ( reinterpret_cast<char *>(B.get()), bytestoread );
								assert ( istr );
								assert ( istr.gcount() == static_cast<int64_t>(bytestoread) );
								
								for ( uint64_t z = 0; z < wordstoread; ++z )
								{
									*(D++) |= (B[z] >> mod);
									*D |= B[z] << (mod64);
								}
								
								wordsleft -= wordstoread;
							}						
						}
						
						istr.close();
						
						totalbits += n*b;
					}
				}