mirror of https://github.com/axmolengine/axmol.git
Merge pull request #845 from dumganhar/gles20_optimize_data
fixed #1166: Added CCArray::arrayWithContentOfFile function.
This commit is contained in:
commit
1fe71210ed
|
@ -74,6 +74,8 @@ class CC_DLL CCArray : public CCObject
|
|||
{
|
||||
public:
|
||||
~CCArray();
|
||||
|
||||
/* static functions */
|
||||
/** Create an array */
|
||||
static CCArray* array();
|
||||
/** Create an array with one object */
|
||||
|
@ -84,6 +86,18 @@ public:
|
|||
static CCArray* arrayWithCapacity(unsigned int capacity);
|
||||
/** Create an array with an existing array */
|
||||
static CCArray* arrayWithArray(CCArray* otherArray);
|
||||
/**
|
||||
@brief Generate a CCArray pointer by file
|
||||
@param pFileName The file name of *.plist file
|
||||
@return The CCArray pointer generated from the file
|
||||
*/
|
||||
static CCArray* arrayWithContentsOfFile(const char* pFileName);
|
||||
|
||||
/*
|
||||
@brief The same meaning as arrayWithContentsOfFile(), but it doesn't call autorelease, so the
|
||||
invoker should call release().
|
||||
*/
|
||||
static CCArray* arrayWithContentsOfFileThreadSafe(const char* pFileName);
|
||||
|
||||
/** Initializes an array */
|
||||
bool init();
|
||||
|
@ -152,7 +166,9 @@ public:
|
|||
|
||||
void replaceObjectAtIndex(unsigned int uIndex, CCObject* pObject, bool bReleaseObject = true);
|
||||
|
||||
/* override functions */
|
||||
virtual CCObject* copyWithZone(CCZone* pZone);
|
||||
|
||||
public:
|
||||
ccArray* data;
|
||||
CCArray();
|
||||
|
|
|
@ -54,9 +54,18 @@ typedef enum
|
|||
SAX_ARRAY
|
||||
}CCSAXState;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
SAX_RESULT_NONE = 0,
|
||||
SAX_RESULT_DICT,
|
||||
SAX_RESULT_ARRAY
|
||||
}CCSAXResult;
|
||||
|
||||
class CCDictMaker : public CCSAXDelegator
|
||||
{
|
||||
public:
|
||||
CCSAXResult m_eResultType;
|
||||
CCArray* m_pRootArray;
|
||||
CCDictionary *m_pRootDict;
|
||||
CCDictionary *m_pCurDict;
|
||||
std::stack<CCDictionary*> m_tDictStack;
|
||||
|
@ -68,8 +77,10 @@ public:
|
|||
std::stack<CCSAXState> m_tStateStack;
|
||||
|
||||
public:
|
||||
CCDictMaker()
|
||||
: m_pRootDict(NULL),
|
||||
CCDictMaker()
|
||||
: m_eResultType(SAX_RESULT_NONE),
|
||||
m_pRootArray(NULL),
|
||||
m_pRootDict(NULL),
|
||||
m_pCurDict(NULL),
|
||||
m_tState(SAX_NONE),
|
||||
m_pArray(NULL)
|
||||
|
@ -82,6 +93,7 @@ public:
|
|||
|
||||
CCDictionary* dictionaryWithContentsOfFile(const char *pFileName)
|
||||
{
|
||||
m_eResultType = SAX_RESULT_DICT;
|
||||
CCSAXParser parser;
|
||||
|
||||
if (false == parser.init("UTF-8"))
|
||||
|
@ -94,6 +106,21 @@ public:
|
|||
return m_pRootDict;
|
||||
}
|
||||
|
||||
CCArray* arrayWithContentsOfFile(const char* pFileName)
|
||||
{
|
||||
m_eResultType = SAX_RESULT_ARRAY;
|
||||
CCSAXParser parser;
|
||||
|
||||
if (false == parser.init("UTF-8"))
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
parser.setDelegator(this);
|
||||
|
||||
parser.parse(pFileName);
|
||||
return m_pArray;
|
||||
}
|
||||
|
||||
void startElement(void *ctx, const char *name, const char **atts)
|
||||
{
|
||||
CC_UNUSED_PARAM(ctx);
|
||||
|
@ -154,10 +181,18 @@ public:
|
|||
else if (sName == "array")
|
||||
{
|
||||
m_tState = SAX_ARRAY;
|
||||
m_pArray = CCArray::array();
|
||||
m_pArray->retain();
|
||||
m_pArray = new CCArray();
|
||||
if (m_eResultType == SAX_RESULT_ARRAY && m_pRootArray == NULL)
|
||||
{
|
||||
m_pRootArray = m_pArray;
|
||||
m_pRootArray->retain();
|
||||
}
|
||||
CCSAXState preState = SAX_NONE;
|
||||
if (! m_tStateStack.empty())
|
||||
{
|
||||
preState = m_tStateStack.top();
|
||||
}
|
||||
|
||||
CCSAXState preState = m_tStateStack.empty() ? SAX_DICT : m_tStateStack.top();
|
||||
if (preState == SAX_DICT)
|
||||
{
|
||||
m_pCurDict->setObject(m_pArray, m_sCurKey.c_str());
|
||||
|
@ -297,6 +332,12 @@ CCDictionary* ccFileUtils_dictionaryWithContentsOfFileThreadSafe(const char *pFi
|
|||
return tMaker.dictionaryWithContentsOfFile(pFileName);
|
||||
}
|
||||
|
||||
CCArray* ccFileUtils_arrayWithContentsOfFileThreadSafe(const char* pFileName)
|
||||
{
|
||||
CCDictMaker tMaker;
|
||||
return tMaker.arrayWithContentsOfFile(pFileName);
|
||||
}
|
||||
|
||||
unsigned char* CCFileUtils::getFileDataFromZip(const char* pszZipFilePath, const char* pszFileName, unsigned long * pSize)
|
||||
{
|
||||
unsigned char * pBuffer = NULL;
|
||||
|
|
|
@ -431,6 +431,22 @@ namespace cocos2d {
|
|||
return pRet;
|
||||
}
|
||||
|
||||
CCArray* ccFileUtils_arrayWithContentsOfFileThreadSafe(const char* pFileName)
|
||||
{
|
||||
NSString* pPath = [NSString stringWithUTF8String:pFileName];
|
||||
NSString* pathExtension= [pPath pathExtension];
|
||||
pPath = [pPath stringByDeletingPathExtension];
|
||||
pPath = [[NSBundle mainBundle] pathForResource:pPath ofType:pathExtension];
|
||||
NSArray* pArray = [NSArray arrayWithContentsOfFile:pPath];
|
||||
|
||||
CCArray* pRet = new CCArray();
|
||||
for (id value in pArray) {
|
||||
static_addItemToCCArray(value, pRet);
|
||||
}
|
||||
|
||||
return pRet;
|
||||
}
|
||||
|
||||
unsigned char* CCFileUtils::getFileData(const char* pszFileName, const char* pszMode, unsigned long * pSize)
|
||||
{
|
||||
unsigned char * pBuffer = NULL;
|
||||
|
|
|
@ -116,9 +116,26 @@ CCArray* CCArray::arrayWithCapacity(unsigned int capacity)
|
|||
|
||||
CCArray* CCArray::arrayWithArray(CCArray* otherArray)
|
||||
{
|
||||
CCArray* pArray = (CCArray*)otherArray->copyWithZone(NULL);
|
||||
pArray->autorelease();
|
||||
return pArray;
|
||||
CCArray* pRet = (CCArray*)otherArray->copy();
|
||||
pRet->autorelease();
|
||||
return pRet;
|
||||
}
|
||||
|
||||
CCArray* CCArray::arrayWithContentsOfFile(const char* pFileName)
|
||||
{
|
||||
CCArray* pRet = arrayWithContentsOfFileThreadSafe(pFileName);
|
||||
if (pRet != NULL)
|
||||
{
|
||||
pRet->autorelease();
|
||||
}
|
||||
return pRet;
|
||||
}
|
||||
|
||||
extern CCArray* ccFileUtils_arrayWithContentsOfFileThreadSafe(const char* pFileName);
|
||||
|
||||
CCArray* CCArray::arrayWithContentsOfFileThreadSafe(const char* pFileName)
|
||||
{
|
||||
return ccFileUtils_arrayWithContentsOfFileThreadSafe(pFileName);
|
||||
}
|
||||
|
||||
bool CCArray::init()
|
||||
|
|
Loading…
Reference in New Issue