void Lut1D::finalize() const { m_isNoOp = IsLut1DNoOp(*this, maxerror, errortype); if(m_isNoOp) { m_cacheID = "<NULL 1D>"; } else { md5_state_t state; md5_byte_t digest[16]; md5_init(&state); md5_append(&state, (const md5_byte_t *)from_min, 3*sizeof(float)); md5_append(&state, (const md5_byte_t *)from_max, 3*sizeof(float)); for(int i=0; i<3; ++i) { md5_append( &state, (const md5_byte_t *)&(luts[i][0]), (int) (luts[i].size()*sizeof(float)) ); } md5_finish(&state, digest); m_cacheID = GetPrintableHash(digest); } }
std::string Lut3D::getCacheID() const { AutoMutex lock(m_cacheidMutex); if(lut.empty()) throw Exception("Cannot compute cacheID of invalid Lut3D"); if(!m_cacheID.empty()) return m_cacheID; md5_state_t state; md5_byte_t digest[16]; md5_init(&state); md5_append(&state, (const md5_byte_t *)from_min, (int)(3*sizeof(float))); md5_append(&state, (const md5_byte_t *)from_max, (int)(3*sizeof(float))); md5_append(&state, (const md5_byte_t *)size, (int)(3*sizeof(int))); md5_append(&state, (const md5_byte_t *)&lut[0], (int)(lut.size()*sizeof(float))); md5_finish(&state, digest); m_cacheID = GetPrintableHash(digest); return m_cacheID; }
void MatrixOpData::finalize() { AutoMutex lock(m_mutex); std::ostringstream cacheIDStream; cacheIDStream << getID(); md5_state_t state; md5_byte_t digest[16]; // TODO: array and offset do not require double precison in cache. md5_init(&state); md5_append(&state, (const md5_byte_t *)&(getArray().getValues()[0]), (int)(16 * sizeof(double))); md5_append(&state, (const md5_byte_t *)getOffsets().getValues(), (int)(4 * sizeof(double))); md5_finish(&state, digest); cacheIDStream << GetPrintableHash(digest); m_cacheID = cacheIDStream.str(); }