全部博文(436)
分类: 系统运维
2010-11-04 23:57:48
王辉组——第五周进度报告
小组成员:李筱 李紫璇 王辉 王培 肖笑
一、 本周进度和总结
本周大家都在积极读代码,而且读得很认真,首先要给予肯定和鼓励。
在阅读的过程中,大家也遇到了大大小小、形形色色的问题。经过个人自己查阅相关书籍和网上搜索解决办法,很多问题已经解决,并且,在求助的过程中,大家的知识面都得到了不同程度的扩宽。这些知识都是在实践中才能学到的,学到的才是深刻的,学到的才是自己的。
二、 组员分工
C++组继续阅读sqlite下的android文件中的代码:
王辉 sqlite3_android.cpp
sqlite3_android.h
李紫璇PhoneticStringUtilsTest.cpp
PhonebookIndex.h
肖笑 PhoneticStringUtils.cpp
PhoneticStringUtils.h
Java组:
李筱 iofos_assistant下的未完成代码,如Runing.java,ShowInfo.java,Software.java尽力去读,每段代码都不是很长;
王培 iofos_assistant下的Util文件夹中的文件;
于曼 iofos_assistant下的eoeInfoAssistant.java,FSExplore.java, Hardware.java
<能读多少尽量读>
三、小组成员个人总结
1081000036 王辉
本周我的任务是读sqlite3_android.cpp这个程序,程序很长,还没读完,而且感觉像但有难度。比如刚一开始,程序在我的电脑里运行不了,原因是遇到了#include
#define unistd.h
#include
#include
#endif /* _UNISTD_H */
但是依旧运行不了,应该就得到Unix的操作系统中才能运行吧。然后我就继续阅读之后的程序了。后面的程序都是类比的定义,到真正的主程序好友很多定义,这些还没搞得很清楚,周六日继续加油~
1081000040 肖笑
在这一周中我所阅读的代码主要是PhoneticStringUtils.cpp。主要讲的是一些日文中那种片假名,平假名和50音符的一些转换,没有涉及什么没有见过的函数,都是一些简单的switch语句或者条件句,所涉及到的函数类型有布尔,静态函数等,都是以前学过的,才发现原来有的代码用的还是大一时学过的语句很亲切,可又很陌生,因为太久远有点忘了,让我从拾起以前丢掉的知识,因为这个代码有点长,这两周的任务是阅读PhoneticStringUtils.cpp和PhoneticStringUtils.h。所以没有完全读完还有一些,下周继续努力。这次的收获是让我巩固了以前的知识,和查找资料的能力,因为有一些语句都有些模糊了,所以利用网上资源发现了一些关于c++的知识库,很有帮助。对于bool *next_is_consumed 的定义有点搞不太懂,这是这周遗留的问题,等待下周能够解决。
1081000037王培
这周的主要任务放在了代码阅读工作上,大量的代码阅读工作需要时间和精力去完成,这周我主要阅读了一部分代码,其中发现了许多很相似的函数,为代码分析节省了许多时间,过程中遇到的问题利用JDK6API中文参考查看了一些类的用法功能,查看之前学过的面向对象JAVA知识的书,复习了以前学过的知识。通过网络深入的了解代码阅读的相关知识。努力把代码阅读做得更好。
1081000022 李筱
这周,我的主要工作是继续阅读和理解infos_assistant文件夹下的Java文件。这周阅读的是Runing.java的这个文件。在阅读的过程中,我发现其实在每个java文件的开始都是在引入库的内容,基本上这段内容也没有什么可阅读性,在之后的段落中开始构造所需要的函数结构,最后的段落则是打印输出的部分。尤其是对于构建网站或某个网页的的问题上,更是遵循了这样的规律。遇到问题的时候,我一般都选择与同是学习java的同组同学讨论,来达到真正理解这段代码的目的。在未来的两周,我会继续阅读剩下的几个代码文件。
1081000044 于曼
又一周枯燥的读代码任务,对于编程很不好的我来说,真是很大的挑战。不过从这次读代码当中,我真的找到上学期的Java书,把extends和implements好好的看了一遍,之前的我看到这两个词只会想到继承和接口而已,当拿到程序的时候,真正读程序的时候,却发现,这两个词什么作用也没起到,让读程序无法进行下去,例如:public class FSExplorer extends Activity implements OnItemClickListener 当我认真读书和上网查资料之后才发现,extends是继承父类,只要那个类不是声明为final或者那个类定义为abstract的就能继承,java中不支持多重继承,但是可以用接口来实现,这样就要用到implements,继承只能继承一个类,但implements可以实现多个接口,用逗号分开就行了。
一周的时间读了两个程序,一个是关于读取硬件信息的,一个是关于资源管理的,还有一个关于系统信息的还没有读完,系统信息的语句很简短,就是没有从中获取到什么信息,语句有些不太熟悉。
看着我们的小组一点一点的出东西,更有信心将这个作业做好,让我们共同努力,向成功迈进!
1081000024李紫璇
花了两周的时间来读PhoneNumberUtils的代码,只是初步知道这个具有对电话号码分类的功能,可以对一串数字和字符进行提取分析判断。分为isDialable(可拨打的)isSeparator(分离的)等类。
代码解读
//判断是不是合法的国家的号码编码
static bool isCountryCallingCode(int ccc_candidate)
//返回输入的数字
static int tryGetISODigit (char ch)
//如果字符是正确的,则可拨打
static bool isDialable(char ch)
{
return ('0' <= ch && ch <= '9') || ch == '*' || ch == '#' || ch == '+';
}
//略去国家前缀
static bool tryGetTrunkPrefixOmittedStr(const char *str, size_t len,
const char **new_ptr, size_t *new_len)
//检查前缀是不是可以忽略的
static bool checkPrefixIsIgnorable(const char* ch, int i)
}
//比较a和b的电话号码
static bool phone_number_compare_inter(const char* const org_a, const char* const org_b,
bool accept_thailand_case)
先写这些代码,其他的我也不是很懂呢,下周继续。。。我觉得自己c++基础太薄弱了,看着很费劲。。。
四、 下周展望
下周大家把分到的代码继续读完,并且总结自己这几周的工作成果,并且相互交流,相互讲解一下各自读过的代码,互相学习。并且为结题做准备。希望大家有始有终,始终带着开始时的热情,直到最后。
五、部分代码阅读实例:
#include
#include
#include "PhoneticStringUtils.h"
#include
// We'd like 0 length string last of sorted list. So when input string is NULL
// or 0 length string, we use these instead.
#define CODEPOINT_FOR_NULL_STR 0xFFFD //定义CODEPOINT_FOR_NULL_STR 为 0xFFFD
#define STR_FOR_NULL_STR "\xEF\xBF\xBD"
#define MAX_CODEPOINTS 128 // 定义一个对任何一个字母字符的最大代码点为128
namespace android {
//namespace,是指标识符的各种可见范围。
//从halfwidth katakana(即Unicode 半角和全角字符块的半角片假名子集常量。)中得到一个平假名
// 定义一个静态函数,并设置其中的参数,达到初始化的作用
static int GetHiraganaFromHalfwidthKatakana(char32_t codepoint, // codepoint是一个32位的字符类型的代码点
char32_t next_codepoint,// next_codepoint是下一个32位的字符类型的代码点
bool *next_is_consumed) {//设置一个布尔类型的
if (codepoint < 0xFF66 || 0xFF
return codepoint;
}
switch (codepoint) {//使用开关语句直接处理多个分支 ,这个语句主要是为了输出日文中的50音符,其中饱含了一些条件语句。
case 0xFF66: // wo
return 0x3092;
case 0xFF67: // xa
return 0x3041;
case 0xFF68: // xi
return 0x3043;
case 0xFF69: // xu
return 0x3045;
case 0xFF
return 0x3047;
case 0xFF6B: // xo
return 0x3049;
case 0xFF
return 0x3083;
case 0xFF6D: // xyu
return 0x3085;
case 0xFF6E: // xyo
return 0x3087;
case 0xFF
return 0x3063;
case 0xFF70: // -
return 0x30FC;
case 0xFF
return 0x
case 0xFF9D: // n
return 0x3093;
break;
default: {
if (0xFF71 <= codepoint && codepoint <= 0xFF75) {//codepoint大于等于0xFF71并且小于等于0xFF75时:
// a, i, u, e, o
if (codepoint == 0xFF73 && next_codepoint == 0xFF9E) {//当codepoint 等于0xFF73并且下一个代码点等于0xFF9E时,
if (next_is_consumed != NULL) {//如果next_is_consumed不为空
*next_is_consumed = true;//则指针所指向的next_is_consumed为true
}
return 0x3094; // vu //返回0x3094
} else {//否则返回0x3042 + (codepoint - 0xFF71) * 2
return 0x3042 + (codepoint - 0xFF71) * 2;
}
} else if (0xFF76 <= codepoint && codepoint <= 0xFF81) {//codepoint大于等于0xFF76并且小于等于0xFF81时
// ka - chi
if (next_codepoint == 0xFF9E) {当下一个代码点等于0xFF9E时
// "dakuten" (voiced mark)
if (next_is_consumed != NULL) {//如果next_is_consumed不为空
*next_is_consumed = true;//则next_is_consumed所指向的指针为true
}
return 0x304B + (codepoint - 0xFF76) * 2 + 1;//返回值
} else {
return 0x304B + (codepoint - 0xFF76) * 2;//返回值
}
} else if (0xFF82 <= codepoint && codepoint <= 0xFF84) {//codepoint大于等于0xFF82并且小于等于0xFF84时
// tsu, te, to (skip xtsu)
if (next_codepoint == 0xFF9E) {//如果下一个代码点等于0xFF9E
// "dakuten" (voiced mark)
if (next_is_consumed != NULL) {//如果next_is_consumed不为空
*next_is_consumed = true;//则next_is_consumed所指向的指针为true
}
return 0x3064 + (codepoint - 0xFF82) * 2 + 1;//返回值
} else {
return 0x3064 + (codepoint - 0xFF82) * 2;//返回值
}
} else if (0xFF85 <= codepoint && codepoint <= 0xFF89) {//codepoint大于等于0xFF85并且小于等于0xFF89时
// na, ni, nu, ne, no
return 0x
} else if (0xFF
// ha, hi, hu, he, ho
if (next_codepoint == 0xFF9E) {//如果下一个代码点等于0xFF9E
// "dakuten" (voiced mark)
if (next_is_consumed != NULL) {//如果next_is_consumed不为空
*next_is_consumed = true;//则next_is_consumed所指向的指针为true
}
return 0x
} else if (next_codepoint == 0xFF
// "han-dakuten" (half voiced mark)
if (next_is_consumed != NULL) {//如果next_is_consumed不为空
*next_is_consumed = true;//则next_is_consumed所指向的指针为true
}
return 0x
} else {
return 0x
}
} else if (0xFF
// ma, mi, mu, me, mo
return 0x307E + (codepoint - 0xFF
} else if (0xFF94 <= codepoint && codepoint <= 0xFF96) {//codepoint大于等于0xFF94并且小于等于0xFF96时
// ya, yu, yo
return 0x3084 + (codepoint - 0xFF94) * 2;//返回值
} else if (0xFF97 <= codepoint && codepoint <= 0xFF9B) {//codepoint大于等于0xFF97并且小于等于0xFF9B时
// ra, ri, ru, re, ro
return 0x3089 + (codepoint - 0xFF97);//返回值
}
// Note: 0xFF
} // end of default
}
return codepoint;//返回代码点
}
//假设输入平假名,转换为“正常化”平假名。
static int GetNormalizedHiragana(int codepoint) {//定义一个名为“正常化”的平假名的静态函数
if (codepoint < 0x3040 || 0x
return codepoint; //返回codepoint
}
// TODO: should care (semi-)voiced mark (0x3099, 0x
// Trivial kana conversions.
// e.g. xa => a
switch (codepoint) {//使用开关语句直接处理多个分支 ,这个语句主要是为了将输入的平假名日文中的平假名,
//转化为正确的平假名。
case 0x3041:
case 0x3043:
case 0x3045:
case 0x3047:
case 0x3049:
case 0x308E: // xwa
return codepoint + 1;//当代码点等于0x3041,0x3043,0x3045,0x3047,0x3049,0x308E使代码点加一:
case 0x3095: // xka //当代码点等于0x3095时使代码点等于0x304B
return 0x304B;
case 0x3096: // xku //当代码点等于 0x309时使代码点等于0x
return 0x
default:
return codepoint; //返回代码点
}
}
static int GetNormalizedKana(char32_t codepoint,// codepoint是一个32位的字符类型的代码点
char32_t next_codepoint,// next_codepoint是下一个32位的字符类型的代码点
bool *next_is_consumed) {//设置一个布尔类型的指针向量
//首先转换Unicode 半角和全角字符块的半角片假名子集常量和全角片假名到平假名
if (0x
//另全形平假名片假名相同
// Make fullwidth katakana same as hiragana.
// 96 == 0x
codepoint = codepoint - 96;//代码点-96
} else {
//将函数GetHiraganaFromHalfwidthKatakana中的结果传参给codepoint
codepoint = GetHiraganaFromHalfwidthKatakana(
codepoint, next_codepoint, next_is_consumed);
}
// Normalize Hiragana.
return GetNormalizedHiragana(codepoint); //将传参(即codepoint)给函数GetNormalizedHiragana
}
int GetNormalizedCodePoint(char32_t codepoint,// codepoint是一个32位的字符类型的代码点
char32_t next_codepoint,// next_codepoint是下一个32位的字符类型的代码点
bool *next_is_consumed) {//设置一个布尔类型的指针向量
if (next_is_consumed != NULL) {//如果next_is_consumed不为空
*next_is_consumed = false;//则next_is_consumed所指向的指针为false
}
if (codepoint <= 0x0020 || codepoint == 0x3000) {//当codepoint小于等于0x0020或者等于0x3000时
// Whitespaces. Keep it as is. //即设置空格键的代码
return codepoint;
} else if ((0x0021 <= codepoint && codepoint <= 0x007E) ||//当codepoint大于等于0x0021 并且小于等于0x007E或者
(0xFF01 <= codepoint && codepoint <= 0xFF5E)) { //大于等于0xFF01并且小于等于0xFF5时
// Ascii and fullwidth ascii. Keep it as is
return codepoint; // 返回代码点
} else if (codepoint == 0x02DC || codepoint == 0x
// tilde
return 0xFF5E; //返回值
} else if (codepoint <= 0x3040 || //codepoint小于等于0x3040 或者
(0x3100 <= codepoint && codepoint < 0xFF00) ||//大于等于0x3100并且小于等于0xFF00或者
codepoint == CODEPOINT_FOR_NULL_STR) { //等于0xFFFD
return codepoint; //返回codepoint值
}
return GetNormalizedKana(codepoint, next_codepoint, next_is_consumed);
//传参(即codepoint, next_codepoint, next_is_consumed)给函数GetNormalizedKana
}