zoukankan      html  css  js  c++  java
  • SkFlattenable /Registrar/

    
    
    
    
    /** \class SkFlattenable
     
     SkFlattenable is the base class for objects that need to be flattened
     into a data stream for either transport or as part of the key to the
     font cache.
     */
    class SK_API SkFlattenable : public SkRefCnt 
    {}
    

     以SkFlattenable为基类的对象是:为了 传输数据 或者 作为字体缓冲 的关键部分 需要被填充到一个数据流中 的对象    ?

    SkNoncopyable

           ∟ SkRefCnt

                 ∟SkFlattenable

    类 SkFlattenable 中定义了一个函数指针:

     typedef SkFlattenable* (*Factory)(SkFlattenableReadBuffer&);
    

    参数:SkFlattenableReadBuffer引用

    返回值:SkFlattenable 指针

    类内部定义Registrar成员类,Registrar类构造函数调用SkFlattenable的Register(const char name,Factory factory);

    在SkFlattenable.cpp中有全局变量:

    static int gCount;
    static Pair gPairs[MAX_PAIR_COUNT];
    

     SkFlattenable的Register函数(此函数为静态成员)将参数加入到全局变量 gPairs中。

    void SkFlattenable::Register(const char name[], Factory factory)
    {
        SkASSERT(name);
        SkASSERT(factory);
        static bool gOnce;
        if (!gOnce) 
      {
            gCount = 0;
            gOnce = true;
       }
        SkASSERT(gCount < MAX_PAIR_COUNT);
        gPairs[gCount].fName = name;
        gPairs[gCount].fFactory = factory;
        gCount += 1;
    }
    

     SkFlattenable提供了另两个静态成员函数 用于在 gPairs中根据name查找Factroy,或者根据Factroy查找name

        static Factory NameToFactory(const char name[]);
        static const char* FactoryToName(Factory);
    

     

    依靠子类实现的函数有:

    virtual Factory getFactory() = 0;
    virtual void flatten(SkFlattenableWriteBuffer&);
    virtual bool toDumpString(SkString*) const;  //本类中直接返回false
    SkFlattenable(SkFlattenableReadBuffer&) {}
    

      

    ezhong的博客园:http://www.cnblogs.com/ezhong/

  • 相关阅读:
    html5+css3中的background: -moz-linear-gradient 用法 (转载)
    CentOS 安装Apache服务
    Linux 笔记
    CURL 笔记
    Spring Application Context文件没有提示功能解决方法
    LeetCode 389. Find the Difference
    LeetCode 104. Maximum Depth of Binary Tree
    LeetCode 520. Detect Capital
    LeetCode 448. Find All Numbers Disappeared in an Array
    LeetCode 136. Single Number
  • 原文地址:https://www.cnblogs.com/ezhong/p/2267918.html
Copyright © 2011-2022 走看看