class FastCache::CRC32 def initialize(string = nil) @crc = 0xFFFFFFFF self << string if string end def <<(string) string.size.times do |i| @crc ^= string[i] 8.times do if (@crc & 1).zero? @crc >>= 1 else @crc = (@crc >> 1) ^ 0xEDB88320 end end end self end def digest [@crc ^ 0xFFFFFFFF].pack('N') end def hexdigest (@crc ^ 0xFFFFFFFF).to_s(16) end end