uint32 CRdbTableAccess::WriteRedoForUpdate(uint32 nMaxRollBackRecordQuantity) { if(m_pTabDef->m_pBaseAttr->nStorage == RDB_MEMORY_TABLE) return 0; char sRedo[256], *pRedo = sRedo; const char* sLogName = m_pTabDef->GetLogName(); const char* sTableName = (const char*)m_pTabDef->m_pBaseAttr->sTableName; *(uint32*)pRedo = RDO_UPDATE; pRedo += sizeof(uint32); CString::StringCopy(pRedo, sLogName); pRedo += CString::StringLength(sLogName) + 1; CString::StringCopy(pRedo, sTableName); pRedo += CString::StringLength(sTableName) + 1; CMemoryStream oStream; oStream.SetLocalCode(true); if(!oStream.Write(sRedo, pRedo-sRedo)) return 1; if(!oStream.Write(nMaxRollBackRecordQuantity)) return 1; if(!m_oIdxAttr.Write(oStream)) return 1; if(!m_oSetAttr.Write(oStream)) return 1; return g_pRedo->WriteRedoStream(&oStream); }
static bool PackFieldDefine(CMemoryStream & oStream, CRdbFieldDef& oDefine) { uint32 nLen = CString::StringLength(oDefine.sFieldName); if(!oStream.Write(nLen)) return false; if(!oStream.Write(oDefine.sFieldName, nLen+1)) return false; if(!oDefine.sDefault) nLen = 0; else nLen = CString::StringLength(oDefine.sDefault); if(!oStream.Write(nLen)) return false; if(nLen && !oStream.Write(oDefine.sDefault, nLen+1)) return false; if(!oStream.Write(oDefine.nType)) return false; if(!oStream.Write(oDefine.nLen)) return false; if(!oStream.Write(oDefine.bNotNull)) return false; if(!oStream.Write(oDefine.nRecSize)) return false; return true; }
bool PackTableDefine(CMemoryStream & oStream, CRdbTableDef& oDefine) { uint32 nLen = CString::StringLength(oDefine.sTableName); if(!oStream.Write(nLen)) return false; if(!oStream.Write(oDefine.sTableName, nLen+1)) return false; if(!oStream.Write(oDefine.nFieldCount)) return false; for(uint32 i=0; i<oDefine.nFieldCount; ++i) { if(!PackFieldDefine(oStream, oDefine.pFieldDefines[i])) return false; } if(!oStream.Write(oDefine.nStorage)) return false; return true; }
void CImageDict::LoadRaw(const BYTE* pBuffer, unsigned int unSize, unsigned int unWidth, unsigned int unHeight) { CMemoryStream* pStream = new CMemoryStream(unSize); if (!pStream) return; pStream->Write(pBuffer, unSize); SetStream(m_pXref, pStream); Add("Type", "XObject"); Add("Subtype", "Image"); Add("ColorSpace", "DeviceRGB"); Add("Width", unWidth); Add("Height", unHeight); Add("BitsPerComponent", 8); SetFilter(STREAM_FILTER_FLATE_DECODE); }
void CImageDict::LoadRaw(const BYTE* pBgra, unsigned int unWidth, unsigned int unHeight) { CMemoryStream* pStream = new CMemoryStream(3 * unWidth * unHeight); if (!pStream) return; for (unsigned int unIndex = 0, unSize = 4 * unWidth * unHeight; unIndex < unSize; unIndex += 4) { pStream->Write(pBgra + unIndex, 3); } SetStream(m_pXref, pStream); Add("Type", "XObject"); Add("Subtype", "Image"); Add("ColorSpace", "DeviceRGB"); Add("Width", unWidth); Add("Height", unHeight); Add("BitsPerComponent", 8); SetFilter(STREAM_FILTER_FLATE_DECODE); }
void CImageDict::LoadSMask(const BYTE* pBuffer, unsigned int unSize, unsigned int unWidth, unsigned int unHeight) { CMemoryStream* pStream = new CMemoryStream(unSize); if (!pStream) return; pStream->Write(pBuffer, unSize); CImageDict* pImageSMask = new CImageDict(m_pXref, m_pDocument); if (!pImageSMask) return; pImageSMask->SetStream(m_pXref, pStream); pImageSMask->Add("Type", "XObject"); pImageSMask->Add("Subtype", "Image"); pImageSMask->Add("ColorSpace", "DeviceGray"); pImageSMask->Add("Width", unWidth); pImageSMask->Add("Height", unHeight); pImageSMask->Add("BitsPerComponent", 8); pImageSMask->SetFilter(STREAM_FILTER_FLATE_DECODE); Add("SMask", pImageSMask); }
void CImageDict::LoadJpeg(BYTE* pBuffer, int nBufferSize, unsigned int unWidth, unsigned int unHeight, bool bGrayScale) { CMemoryStream* pStream = new CMemoryStream(); if (!pStream) return; pStream->Write(pBuffer, nBufferSize); SetStream(m_pXref, pStream); Add("Type", "XObject"); Add("Subtype", "Image"); Add("Height", unHeight); Add("Width", unWidth); if (bGrayScale) Add("ColorSpace", "DeviceGray"); else Add("ColorSpace", "DeviceRGB"); Add("BitsPerComponent", 8); SetFilter(STREAM_FILTER_DCT_DECODE); }
void CImageDict::LoadSMask(const BYTE* pBgra, unsigned int unWidth, unsigned int unHeight, unsigned char unAlpha, bool bVerFlip) { if (m_pDocument->IsPDFA()) return; CMemoryStream* pStream = new CMemoryStream(unWidth * unHeight); if (!pStream) return; if (255 != unAlpha) { double dKoef = unAlpha / 255.0; if (!bVerFlip) { for (unsigned int unIndex = 0, unSize = 4 * unWidth * unHeight; unIndex < unSize; unIndex += 4) { BYTE nChar = *(pBgra + unIndex + 3) * dKoef; pStream->Write(&nChar, 1); } } else { int nWidth = (int)unWidth; int nHeight = (int)unHeight; for (int nY = nHeight - 1; nY >= 0; nY--) { for (int nX = 0; nX < nWidth; nX++) { int unIndex = 4 * (nX + nY * nWidth); BYTE nChar = *(pBgra + unIndex + 3) * dKoef; pStream->Write(&nChar, 1); } } } } else { if (!bVerFlip) { for (unsigned int unIndex = 0, unSize = 4 * unWidth * unHeight; unIndex < unSize; unIndex += 4) { pStream->Write(pBgra + unIndex + 3, 1); } } else { int nWidth = (int)unWidth; int nHeight = (int)unHeight; for (int nY = nHeight - 1; nY >= 0; nY--) { for (int nX = 0; nX < nWidth; nX++) { int unIndex = 4 * (nX + nY * nWidth); pStream->Write(pBgra + unIndex + 3, 1); } } } } CImageDict* pImageSMask = new CImageDict(m_pXref, m_pDocument); if (!pImageSMask) return; pImageSMask->SetStream(m_pXref, pStream); pImageSMask->Add("Type", "XObject"); pImageSMask->Add("Subtype", "Image"); pImageSMask->Add("ColorSpace", "DeviceGray"); pImageSMask->Add("Width", unWidth); pImageSMask->Add("Height", unHeight); pImageSMask->Add("BitsPerComponent", 8); //#ifndef FILTER_FLATE_DECODE_DISABLED // pImageSMask->SetFilter(STREAM_FILTER_LZW_DECODE | STREAM_FILTER_FLATE_DECODE); //#else pImageSMask->SetFilter(STREAM_FILTER_FLATE_DECODE); //#endif Add("SMask", pImageSMask); }
bool PackIndexDefine(CMemoryStream & oStream, CRdbIndexDef &oDefine) { uint32 nLen; nLen = CString::StringLength(oDefine.sIndexName); if(!oStream.Write(nLen)) return false; if(!oStream.Write(oDefine.sIndexName, nLen+1)) return false; nLen = CString::StringLength(oDefine.sTableName); if(!oStream.Write(nLen)) return false; if(!oStream.Write(oDefine.sTableName, nLen+1)) return false; nLen = oDefine.sPrimaryIndex?CString::StringLength(oDefine.sPrimaryIndex):0; if(!oStream.Write(nLen)) return false; if(nLen && !oStream.Write(oDefine.sPrimaryIndex, nLen+1)) return false; nLen = CString::StringLength(oDefine.pFieldList); if(!oStream.Write(nLen)) return false; if(!oStream.Write(oDefine.pFieldList, nLen+1)) return false; if(!oStream.Write(oDefine.nQualifier)) return false; if(!oStream.Write(oDefine.nArithmetic)) return false; if(!oStream.Write(oDefine.nHashRate)) return false; return true; }