/** \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/
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ezhong的博客签名-------------------------------------
以上内容来自ezhong的博客园,作者:ezhong
ezhong的博客园: http://www.cnblogs.com/ezhong
感谢您的阅读。感谢您的分享。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步