/** \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/相关推荐

  1. registrar计算机词汇,小艾学英语——计算机英语常用词汇(12)

    原标题:小艾学英语--计算机英语常用词汇(12) 计算机英语常用词汇(计算机科学版) Q 队列Queue 快速排序算法Quick sort algorithm R Radio Shack(一种计算机) ...

  2. registrar计算机词汇,HR常用短语英语词汇表(转载)

    供大家参考,资料不是很全,欢迎补充! A Action learning:行动学习 Alternation ranking method:交替排序法 Annual bonus:年终分红 Applica ...

  3. 【springboot】入门

    简介: springBoot是spring团队为了整合spring全家桶中的系列框架做研究出来的一个轻量级框架.随着spring4.0推出而推出,springBoot可以説是J2SEE的一站式解决方案 ...

  4. GO Negotiation流程分析

    本文为<深入理解Android Wi-Fi.NFC和GPS卷>读书笔记,Android源码为Android 5.1 P2pStateMachine收到P2P_PROV_DISC_PBC_R ...

  5. SpringBoot源码分析之@Scheduled

    Springboot写上注解@Scheduled就可以实现定时任务, 这里对其源码做一点分析 @Service public class MyScheduled {@Scheduled(cron=&q ...

  6. 《深入理解Android:Wi-Fi,NFC和GPS》章节连载[节选]--第六章 深入理解wi-Fi Simple Configuration...

    为什么80%的码农都做不了架构师?>>>    首先感谢各位兄弟姐妹们的耐心等待.本书预计在4月上市发售.从今天开始,我将在博客中连载此书的一些内容.注意,此处连载的是未经出版社编辑 ...

  7. Spring Boot 学习(1)

    文 by / 林本托 Tip 做一个终身学习的人. 代码地址: https://github.com/iqcz/Springbootdemo Spring Boot 初体验 Spring Boot 包 ...

  8. 域名管理系统 二级域名_域名系统简介

    域名管理系统 二级域名 by Sumedh Nimkarde 由Sumedh Nimkarde 域名系统简介 (An introduction to the Domain Name System) Y ...

  9. java web开发初学_2018年学习Web开发的绝对初学者指南

    java web开发初学 This post was originally published on Coder-Coder.com. 该帖子最初发布在Coder-Coder.com上 . If yo ...

最新文章

  1. WebCast听课录(10)
  2. Go 语言编程 — 编码规范指南
  3. Android开发之详解五大布局
  4. 9soc sensor与bayer sensor 区别,内外置isp
  5. 黄金矿工游戏demo
  6. 品优购dubbox文档bug连环计,还是自己敲最实在!!!!!!
  7. 牛客练习赛19 E和F(签到就走系列)托米的饮料+托米搭积木
  8. Mybatis-plus之RowBounds实现分页查询
  9. java读取csv合适文件_解析-您可以推荐一个Java库来读取(并可能写入)CSV文件吗?...
  10. 几种常用的键盘钩子技术
  11. UG工程图自动标注工具 64位 版本无限制
  12. 弹性碰撞后速度方向_碰撞模型中的速度关系推导
  13. 旅行计划 c++_设计旅行计划器
  14. 学习mars3d的过程记录—配置环境
  15. 祝贺自己获得CSDN2018 博客之星
  16. 【软件安装】spyder汉化包安装
  17. 使用Python下载flbook.com.cn电子书
  18. 蓝奏云分享链接打不开修改host
  19. 8、135条最全弱电智能化综合布线常用术语
  20. startup_LPC17XX.s 启动文件分析

热门文章

  1. 周长相等的正方形面积一定相等_必考单元:三年级下册面积计算公式+知识点+测试卷(附答案),重点内容,收藏练习!...
  2. 在数据显示页面增加按姓名查询功能
  3. Missing space before value for key 'path'vue.js解决空格报错
  4. iOS 中 load 和 initialize的实现顺序
  5. iOS自定义转场动画
  6. Promise的实例用法
  7. SQLite数据转换成sql server数据
  8. PHP 读写数据库出现中文乱码问题
  9. android 52 粘滞广播
  10. Vbox共享文件夹不显示了