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/

  • 相关阅读:
    Mybatis学习笔记
    Java——设计模式
    Java——多线程
    Java——集合
    DAO层、Service层、Controller层、View层
    Mybatis整合spring
    Spring中的DI和IOC
    事务
    Xml实现AOP
    2018.3.10考试的试题解析
  • 原文地址:https://www.cnblogs.com/ezhong/p/2267918.html
Copyright © 2011-2022 走看看