Object
构造函数
1 | object_all = 0; |
置0,创建一个新对象
GetId()
先通过 object_all & 0xff00000000000000
获取前八位的二进制码,其他位清零,然后再右移56位,即64-56=8.所获取的tmp即代表着物品的id.
SetId()
先通过object_all = object_all & 0x00ffffffffffffff
将原来的object其他位保留,只消除原来的id位。
ulonglong(x) << 56
其中x为输入,左移56位,获得 0x_ _00000000000000
的形式。
最后,通过 object_all = object_all | (ulonglong(x) << 56)
将x的id位和原object的其他位保留,即完成了物品id的修改(设置)
其他属性的get和set
同理上面id的设置:
get都是先按位与运算,获取该属性的某一段二进制编码,再右移指定位数,获取属性的二进制码。
set都是先消除原来的属性位的二进制码,然后再将新的输入转换为64位形式,与原来的object按位或运算,结合了属性位和其他位,完成了属性的设置。
Clear()
1 | object_all = 0; |
与构造函数一样,都是置0,清除。
重载
1 | Object::operator<(const Object &x) const |
比较符重载,便于后面比较物品的优先级。
1 | std::ostream & operator<< (std::ostream &os, const Object &obj) |
输出符<<
重载,便于后面直接打印物品的所有属性,而不需要一个个单独调用get函数。