recover all low level hashs from given data. hashs are assumed to be ordered in left to right - no identifier used
| 367 | |
| 368 | // recover all low level hashs from given data. hashs are assumed to be ordered in left to right - no identifier used |
| 369 | bool CAICHHashTree::LoadLowestLevelHashs(CFileDataIO* fileInput) |
| 370 | { |
| 371 | if (m_nDataSize <= m_nBaseSize) { // sanity |
| 372 | // lowest level, read hash |
| 373 | m_Hash.Read(fileInput); |
| 374 | m_bHashValid = true; |
| 375 | return true; |
| 376 | } else { |
| 377 | uint64 nBlocks = m_nDataSize / m_nBaseSize + ((m_nDataSize % m_nBaseSize != 0 )? 1:0); |
| 378 | uint64 nLeft = ( ((m_bIsLeftBranch) ? nBlocks+1:nBlocks) / 2)* m_nBaseSize; |
| 379 | uint64 nRight = m_nDataSize - nLeft; |
| 380 | if (m_pLeftTree == NULL) { |
| 381 | m_pLeftTree = new CAICHHashTree(nLeft, true, (nLeft <= PARTSIZE) ? EMBLOCKSIZE : PARTSIZE); |
| 382 | } else { |
| 383 | wxASSERT( m_pLeftTree->m_nDataSize == nLeft ); |
| 384 | } |
| 385 | if (m_pRightTree == NULL) { |
| 386 | m_pRightTree = new CAICHHashTree(nRight, false, (nRight <= PARTSIZE) ? EMBLOCKSIZE : PARTSIZE); |
| 387 | } else { |
| 388 | wxASSERT( m_pRightTree->m_nDataSize == nRight ); |
| 389 | } |
| 390 | return m_pLeftTree->LoadLowestLevelHashs(fileInput) |
| 391 | && m_pRightTree->LoadLowestLevelHashs(fileInput); |
| 392 | } |
| 393 | } |
| 394 | |
| 395 | |
| 396 | // write the hash, specified by wHashIdent, with Data from fileInput. |