精華區beta EE_DSnP 關於我們 聯絡資訊
不好意思 我也想問一些很基本的問題...>"< ※ 引述《ric2k1 (Ric)》之銘言: : 9. All the operations on BddNodeInt* need to go through BddNode --- : * In the BddNode constructor, we increase the reference count of the : BddNode::_node. So if a BddNode variable is declared, the reference : count of its associated BddNodeInt* will be incremented by 1. : * In the BddNode descructor, we decrease the reference count of the : BddNode::_node. So if the program goes out of the scope of a certain : BddNode variable, the reference count of its BddNodeInt* will be : decremented by 1. : * In the BddNode assignment '=' operator, for example, f = g, we first : decrease the reference count of "f._node", and then increase the : reference count of "g._node". Of course, we will asssign : "f._node = g._node" Q1: 我對 f = g 的領會是 f node 指向(還是應該說是連到?) g node 可以了解 g 的ref count要加1 但是為何 f 的ref count也要減1呢 f 本來的架構應該不會改變不是嗎? : 13. So we will take the advanatage of the fact that the pointer addresses are : multiplier of 4, and we can use the lowest two bits to record the edge : information. We use the lowest 1 bit to record the INVERSION. : 14. To use the lower bits of a pointer variable, we need to conver it to a : size_t variable, such as: : v = size_t(n); : and then the edge information can be added to it by v = v + 1. : 15. Combining the above, we redefine the classes BddNode and BddNodeInt as... : class BddNode { : size_t _nodeV; // to hold BddNodeInt* and 1-bit edge info : }; : class BddNodeInt { : BddNode _left; : BddNode _right; : unsigned _level : 16; : unsigned _refCount : 15; : unsigned _visited : 1; : }; Q2: 所以我可以把 size_t _nodeV 看成BddNodeInt* _node 有一樣功能的data member 然後 BddNode::getBddNodeInt() 就是一個converter 只是有點看不懂 BDD_NODE_PTR_MASK的定義 ((UNIT_MAX >> BDD_EDGE_BITS) << BDD_EDGE_BITS 是讓這個 _nodeV 變成一個合理的 pointer address? Q3: 在前面幾篇有同學問到 BddNode::_one 和 BddNode::_zero 我比較疑問的是在 BddManager::init()中 BddNode::_one = BddNode(BddNodeInt::_terminal, BDD_POS_EDGE); 如果這裡 _terminal = 0 那當呼叫到 BddNode::BddNode(BddNodeInt* n, BDD_EDGE_FLAG f) 時 其中的 assert(n!=0) 不是會有問題嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.109.223.18