函数调用

SV中的OOP

梦想与她 提交于 2020-03-14 15:38:18
OOP:Object-Oriented Programming,有两点个人认为适合验证环境的搭建:1)Property(变量)和Method(function/task)的封装,其实是BFM模型更方便的应 用。2)继承(Inheritance)与合成(Composition)非常适合一个架构的搭建。 在SV中,类可以定义在program, module, package中,但是一般一个类或几个相关的类会单独写在一个文件中。最终在program中调用。而且在SV中,所有成员 默认都是public类型的,除非显示的用local/protected来声明。实际上,SV class中的变量应该尽可能的用public并且rand,来增加可控性。 local/protected都可以针对property和method来说明,local表示member只对该class的对象可见,extend出的subclass也是不可见的。 但是该class中non-local的method调用了local的method或者property, inherit之后的method也是可以正常执行的。 protected表示member对该class和它的subclass都是可以见的。 对外部的大环境不可见。 基类的指针可以直接指向扩展类的对象,但是只能调用扩展类中基类的那一部分,

libevent源码剖析

Deadly 提交于 2020-03-14 14:33:40
安装与使用   libevent安装:下载地址: http://libevent.org/ 解压文件:tar -zxvf libevent- 2.1 .8-stable.tar.gz 解压后进入目录,进行配置,把库安装到/usr目录下: ./configure -- prefix= /usr 编译安装:sudo make,sudo make install   libevent将I/O事件、信号事件、定时事件三种事件进行了同一事件源,将所有的就绪事件,放入到激活链表中;然后对激活链表中的事件,调用事件的回调函数执行事件处理 一、event_base   The event_base lies at the center of Libevent; every application will have one.对应的为Reactor实例,使用 libevent 函数之前需要分配一个或者多个 event_base 结构体。每个event_base 结构体持有一个事件集合,可以检测以 确定哪个事件是激活的(相当于epoll红黑树的树根)。   因为不是所有的安插在event_base的事件在调用fork()之后都可以正常工作,所以,如果在使用fork()或者其他相关系统调用启动一个新的进程之后,要想在子进程中使用base变量,但是又想让该base变量是一个全新的没有安插事件的变量

从MACHINE_START开始

[亡魂溺海] 提交于 2020-03-14 03:32:19
注:下面的内容是以linux-2.6.38和mini6410为例进行学习的。 玩过或者移植过arm-linux的都应该知道在/arch/arm目录下有许多与具体处理器相关的目录,当然对于6410的话所对应的目录就是mach-s3c64xx,在里面找到与具体板子相关的文件mach-mini6410.c,没错,就是它。无论是出于想移植到新的内核还是出于想深入学习某一款arm等,对这个文件的学习是必不可少的。这个文件大部分内容是对平台设备(例如串口,LCD,Nand falsh等)的结构体初始化,在这个文件的最后有一个非常重要的宏: 1 MACHINE_START(MINI6410, "MINI6410") 2 /* Maintainer: Ben Dooks <ben-linux@fluff.org> */ 3 .boot_params = S3C64XX_PA_SDRAM + 0x100, 4 5 .init_irq = s3c6410_init_irq, 6 .map_io = mini6410_map_io, 7 .init_machine = mini6410_machine_init, 8 .timer = &s3c24xx_timer, 9 MACHINE_END MINI6410这个宏在/arch/arm/tools/mach-types文件里定义: mini6410

JS-11 (数组函数)

