CSElab7RPC攻略

apachecn_飛龍發表於2014-05-28

part A

marshall:
通過觀察可以得知,所有無符號的整形的實現相當於從高位到低位的每個位元組依次呼叫rawbyte,所有的有符號整形都是直接呼叫同一尺寸的無符號整形。
一種實現是呼叫rawbyte4次,另一種是呼叫ushort的過載方法兩次。

unmarshall:
這回引用傳參不能強轉了,所以每個尺寸的無符號和有符號整形寫了兩遍相同的程式碼。
不解釋,直接照搬int的實現就成。

part B

checkduplicate_and_update:

1. 遍歷一遍reply_t的list(reply_window_[clt_nonce]) 對於每個reply_t物件:
1.1 如果xid等於引數xid且cb_present為true,將那個物件的buf和sz賦給引數*b和*sz,返回DONE
1.2 如果xid等於引數xid且cb_present為false,返回INPROGRESS

2. 如果list不為空 且引數xid小於所有reply_t物件的xid 返回FORGOTTEN

3. 刪掉list中所有滿足xid < xid_rep的物件

4. 向list插入一個新的reply_t物件,它的xid為引數xid,cb_present為false 返回NEW

*. 為了刪除和判斷方便,可以把list實現成按照xid升序排列的

add_reply:

1. 遍歷一遍reply_t的list 對於每個reply_t物件:
1.1 如果xid等於引數xid 將引數的b和sz賦給物件的buf和sz 並將物件的cb_present置為true 之後break


相關文章