CCDataVisitor

#ifndef __CCDATAVISITOR_H__

#define __CCDATAVISITOR_H__

#include "platform/CCPlatformMacros.h"

#include <string>

NS_CC_BEGIN

class CCObject;

class CCBool;

class CCInteger;

class CCFloat;

class CCDouble;

class CCString;

class CCArray;

class CCDictionary;

class CCSet;

/**

 * @addtogroup data_structures

 * @{

 */

/**

 * Visitor that helps to perform action that depends on polymorphic object type

 *

 * Use cases:

 *  - data serialization,

 *  - pretty printing of \a CCObject *

 *  - safe value reading from \a CCArray, \a CCDictionary, \a CCSet

 *

 * Usage:

 *  1. subclass CCDataVisitor

 *  2. overload visit() methods for object that you need to handle

 *  3. handle other objects in \a visitObject()

 *  4. pass your visitor to \a CCObject::acceptVisitor()

 */

class CC_DLL CCDataVisitor

{

public:

    virtual ~CCDataVisitor() {}

    /** default method, called from non-overloaded methods and for unrecognized objects */

    virtual void visitObject(const CCObject *p) = 0;

    virtual void visit(const CCBool *p);

    virtual void visit(const CCInteger *p);

    virtual void visit(const CCFloat *p);

    virtual void visit(const CCDouble *p);

    virtual void visit(const CCString *p);

    virtual void visit(const CCArray *p);

    virtual void visit(const CCDictionary *p);

    virtual void visit(const CCSet *p);

};

class CC_DLL CCPrettyPrinter : public CCDataVisitor

{

public:

    CCPrettyPrinter(int indentLevel = 0);

    

    virtual void clear();

    virtual std::string getResult();

    

    virtual void visitObject(const CCObject *p);

    virtual void visit(const CCBool * p);

    virtual void visit(const CCInteger *p);

    virtual void visit(const CCFloat *p);

    virtual void visit(const CCDouble *p);

    virtual void visit(const CCString *p);

    virtual void visit(const CCArray *p);

    virtual void visit(const CCDictionary *p);

    virtual void visit(const CCSet *p);

private:

    void setIndentLevel(int indentLevel);

    int _indentLevel;

    std::string _indentStr;

    std::string _result;

};

// end of data_structure group

/// @}

NS_CC_END

#endif // __CCDATAVISITOR_H__


posted @ 2014-05-23 10:29  sssssnian  阅读(155)  评论(0)    收藏  举报