Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2208705
  • 博文数量: 436
  • 博客积分: 9833
  • 博客等级: 中将
  • 技术积分: 5558
  • 用 户 组: 普通用户
  • 注册时间: 2010-09-29 10:27
文章存档

2013年(47)

2012年(79)

2011年(192)

2010年(118)

分类: 系统运维

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 ,后来查资料了解到unistd的意思是Unix   Standard的意思,里面定义的宏一类的东西都是为了Unix标准服务的(一般来说包括了POSIX的一些常量……),看来我的电脑没有这个操作系统还是运行不了这个程序的。尽管找到了解决办法/*#ifndef  unistd.h

                  #define   unistd.h 

                  #include  

                  #include  

                  #endif   /*   _UNISTD_H   */

但是依旧运行不了,应该就得到Unix的操作系统中才能运行吧。然后我就继续阅读之后的程序了。后面的程序都是类比的定义,到真正的主程序好友很多定义,这些还没搞得很清楚,周六日继续加油~

 

1081000040 肖笑

在这一周中我所阅读的代码主要是PhoneticStringUtils.cpp。主要讲的是一些日文中那种片假名,平假名和50音符的一些转换,没有涉及什么没有见过的函数,都是一些简单的switch语句或者条件句,所涉及到的函数类型有布尔,静态函数等,都是以前学过的,才发现原来有的代码用的还是大一时学过的语句很亲切,可又很陌生,因为太久远有点忘了,让我从拾起以前丢掉的知识,因为这个代码有点长,这两周的任务是阅读PhoneticStringUtils.cppPhoneticStringUtils.h。所以没有完全读完还有一些,下周继续努力。这次的收获是让我巩固了以前的知识,和查找资料的能力,因为有一些语句都有些模糊了,所以利用网上资源发现了一些关于c++的知识库,很有帮助。对于bool *next_is_consumed 的定义有点搞不太懂,这是这周遗留的问题,等待下周能够解决。

 

1081000037王培

这周的主要任务放在了代码阅读工作上,大量的代码阅读工作需要时间和精力去完成,这周我主要阅读了一部分代码,其中发现了许多很相似的函数,为代码分析节省了许多时间,过程中遇到的问题利用JDK6API中文参考查看了一些类的用法功能,查看之前学过的面向对象JAVA知识的书,复习了以前学过的知识。通过网络深入的了解代码阅读的相关知识。努力把代码阅读做得更好。

 

 

1081000022  李筱

这周,我的主要工作是继续阅读和理解infos_assistant文件夹下的Java文件。这周阅读的是Runing.java的这个文件。在阅读的过程中,我发现其实在每个java文件的开始都是在引入库的内容,基本上这段内容也没有什么可阅读性,在之后的段落中开始构造所需要的函数结构,最后的段落则是打印输出的部分。尤其是对于构建网站或某个网页的的问题上,更是遵循了这样的规律。遇到问题的时候,我一般都选择与同是学习java的同组同学讨论,来达到真正理解这段代码的目的。在未来的两周,我会继续阅读剩下的几个代码文件。

                       

1081000044 于曼

  又一周枯燥的读代码任务,对于编程很不好的我来说,真是很大的挑战。不过从这次读代码当中,我真的找到上学期的Java书,把extendsimplements好好的看了一遍,之前的我看到这两个词只会想到继承和接口而已,当拿到程序的时候,真正读程序的时候,却发现,这两个词什么作用也没起到,让读程序无法进行下去,例如: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      // String8.h:定义表示单字节字符串的类String8,并包含了从String16转换功能

 

// 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 || 0xFF9F < codepoint) {// codepoint小于0xFF6 或者大于0xFF9F时, 返回codepoint

        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 0xFF6A: // xe

            return 0x3047;

        case 0xFF6B: // xo

            return 0x3049;

        case 0xFF6C: // xya

            return 0x3083;

        case 0xFF6D: // xyu

            return 0x3085;

        case 0xFF6E: // xyo

            return 0x3087;

        case 0xFF6F: // xtsu

            return 0x3063;

        case 0xFF70: // -

            return 0x30FC;

        case 0xFF9C: // wa

            return 0x308F;

        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_consumedtrue

                    }

                    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 0x306A + (codepoint - 0xFF85);//返回值

            } else if (0xFF8A <= codepoint && codepoint <= 0xFF8E) {//codepoint大于等于0xFF8A并且小于等于0xFF8E

                // 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 0x306F + (codepoint - 0xFF8A) * 3 + 1;//返回值

                } else if (next_codepoint == 0xFF9F) {//如果下一个代码点等于0xFF9F

                    // "han-dakuten" (half voiced mark)

                    if (next_is_consumed != NULL) {//如果next_is_consumed不为空

                        *next_is_consumed = true;//next_is_consumed所指向的指针为true

                    }

                    return 0x306F + (codepoint - 0xFF8A) * 3 + 2;//返回值

                } else {

                    return 0x306F + (codepoint - 0xFF8A) * 3;//返回值

                }

            } else if (0xFF8F <= codepoint && codepoint <= 0xFF93) {//codepoint大于等于0xFF8F并且小于等于0xFF93

                // ma, mi, mu, me, mo

                return 0x307E + (codepoint - 0xFF8F);//返回值

            } 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: 0xFF9C, 0xFF9D are handled above

        } // end of default

    }

 

    return codepoint;//返回代码点

}

 

//假设输入平假名,转换为“正常化”平假名。

static int GetNormalizedHiragana(int codepoint) {//定义一个名为“正常化”的平假名的静态函数

    if (codepoint < 0x3040 || 0x309F < codepoint) {  //codepoint小于0x3040或者大于0x309F

        return codepoint;                          //返回codepoint

    }

 

    // TODO: should care (semi-)voiced mark (0x3099, 0x309A).

 

    // 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;//当代码点等于0x30410x30430x30450x30470x30490x308E使代码点加一:

        case 0x3095: // xka      //当代码点等于0x3095时使代码点等于0x304B

            return 0x304B;

        case 0x3096: // xku      //当代码点等于 0x309时使代码点等于0x304F

            return 0x304F;

        default:

            return codepoint;    //返回代码点

    }

}

 

static int GetNormalizedKana(char32_t codepoint,// codepoint是一个32位的字符类型的代码点

                             char32_t next_codepoint,// next_codepoint是下一个32位的字符类型的代码点

                             bool *next_is_consumed) {//设置一个布尔类型的指针向量

      //首先转换Unicode 半角和全角字符块的半角片假名子集常量和全角片假名到平假名

 

    if (0x30A1 <= codepoint && codepoint <= 0x30F6) {//codepoint小于等于0x30F6并且大于等于0x30A1

             //另全形平假名片假名相同

        // Make fullwidth katakana same as hiragana.

        // 96 == 0x30A1 - 0x3041c

        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 == 0x223C) {//codepoint等于0x02DC或者0x223C

        // 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

}

 

 

 

阅读(1714) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~