コード例 #1
0
ファイル: RdbTab.cpp プロジェクト: nightstyles/focp
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);
}
コード例 #2
0
ファイル: RdbUtility.cpp プロジェクト: nightstyles/focp
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;
}
コード例 #3
0
ファイル: RdbUtility.cpp プロジェクト: nightstyles/focp
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;
}
コード例 #4
0
ファイル: Image.cpp プロジェクト: ONLYOFFICE/core
	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);
	}
コード例 #5
0
ファイル: Image.cpp プロジェクト: ONLYOFFICE/core
	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);
	}
コード例 #6
0
ファイル: Image.cpp プロジェクト: ONLYOFFICE/core
	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);
	}
コード例 #7
0
ファイル: Image.cpp プロジェクト: ONLYOFFICE/core
    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);
	}
コード例 #8
0
ファイル: Image.cpp プロジェクト: ONLYOFFICE/core
	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);
	}
コード例 #9
0
ファイル: RdbUtility.cpp プロジェクト: nightstyles/focp
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;
}