123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217 |
- #include "editor-support/cocostudio/CocoLoader.h"
- #include "zlib.h"
- using namespace std;
- using namespace rapidjson;
- namespace cocostudio{
-
- char cTypeName[] = {'N','F','T','O','A','S','V'};
- const char* kTypeNames[] = { "Null", "False", "True", "Object", "Array", "String", "Number" };
- const char* kObjKeyName[] = { "__type" , "classname" };
- char g_Buff[2048];
- char* stExpCocoAttribDesc::GetName(CocoLoader* pCoco)
- {
- return ( pCoco->GetMemoryAddr_String() + m_szName );
- }
- char* stExpCocoObjectDesc::GetName(CocoLoader* pCoco)
- {
- return ( pCoco->GetMemoryAddr_String() + m_szName );
- }
- int stExpCocoObjectDesc::GetAttribNum()
- {
- return m_cAttribNum;
- }
- stExpCocoAttribDesc* stExpCocoObjectDesc::GetAttribDescArray(CocoLoader* pCoco)
- {
- return (stExpCocoAttribDesc*)( pCoco->GetMemoryAddr_AttribDesc() + m_pAttribDescArray );
- }
-
- Type stExpCocoNode::GetType(CocoLoader* pCoco)
- {
-
- Type tType = kObjectType;
- if(m_ObjIndex >= 0)
- {
- stExpCocoObjectDesc* tpCocoObjectDesc = pCoco->GetCocoObjectDescArray() ;
- if( m_AttribIndex >= 0 )
- {
- stExpCocoAttribDesc* tpAttribDescArray = (stExpCocoAttribDesc*) tpCocoObjectDesc[m_ObjIndex].GetAttribDescArray(pCoco);
- tType = Type(tpAttribDescArray[m_AttribIndex].m_cTypeName - 'N' + kNullType);
-
- if(kFalseType == tType || kTrueType == tType)
- {
- char* szValue = (char*)GetValue(pCoco);
- if(szValue[0] == '0')
- {
- return kFalseType;
- }
- else
- {
- return kTrueType;
- }
- }
-
- }
- else
- {
- tType = kObjectType;
- }
- }
- else
- {
- if(m_AttribIndex >= 0)
- {
- tType = (Type)m_ChildNum;
-
- if(kFalseType == tType || kTrueType == tType)
- {
- char* szValue = (char*)GetValue(pCoco);
- if(szValue[0] == '0')
- {
- return kFalseType;
- }
- else
- {
- return kTrueType;
- }
- }
- }
- else
- {
- tType = kArrayType;
- }
- }
- return tType;
- }
- char* stExpCocoNode::GetName(CocoLoader* pCoco)
- {
- char* szName = nullptr ;
- if(m_ObjIndex >= 0)
- {
- stExpCocoObjectDesc* tpCocoObjectDesc = pCoco->GetCocoObjectDescArray();
- if( m_AttribIndex >= 0 )
- {
- stExpCocoAttribDesc* tpAttribDescArray = (stExpCocoAttribDesc*) tpCocoObjectDesc[m_ObjIndex].GetAttribDescArray(pCoco);
- szName = tpAttribDescArray[m_AttribIndex].GetName(pCoco);
- }
- else
- {
- char* szValue = GetValue(pCoco);
- if(szValue[0])
- {
- szName = GetValue(pCoco);
- }
- else
- {
- szName = tpCocoObjectDesc[m_ObjIndex].GetName(pCoco);
- }
- }
- }
- else
- {
- if(m_AttribIndex >= 0)
- {
- char* pStringAddr = (char*)pCoco->GetCocoObjectDescArray() + pCoco->GetFileHeader()->m_lStringMemAddr ;
- szName = m_ChildArray + pStringAddr;
- }
- else
- {
- szName = (char*)GetValue(pCoco);
- }
- }
- return szName ;
-
- }
- char* stExpCocoNode::GetValue(CocoLoader* pCoco)
- {
- char* szValue = ( pCoco->GetMemoryAddr_String() + m_szValue );
- if( 0==strcmp(szValue,"null") && GetType(pCoco) == kStringType )
- {
- strcpy(szValue,"");
- }
- return szValue;
- }
- int stExpCocoNode::GetChildNum()
- {
- return m_ChildNum;
- }
- stExpCocoNode* stExpCocoNode::GetChildArray(CocoLoader* pCoco)
- {
- return (stExpCocoNode*)( pCoco->GetMemoryAddr_CocoNode() + m_ChildArray );
- }
- CocoLoader::CocoLoader()
- {
- m_pRootNode = nullptr;
- m_pObjectDescArray = nullptr;
- m_pMemoryBuff = nullptr;
- }
- CocoLoader::~CocoLoader()
- {
- if(m_pMemoryBuff)
- {
- delete[] m_pMemoryBuff;
- m_pMemoryBuff = nullptr;
- }
-
- }
- bool CocoLoader::ReadCocoBinBuff(char* pBinBuff)
- {
- if(m_pMemoryBuff)return true;
- char* pTempBuff = pBinBuff;
-
- m_pFileHeader = (stCocoFileHeader*)pTempBuff;
- pTempBuff += sizeof(stCocoFileHeader);
- char* pStartAddr = m_pMemoryBuff = pTempBuff;
-
- char* pDestBuff = new (std::nothrow) char[m_pFileHeader->m_nDataSize];
- if (m_pFileHeader->m_nCompressSize > 0)
- {
- uLongf dwSrcSize = m_pFileHeader->m_nCompressSize;
- uLongf dwDestSize = m_pFileHeader->m_nDataSize;
- uncompress((Bytef*)pDestBuff,&dwDestSize,(Bytef*)m_pMemoryBuff,dwSrcSize);
- }
- else
- {
- memcpy(pDestBuff, m_pMemoryBuff, m_pFileHeader->m_nDataSize);
- }
- pStartAddr = m_pMemoryBuff = pDestBuff;
-
- m_pObjectDescArray = (stExpCocoObjectDesc*)pStartAddr;
-
- char* pCocoMemAddr = pStartAddr + m_pFileHeader->m_CocoNodeMemAddr;
-
- m_pRootNode = (stExpCocoNode*)pCocoMemAddr;
-
- return true;
- }
- char* CocoLoader::GetMemoryAddr_AttribDesc()
- {
- return m_pMemoryBuff + m_pFileHeader->m_lAttribMemAddr ;
- }
- char* CocoLoader::GetMemoryAddr_CocoNode()
- {
- return m_pMemoryBuff + m_pFileHeader->m_CocoNodeMemAddr;
- }
- char* CocoLoader::GetMemoryAddr_String()
- {
- return m_pMemoryBuff + m_pFileHeader->m_lStringMemAddr ;
-
- }
- }
|