BOOL CLZSS::Decomp(CArcFile* pclArc, DWORD dwDicSize, DWORD dwDicPtr, DWORD dwLengthOffset) { SFileInfo* pstFileInfo = pclArc->GetOpenFileInfo(); // Read DWORD dwSrcSize = pstFileInfo->sizeCmp; YCMemory<BYTE> clmSrc(dwSrcSize); pclArc->Read(&clmSrc[0], dwSrcSize); // Buffer allocation for extraction DWORD dwDstSize = pstFileInfo->sizeOrg; YCMemory<BYTE> clmDst(dwDstSize); // Decompression Decomp(&clmDst[0], dwDstSize, &clmSrc[0], dwSrcSize, dwDicSize, dwDicPtr, dwLengthOffset); // Bitmap if (lstrcmp(PathFindExtension(pstFileInfo->name), _T(".bmp")) == 0) { CImage clImage; clImage.Init(pclArc, &clmDst[0]); clImage.Write(dwDstSize); clImage.Close(); } else // Other { pclArc->OpenFile(); pclArc->WriteFile(&clmDst[0], dwDstSize); pclArc->CloseFile(); } return TRUE; }
BOOL CLZSS::Decode(CArcFile* pclArc) { SFileInfo* pstFileInfo = pclArc->GetOpenFileInfo(); if (pstFileInfo->format != _T("LZ")) { return FALSE; } return Decomp(pclArc, 4096, 4078, 3); }
bool SolveDeficit(DenseMatrix< VariableArray2<double> > &A, DenseVector<VariableArray1<double> > &x, DenseVector<VariableArray1<double> > &rhs, double deficitTolerance) { DenseMatrix< VariableArray2<double> > A2=A; DenseVector<VariableArray1<double> > rhs2=rhs; UG_ASSERT(A.num_rows() == rhs.size(), ""); UG_ASSERT(A.num_cols() == x.size(), ""); size_t iNonNullRows; x.resize(A.num_cols()); for(size_t i=0; i<x.size(); i++) x[i] = 0.0; std::vector<size_t> interchange; if(Decomp(A, rhs, iNonNullRows, interchange, deficitTolerance) == false) return false; // A.maple_print("Adecomp"); // rhs.maple_print("rhs decomp"); for(int i=iNonNullRows-1; i>=0; i--) { double d=A(i,i); double s=0; for(size_t k=i+1; k<A.num_cols(); k++) s += A(i,k)*x[interchange[k]]; x[interchange[i]] = (rhs[i] - s)/d; } DenseVector<VariableArray1<double> > f; f = A2*x - rhs2; if(VecNormSquared(f) > 1e-2) { UG_LOGN("iNonNullRows = " << iNonNullRows); UG_LOG("solving was wrong:"); UG_LOGN(CPPString(A2, "Aold")); rhs2.maple_print("rhs"); UG_LOGN(CPPString(A, "Adecomp")); rhs.maple_print("rhsDecomp"); x.maple_print("x"); f.maple_print("f"); } return true; }