白昼怎懂夜的黑 提交于 2020-03-13 14:41:38
(1)判断: ①判断数组中是否 所有元素 都符合要求 var bool=arr.every( function(elem,i,arr){ return 判断条件 } ) 返回值为true或false 原理 : 1). every 内部自带 for 循环 , 遍历数组中每个元素 2). 每遍历一个元素 , 就自动调用一次回调函数 3). 每次调用回调函数时 :   i. 形参 elem , 会自动获得当前正在遍历的 元素值   ii. 形参 i, 会自动获得当前正在遍历到的 下标 位置   iii. 形参 arr ,会自动获得当前调用 every() 时 . 前的数组对象 arr    ②判断数组中是否包含符合要求的元素 var bool=arr.some(function(elem,i,arr){ return 判断条件 }) 每次循环调用一次回调函数,如果当前元素满足条件,则数组后续的元素不再遍历 (2)遍历: ① forEach arr.forEach(//自带了for循环,遍历数组中每个元素   function(elem,i,arr){ //每遍历一个元素就自动调用一次回调函数     //elem收到当前正在遍历的元素值     //i收到当前正在遍历到的下标位置     //arr收到调用forEach()的.前的数组     /

out 和 ref 之间的区别整理

可紊 提交于 2020-03-13 12:58:36
ref 和 out 都是 C# 中的关键字,所实现的功能也差不多,都是指定一个参数按照引用传递。 对于编译后的程序而言,它们之间没有任何区别,也就是说它们只有语法区别。 总结起来,他们有如下语法区别: 1 、 ref 传进去的参数必须在调用前初始化, out 不必,即: int i; SomeMethod( ref i );// 语法错误 SomeMethod( out i );// 通过 2 、 ref 传进去的参数在函数内部可以直接使用,而 out 不可: public void SomeMethod(ref int i) { int j=i;// 通过 //... } public void SomeMethod(out int i) { int j=i;// 语法错误 } 3 、 ref 传进去的参数在函数内部可以不被修改,但 out 必须在离开函数体前进行赋值。 ref 在参数传递之前必须初始化;而 out 则在传递前不必初始化,且在 ... 值类型与引用类型之间的转换过程称为装箱与拆箱。 总结: 应该说,系统对 ref 的限制是更少一些的。 out 虽然不要求在调用前一定要初始化,但是其值在函数内部是不可见的,也就是不能使用通过 out 传进来的值,并且一定要在函数内赋一个值。或者说函数承担初始化这个变量的责任。 下面谈谈ref和out到底有什么区别: 1 关于重载

转:经典ACM算法

孤街醉人 提交于 2020-03-13 07:16:46
实验一 统计数字问题 实验二 最大间隙问题 实验三 众数问题 实验四 半数集问题 实验五 集合划分问题 实验六 最少硬币问题 实验七 编辑距离问题 实验八 程序存储问题 实验九 最优服务次序问题 实验十 汽车加油问题 实验十一 工作分配问题 实验十二 0-1背包问题 实验十三 最小重量机器设计问题 实验十四 最小权顶点覆盖问题 实验十五 集合相等问题 实验十六 战车问题 实验一 统计数字问题 1、问题描述: 一本书的页码从自然数1 开始顺序编码直到自然数n。书的页码按照通常的习惯编排,每个页码都不含多余的前导数字0。例如,第6 页用数字6 表示,而不是06 或006 等。数字计数问题要求对给定书的总页码n,计算出书的全部页码中分别用到多少次数字0,1, 2,…,9。 2、题目分析: 考虑由0,1,2,…,9组成的所有n位数。从n个0到n个9共有个n位数,在这些n位数中,0,1,2,…,9每个数字使用次数相同,设为。 满足如下递归式: 由此可知,。 据此,可从低位向高位进行统计,再减去多余的0的个数即可。 3、算法设计: 定义数组a[10]存放0到9这10个数出现的次数,个位为第0位,第j位的数字为r。采用while循环从低位向高位统计: a. 统计从个位算起前j位0~9个数; b. 如果j+1位为0,去掉第j+1位补0个数; c. 统计第j+1位出现1~(r-1)个数; d.

转:经典ACM算法

荒凉一梦 提交于 2020-03-13 07:15:47
实验一 统计数字问题 实验二 最大间隙问题 实验三 众数问题 实验四 半数集问题 实验五 集合划分问题 实验六 最少硬币问题 实验七 编辑距离问题 实验八 程序存储问题 实验九 最优服务次序问题 实验十 汽车加油问题 实验十一 工作分配问题 实验十二 0-1背包问题 实验十三 最小重量机器设计问题 实验十四 最小权顶点覆盖问题 实验十五 集合相等问题 实验十六 战车问题 实验一 统计数字问题 1、问题描述: 一本书的页码从自然数1 开始顺序编码直到自然数n。书的页码按照通常的习惯编排,每个页码都不含多余的前导数字0。例如,第6 页用数字6 表示,而不是06 或006 等。数字计数问题要求对给定书的总页码n,计算出书的全部页码中分别用到多少次数字0,1, 2,…,9。 2、题目分析: 考虑由0,1,2,…,9组成的所有n位数。从n个0到n个9共有个n位数,在这些n位数中,0,1,2,…,9每个数字使用次数相同,设为。 满足如下递归式: 由此可知,。 据此,可从低位向高位进行统计,再减去多余的0的个数即可。 3、算法设计: 定义数组a[10]存放0到9这10个数出现的次数,个位为第0位,第j位的数字为r。采用while循环从低位向高位统计: a. 统计从个位算起前j位0~9个数; b. 如果j+1位为0,去掉第j+1位补0个数; c. 统计第j+1位出现1~(r-1)个数; d.

JavaScript模块化开发一瞥

|▌冷眼眸甩不掉的悲伤 提交于 2020-03-13 01:43:57
对于那些正在构建大型应用程序,而对JavaScript不甚了解的开发者而言,他们最初必须要面对的挑战之一就是如何着手组织代码。起初只要在 <script> 标记之间嵌入几百行代码就能跑起来,不过很快代码就会变得一塌糊涂。而问题是,JavaScript没有为组织代码提供任何明显帮助。从字面上看,C#有 using ,Java有 import ——而JavaScript一无所有。这迫使JavaScript编写者试验不同的约定,并使用现有的语言创建了一些切实可行的方法来组织大型JavaScript应用程序。 各种模式(patterns)、工具(tools)及惯例(practices)会形成现代JavaScript的基础,它们必将来自于语言本身实现之外。 —— Rebecca Murphy 模块模式(The Module Pattern) 用于解决组织代码问题、使用最为广泛的方法之一是 模块模式(Module Pattern) 。我尝试在下面解释一个基本示例,并讨论其若干特性。要想阅读更精彩的说明,并了解用尽各种不同方法的怪人,那么请参阅Ben Cherry的帖子—— JavaScript Module Pattern: In-Depth(深入理解JavaScript模块模式) 。 (function(lab49) { function privateAdder(n1, n2) {

Activity窗口及视图的创建

∥☆過路亽.° 提交于 2020-03-12 12:41:06
Activity是Android应用程序的载体,允许用户在其上创建一个用户界面,并提供用户处理事件的API。但它并不是显示视图,实际上Activity调用了PhoneWindow的setContentView()方法,然后加载视图,将视图放到这个Window上,而Activity其实创建的时候初始化的是Window(PhoneWindow)。Activity其实是个控制单元,即可视的人机交互界面。打个比方,Activity是一个工人,它来控制Window;Window是一面显示屏,用来显示信息;View就是要显示在显示屏上的信息,这些View都是层层重叠在一起(通过infalte()和addView())放到Window显示屏上的。而LayoutInfalter就是用来生成View的一个工具,XML布局文件就是用来生成View的原料。 Activity类的成员变量mWindow的类型为Window,它用来描述一个应用程序窗口。通过这个成员变量,每一个Activity组件就都会有一个对应的Window对象,即一个对应的应用程序窗口。 Window类是一个抽象类,提供了绘制窗口的一组通用API。可以将之理解为一个载体,各种View在这个载体上显示。 Window类有一个类型为Context的成员变量mContext,它指向的是一个Activity对象

第一篇博客 C+++知识点总结一

眉间皱痕 提交于 2020-03-12 11:58:32
1.成员 1.比较特殊的成员类型:protected. 保护成员在本类中和private类型的成员作用一模一样。区别在于保护成员可以由本类的派生类的成员函数访问,但是私有成员在其派生类中无法访问。 2.成员函数的定义 成员函数如果在类外定义,那么函数声明的参数表可以只写参数类型,但是在类外定义时必须给出参数名。 3.内联成员函数 (1)隐式定义内联成员函数 直接在类内定义的成员函数 (2)显式定义内联成员函数 用关键字inline声明(在声明和定义的语句句子开头加inline),此时可以在类内声明,类外定义。声明、定义都要在句首加inline. (3)内联函数 内联函数的代码会在编译时插入到每一个调用它的地方。这种做法会提高运行效率。但是只有很简短的代码才实用。 2.对象(成员访问,初始化方式) 1.对象成员的访问方式: 例如对对象d中成员year的访问 d.year (*p).year p->year 2.对象的初始化 (1) class complex { public: double real; //数据成员是public时才能使用这种方法 double imag; }; complex c={1.1,2.2}; (2)用构造函数(作用:为对象分配空间,进行初始化) 例如: ... class complex { public: complex(int a,int b)