stout代码分析之三:Option类】的更多相关文章

为了安全表示NULL, stout实现了Option类.Option对象有两种状态: enum State { SOME, NONE, }; 其中SOME表示非空,NONE表示为空.可通过isSome和isNone判断Option对象是否为空. Option类符合RAII的特性,构造函数和析构函数如下: Option(const Option<T>& that) { state = that.state; if (that.t != NULL) { t = new T(*that.t)…
最近在使用mesos做高可用设计,在编译的过程中注意到mesos依赖stout,一个仅仅含有头文件的c++基础库.stout代码简洁,设计优雅,值得一读. stout从内容上可细分为以下几块: Primitives: Duration, Error, None, Nothing, Option, Owned, Result, Try, StopWatch,UUID. Collections: cache, hashmap, hashset, multihashmap,对常用数据结构进行了一些封装…
Result类似于Option和Try类的组合,内部有三种状态 enum State { SOME, NONE, ERROR }; SOME表示Result对象有值 NONE表示Result对象值为空 ERROR表示异常 api如下: none, 返回状态为NONE的Result实例 some,返回状态为SOME的Result实例 error, 返回状态为ERROR的Result实例 还有isNone, isSome, isError等,在此不细讲. 如Result对象为SOME状态,可通过ge…
UUID全称通用唯一识别码,被广泛应用于分布式系统中,让所有的元素具有唯一的标识. stout中UUID类继承自boost::uuids::uuid.api如下: random, 产生一个UUID对象. fromBytes,从字节数组生成UUID对象 fromString, 从字符串生成UUID对象 toBytes, 从UUID对象生成字节数组 toString, 从UUID对象生成字符 废话不多说,上示例代码: #include "stout/uuid.hpp" #include &…
stout的在异常捕获上遵循于谷歌类似的原则,不适用try...catch...,而是从函数返回值判断异常.Try类正是实现了这样的一个功能. 同Option一样,Try是一个模板类,每个类对象都有两种状态. enum State { SOME, ERROR }; State state; T* t; std::string message; SOME表示无异常,用户可获取指针t.ERROR表示有异常,用户可用过message获取异常信息.以下是Try类的示例: #include "stout/…
Duration类用于表示时间长度,可精确到纳秒. 代码实现在duration.hpp中,测试代码:duration_tests.cpp 相关api如下: parse, 将字符串转化成Duration对象 create, 将秒数转化为Duration对象 ns, us, ms, secs, mins, hrs, days, weeks, 返回量词对应的数目 timeval,  返回Duration对象对应的timeval max, Duration所能表示的最长时间 min, Duration所…
stout中实现了LRU cache.cache的成员如下: public: typedef std::list<Key> list; typedef std::tr1::unordered_map< Key, std::pair<Value, typename list::iterator> > map; 可以看到map的第二项除了value之外,又有一个指向key的迭代器,这种设计有利于提高cache LRU操作的效率:当查询某个key时,同时获取value和key…
stout库中为了避免使用NULL带来的风险,统一用None表示空. None类的实现方式如下: struct None {}; 奇怪的是, Nothing类实现方式与None一模一样..让人怀疑作者是不是写重了. struct Nothing {};…
hashmap是std::unordered_map的子类,前者对后者的接口做了进一步封装. hashmap的移动构造函数: hashmap(std::map<Key, Value>&& map) { // NOTE: We're using 'insert' here with a move iterator in order // to avoid copies because we know we have an r-value paramater. std::unord…
stout中大量使用了c++11的特性,而c++11中move和forward大概是最神奇的特性了. 左值和右值的区别 ; // a是左值,0是右值 int b = rand(); // b是左值,rand()是右值 直观理解:左值在等号左边,右值在等号右边 深入理解:左值有名称,可根据左值获取其内存地址,而右值没有名称,不能根据右值获取地址. 2. 引用叠加规则 左值引用A&和右值引用A&& 可相互叠加 A& + A& = A& A& + A&am…
在进行性能测试时,经常需要计算某个函数执行的时长.stout中的Stopwatch类可实现纳秒精度的计时. Stopwatch内部使用timespec记录开始和技术时间.   timeval和timespec稍有不同,有两点: timeval精确到微秒,而timespec精确到纳秒 获取当前时间,timeval对应函数gettimeofday(&tv,NULL), timespec对应函数clock_gettime(CLOCK_REALTIME, &ts); api如下: start, 开…
stout大量使用了c++11的一些新特性,使用这些特性有利于简化我们的代码,增加代码可读性.以下将对一些容器的新特性做一个总结.主要两方面: 容器的初始化,c++11中再也不用手动insert或者push_back来初始化了 容器的遍历,c++11中再也不用使用冗长的迭代器遍历了 容器的emplace,避免了一次赋值构造操作和一次析构操作 增加了unordered_map容器 增加了哈希函数std::hash 让我们一睹为快吧: std::hash #include <functional>…
恶意代码 概述 恶意代码是指故意编制或设置的.对网络或系统会产生威胁或潜在威胁的计算机代码.最常见的恶意代码有计算机病毒(简称病毒).特洛伊木马(简称木马).计算机蠕虫(简称蠕虫).后门.逻辑炸弹等. 特征: 恶意的目的,获取靶机权限.用户隐私等 本身是计算机程序,可以执行,并作用于靶机 通过执行发生作用,一般来说不运行是没问题的 恶意代码分析 在大多数情况下,进行恶意代码分析时,我们将只有恶意代码的可执行文件本身,而这些文件并不是我们人类可读的.为了了解这些文件的意义,你需要使用各种工具和技巧…
今天我们要讲三个类,这三个类应该算比較简单的 HelpLayer类 NumberLayer类 GetLocalScore类 HelpLayer类,主要放了两个图形精灵上去,一个是游戏的名字,一个是提示游戏怎么玩的,就一张图: NumberLayer类,涉及到自己定义字体的制作,我们提取出来的资源里,有非常多数字图片: 如今我们要把它们做成这样子的: 这个跟游戏图片资源差点儿相同,做成这样就能够直接拿来用,省了非常多事情,那怎么做了,这里我们要用到一个叫软件,详细用法和过程,我这里就不介绍了,大家…
本文简单分析了代码的结构.有助于理解. 转:http://www.freebuf.com/news/141442.html 0×01 事件分析 2017年7月19 unamer在其github上发布了一个针对Vmware的虚拟机逃逸的exploit源码,使用C++编写.据称影响了Vmware Workstation 12.5.5以前的版本,并给出了演示过程,实现了从虚拟机到宿主机器的代码执行,弹出了熟悉的计算器.该代码开源后,只需要将执行计算器部分的shellcode替换成其他具有恶意攻击的代码…
Jsoup代码解读之三-Document的输出   Jsoup官方说明里,一个重要的功能就是output tidy HTML.这里我们看看Jsoup是如何输出HTML的. HTML相关知识 分析代码前,我们不妨先想想,“tidy HTML"到底包括哪些东西: 换行,块级标签习惯上都会独占一行 缩进,根据HTML标签嵌套层数,行首缩进会不同 严格的标签闭合,如果是可以自闭合的标签并且没有内容,则进行自闭合 HTML实体的转义 这里要补充一下HTML标签的知识.HTML Tag可以分为block和i…
Android多线程分析之三:Handler,Looper的实现 罗朝辉 (http://www.cnblogs.com/kesalin/) CC 许可,转载请注明出处 在前文<Android多线程分析之二:Thread的实现>中已经详细分析了Android Thread 是如何创建,运行以及销毁的,其重点是对相应 native 方法进行分析,今天我将聚焦于 Android Framework 层多线程相关的类:Handler, Looper, MessageQueue, Message 以及…
1 序言 学习java web的时候很渴望有一份完整的项目给我阅读,而网上的大部分项目拿过来都无法直接用,好不容易找到了一个学生管理系统也是漏洞百出.在此,我将边修改边学习这份代码,并且加上完全的注释,以便日后查阅. 2 项目说明 该项目为常见的学生管理系统,系统用例就不再说明. <待补充> 3 代码分析 1 登录功能 1 首页 index.jsp <%@ page language="java" import="java.util.*" page…
1 lint简介 1.1 概述 lint是随Android SDK自带的一个静态代码分析工具.它用来对Android工程的源文件进行检查,找出在正确性.安全.性能.可使用性.可访问性及国际化等方面可能的bugs和可优化提升的地方. 1.2 lint工作流程 针对我们的项目,通过lint.xml配置lint分析的选项,执行检查后,会针对要分析的issue生成报告. 2 lint使用 有关lint的使用,有以下地方需要理解: 2.1 分析的范围 要对Android项目进行静态分析,首先就是指定要分析…
在正式进入测试之前,进行一定的静态代码分析及code review对代码质量及系统提高是有帮助的,以上为数据证明 Pmd 它是一个基于静态规则集的Java源码分析器,它可以识别出潜在的如下问题:– 可能的bug--空的try/catch/finally/switch块.– 无用代码(Dead code):无用的本地变量,方法参数和私有方法.– 空的if/while语句.– 过度复杂的表达式--不必要的if语句,本来可以用while循环但是却用了for循环.– 可优化的代码:浪费性能的String…
之前SSH框架已经搭建完毕,现在进行实体类的分析和Base类的书写.Base类是抽象类,专门用于继承. 一.实体类关系分析 既然是数据采集系统,首先调查实体(Survey)是一定要有的,一个调查有多个页面(Page),一个页面有多个问题(Question),所以还要有页面和问题实体.参与完成调查之后一定还会生成若干个答案,所以还有答案实体(Answer),当然还有参与的用户(User),管理员是特殊的User,只需要登陆的时候进行判断即可. 分析实体类型是比较简单的,最重要的是设计,怎样设计才能…
章节简言 上一章笔者讲到关于如何加载配置文件里面的package元素节点信息.相信读者到这里心里面对struts2在启动的时候加载相关的信息有了一定的了解和认识.而本章将讲到关于struts2启动成功之后,接受到用户action请求之后如何处理并找到对应的action类.可以说这章是讲述<Struts2 源码分析——调结者(Dispatcher)之执行action>章节之后的事情.即是核心机制图片的蓝色(Struts core)分部的知识点.通过前面几章节的内容至少我们知道了struts2启动…
Asp.net 5的依赖注入注入系列可以参考链接: [Asp.net 5] DependencyInjection项目代码分析-目录 我们在之前讲微软的实现时,对于OpenIEnumerableService与ClosedIEnumerableService抛下没讲,现在我们就将该部分补充完整. 我们回忆ServiceProvider类的构造函数(对外部使用的)中,注册了IEnumerable<>.new OpenIEnumerableService(_table)的关系. public Se…
构建 这里搜集了用来构建应用程序的工具. Apache Maven:Maven使用声明进行构建并进行依赖管理,偏向于使用约定而不是配置进行构建.Maven优于Apache Ant.后者采用了一种过程化的方式进行配置,所以维护起来相当困难. Gradle:Gradle采用增量构建.Gradle通过Groovy编程而不是传统的XML声明进行配置.Gradle可以很好地配合Maven进行依赖管理,并且把Ant脚本当作头等公民. 字节码操作 编程操作Java字节码的函数库. ASM:通用底层字节码操作及…
常用 Java 静态代码分析工具的分析与比较 简介: 本文首先介绍了静态代码分析的基 本概念及主要技术,随后分别介绍了现有 4 种主流 Java 静态代码分析工具 (Checkstyle,FindBugs,PMD,Jtest),最后从功能.特性等方面对它们进行分析和比较,希望能够帮助 Java 软件开发人员了解静态代码分析工具,并选择合适的工具应用到软件开发中. 引言 在 Java 软件开发过程中,开发团队往往要花费大量的时间和精力发现并修改代码缺陷.Java 静态代码分析(static cod…
angular代码分析之异常日志设计 错误异常是面向对象开发中的记录提示程序执行问题的一种重要机制,在程序执行发生问题的条件下,异常会在中断程序执行,同时会沿着代码的执行路径一步一步的向上抛出异常,最终会由顶层抛出异常信息.而与异常同时出现的往往是日志,而日志往往需要记录具体发生异常的模块.编码.详细的错误信息.执行堆栈等,方便问题的快速定位分析.angularjs作为前端的框架,其对异常信息的处理是怎样的呢? 一.定义模块和异常类型 首先每个模块的日志模块编码是一样的,只需要本模块负责初始化一…
在 DependencyInjection项目代码分析4-微软的实现(1)中介绍了“ServiceTable”.“ServiceEntry”.“IGenericService”.“IService”.“IServiceCallSite”,这篇介绍下“IGenericService."IService"."IServiceCallSite"实现类 GenericService类 做为IGenericService的唯一实现类,该类言简意赅,请看代码: internal…
这个系列已经写了5篇,链接地址如下: [Asp.net 5] DependencyInjection项目代码分析 [Asp.net 5] DependencyInjection项目代码分析2-Autofac [Asp.net 5] DependencyInjection项目代码分析3-Ninject [Asp.net 5] DependencyInjection项目代码分析4-微软的实现(1) [Asp.net 5] DependencyInjection项目代码分析4-微软的实现(2) 如果想…
这个系列已经写了6篇,链接地址如下: [Asp.net 5] DependencyInjection项目代码分析 [Asp.net 5] DependencyInjection项目代码分析2-Autofac [Asp.net 5] DependencyInjection项目代码分析3-Ninject [Asp.net 5] DependencyInjection项目代码分析4-微软的实现(1) [Asp.net 5] DependencyInjection项目代码分析4-微软的实现(2) [As…
JavaBean 基础概念.使用实例及代码分析 JavaBean的概念 JavaBean是一种可重复使用的.且跨平台的软件组件. JavaBean可分为两种:一种是有用户界面的(有UI的):另一种是没有用户界面的(无UI的),无UI的JavaBean主要负责处理事务(如数据运算,操纵数据库). JSP通常访问的是后一种JavaBean. JSP与JavaBean搭配使用的优点 使得HTML与Java程序分离,这样便于维护代码. 如果把所有的程序代码都写到JSP网页中,会使得代码繁杂,难以维护.…