cocos2d-x节点(CCDataVisitor.h)API

时间:2022-01-25 15:55:16

本文来自http://blog.csdn.net/runaying ,引用必须注明出处!

cocos2d-x节点(CCDataVisitor.h)API

温馨提醒:为了大家能更好学习,强烈推荐大家看看本人的这篇博客 Cocos2d-X权威指南笔记

根据你的多态对象类型帮助你执行动作

///\cocos2d-x-3.0alpha0\cocos2dx\cocoa
//根据你的多态对象类型帮助你执行动作


#ifndef __CCDATAVISITOR_H__
#define __CCDATAVISITOR_H__

#include "platform/CCPlatformMacros.h"
#include <string>

NS_CC_BEGIN

class Object;
class Bool;
class Integer;
class Float;
class Double;
class String;
class Array;
class Dictionary;
class Set;
class Data;

/**
 * @addtogroup data_structures
 * @{
 */

/**
 * 根据你的多态对象类型帮助你执行动作
 *
 *用例:
 *  - 序列化的数据
 *  - 打印漂亮的对象
 *  - 安全读取 Array, Dictionary, Set 
 *
 * 用途:
 *  1. DataVisitor 的子类
 *  2. 你需要执行的对象 overload visit() 方法
 *  3. 在 visitObject() 处理其它对象
 *  4. 使用 Object::acceptVisitor() 通过你的 visitor
 */
class CC_DLL DataVisitor
{
public:
    /**
     * @js NA
     * @lua NA
     */
    virtual ~DataVisitor() {}

    /** 默认的方法,可以称为 non-overloaded 方法 and  不能识别的对象 */
    virtual void visitObject(const Object *p) = 0;

    virtual void visit(const Bool *p);
    virtual void visit(const Integer *p);
    virtual void visit(const Float *p);
    virtual void visit(const Double *p);
    virtual void visit(const String *p);
    virtual void visit(const Array *p);
    virtual void visit(const Dictionary *p);
    virtual void visit(const Set *p);
    virtual void visit(const Data *p);
};


class CC_DLL PrettyPrinter : public DataVisitor
{
public:
    PrettyPrinter(int indentLevel = 0);
    
    virtual void clear();
    virtual std::string getResult();
    
    virtual void visitObject(const Object *p);
    virtual void visit(const Bool * p);
    virtual void visit(const Integer *p);
    virtual void visit(const Float *p);
    virtual void visit(const Double *p);
    virtual void visit(const String *p);
    virtual void visit(const Array *p);
    virtual void visit(const Dictionary *p);
    virtual void visit(const Set *p);
    virtual void visit(const Data *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__