SkFlattenable /Registrar/
/** \class SkFlattenableSkFlattenable is the base class for objects that need to be flattenedinto a data stream for either transport or as part of the key to thefont 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/
转载于:https://www.cnblogs.com/ezhong/archive/2011/11/29/2267918.html
SkFlattenable /Registrar/相关推荐
- registrar计算机词汇,小艾学英语——计算机英语常用词汇(12)
原标题:小艾学英语--计算机英语常用词汇(12) 计算机英语常用词汇(计算机科学版) Q 队列Queue 快速排序算法Quick sort algorithm R Radio Shack(一种计算机) ...
- registrar计算机词汇,HR常用短语英语词汇表(转载)
供大家参考,资料不是很全,欢迎补充! A Action learning:行动学习 Alternation ranking method:交替排序法 Annual bonus:年终分红 Applica ...
- 【springboot】入门
简介: springBoot是spring团队为了整合spring全家桶中的系列框架做研究出来的一个轻量级框架.随着spring4.0推出而推出,springBoot可以説是J2SEE的一站式解决方案 ...
- GO Negotiation流程分析
本文为<深入理解Android Wi-Fi.NFC和GPS卷>读书笔记,Android源码为Android 5.1 P2pStateMachine收到P2P_PROV_DISC_PBC_R ...
- SpringBoot源码分析之@Scheduled
Springboot写上注解@Scheduled就可以实现定时任务, 这里对其源码做一点分析 @Service public class MyScheduled {@Scheduled(cron=&q ...
- 《深入理解Android:Wi-Fi,NFC和GPS》章节连载[节选]--第六章 深入理解wi-Fi Simple Configuration...
为什么80%的码农都做不了架构师?>>> 首先感谢各位兄弟姐妹们的耐心等待.本书预计在4月上市发售.从今天开始,我将在博客中连载此书的一些内容.注意,此处连载的是未经出版社编辑 ...
- Spring Boot 学习(1)
文 by / 林本托 Tip 做一个终身学习的人. 代码地址: https://github.com/iqcz/Springbootdemo Spring Boot 初体验 Spring Boot 包 ...
- 域名管理系统 二级域名_域名系统简介
域名管理系统 二级域名 by Sumedh Nimkarde 由Sumedh Nimkarde 域名系统简介 (An introduction to the Domain Name System) Y ...
- java web开发初学_2018年学习Web开发的绝对初学者指南
java web开发初学 This post was originally published on Coder-Coder.com. 该帖子最初发布在Coder-Coder.com上 . If yo ...
最新文章
- WebCast听课录(10)
- Go 语言编程 — 编码规范指南
- Android开发之详解五大布局
- 9soc sensor与bayer sensor 区别,内外置isp
- 黄金矿工游戏demo
- 品优购dubbox文档bug连环计,还是自己敲最实在!!!!!!
- 牛客练习赛19 E和F(签到就走系列)托米的饮料+托米搭积木
- Mybatis-plus之RowBounds实现分页查询
- java读取csv合适文件_解析-您可以推荐一个Java库来读取(并可能写入)CSV文件吗?...
- 几种常用的键盘钩子技术
- UG工程图自动标注工具 64位 版本无限制
- 弹性碰撞后速度方向_碰撞模型中的速度关系推导
- 旅行计划 c++_设计旅行计划器
- 学习mars3d的过程记录—配置环境
- 祝贺自己获得CSDN2018 博客之星
- 【软件安装】spyder汉化包安装
- 使用Python下载flbook.com.cn电子书
- 蓝奏云分享链接打不开修改host
- 8、135条最全弱电智能化综合布线常用术语
- startup_LPC17XX.s 启动文件分析