CCString

#ifndef __CCSTRING_H__

#define __CCSTRING_H__


#if (CC_TARGET_PLATFORM == CC_PLATFORM_BLACKBERRY)

#include <string.h>

#endif


#include <stdarg.h>

#include <string>

#include <functional>

#include "CCObject.h"


NS_CC_BEGIN


/**

 * @addtogroup data_structures

 * @{

 */


class CC_DLL CCString : public CCObject

{

public:

    CCString();

    CCString(const char* str);

    CCString(const std::string& str);

    CCString(const CCString& str);


    virtual ~CCString();

    

    /* override assignment operator */

    CCString& operator= (const CCString& other);


    /** init a string with format, it's similar with the c function 'sprintf' */ 

    bool initWithFormat(const char* format, ...) CC_FORMAT_PRINTF(2, 3);


    /** convert to int value */

    int intValue() const;


    /** convert to unsigned int value */

    unsigned int uintValue() const;


    /** convert to float value */

    float floatValue() const;


    /** convert to double value */

    double doubleValue() const;


    /** convert to bool value */

    bool boolValue() const;


    /** get the C string */

    const char* getCString() const;


    /** get the length of string */

    unsigned int length() const;


    /** compare to a c string */

    int compare(const char *) const;


    /* override functions */

    virtual CCObject* copyWithZone(CCZone* pZone);

    virtual bool isEqual(const CCObject* pObject);


    /** create a string with std string, you can also pass a c string pointer because the default constructor of std::string can access a c string pointer. 

     *  @return A CCString pointer which is an autorelease object pointer,

     *          it means that you needn't do a release operation unless you retain it.

     */

    static CCString* create(const std::string& str);


    /** create a string with format, it's similar with the c function 'sprintf', the default buffer size is (1024*100) bytes,

     *  if you want to change it, you should modify the kMaxStringLen macro in CCString.cpp file.

     *  @return A CCString pointer which is an autorelease object pointer,

     *          it means that you needn't do a release operation unless you retain it.

     */ 

    static CCString* createWithFormat(const char* format, ...) CC_FORMAT_PRINTF(1, 2);


    /** create a string with binary data 

     *  @return A CCString pointer which is an autorelease object pointer,

     *          it means that you needn't do a release operation unless you retain it.

     */

    static CCString* createWithData(const unsigned char* pData, unsigned long nLen);


    /** create a string with a file, 

     *  @return A CCString pointer which is an autorelease object pointer,

     *          it means that you needn't do a release operation unless you retain it.

     */

    static CCString* createWithContentsOfFile(const char* pszFileName);


    virtual void acceptVisitor(CCDataVisitor &visitor);


private:


    /** only for internal use */

    bool initWithFormatAndValist(const char* format, va_list ap);


public:

    std::string m_sString;

};


struct CCStringCompare : public std::binary_function<CCString *, CCString *, bool> {

    public:

        bool operator() (CCString * a, CCString * b) const {

            return strcmp(a->getCString(), b->getCString()) < 0;

        }

};


#define CCStringMake(str) CCString::create(str)

#define ccs               CCStringMake


// end of data_structure group

/// @}


NS_CC_END


#endif //__CCSTRING_H__


posted @ 2014-05-22 21:12  sssssnian  阅读(259)  评论(0)    收藏  举报