JSVM 源码剖析(1) 宏

16 views
Skip to first unread message

volvet

unread,
Jul 19, 2008, 10:48:43 PM7/19/08
to 闲敲棋子落灯花
(准备读读JSVM的代码, 写点体会)

JSVM的作者大概从没考虑过代码的可读性吧 . 跟H264的参考代码JM一样, JSVM的代码也是难以理解.

其中有不少古怪的宏,大概让人头痛吧. 不过细细看去, 还是有规律可循的.

本文讨论的宏定义于jsvm/h264extension/inc/macros.h



大部分宏的开头字母是R , 这次R的含义是 Return

比如 RERR , 就是 Return 一个错误值 , 该值定义于ERR 类中的m_nERR.

不在开头位置的字母R , 此时的含义是该宏返回的值并非错误值 , 而是宏所输入的参数

retVal .

比如 ROFR (exp, retVal) 的函数是 if ( !exp ) Return retVal

字母 O , 其含义是判断宏的输入参数 exp 的意思 F 的含义是 Fasle, T 的含义是 TRUE

比如 ROF(exp) 其含义就是 if( !exp ) ERRR

ROT(exp) 其含义为 if( exp ) ERRR

字母 S , 一般位于宏的末尾 , 其含义是无 Assert 操作 .

前面所说的宏 , 除了已经说明的含义外, 还有一个操作是 Assert( 0 )

但是 如果 宏的尾巴上加了S , 那这个宏不会 Assert( 0 )

好了 这下大部分宏的意思就可以看懂了

RERR , 就是 ASSERT (0 ) ; Return ERR值

ROF(exp) 就是 if ( !exp ) { ASSERT (0); RERR }

ROFS(exp) 就是 if( !exp ) { RERR }

ROT(exp) 就是 if( exp ) { ASSERT(0); RERR }

ROTS( exp ) 就是 if ( exp ) { ERRR }

ROFR(exp,retVal) 就是 if( !exp ) { ASSERT(0) ; Return retVal; }

ROFRS(exp, retVal) 就是 if( !exp ) { Return retVal; }



其他大致如此 .

另外还有几个重要的 , 就是 NOK , 就是要检查值是否等于 ERR 中定义的 m_nOK

比如 RNOK(exp ) 就是 if( exp != OK ){ Assert(0); return exp;}

RNOKR(exp,retVal) 就是 if( exp != OK ) { Assert(0); return retVal; }

还有一个是 A , A 表示 Assert

比如 AF 就是 Assert( False )

ANOK(exp) 就是 if( exp != OK ) { Assert(0) }

AOF( exp ) : if( !exp ) { Assert(0) }

AOT( exp) : if( exp ) { Assert( 0 ) }

好了 那些难解的宏 大致就这些了 .

Reference

JSVM 9_13_1
Reply all
Reply to author
Forward
0 new messages