* - unsigned root node ID
* - unsigned number of nodes
* - unsigned number of properties
- * - unsigned type (PTYPE_*)
- * - unsigned name atom
+ * - unsigned containing type (PTYPE_*) in its lower 3 bits and
+ * name atom in the upper bits
* - unsigned property value
*
* Unsigned quantities are stored in a compressed format:
unsigned int num_props = n.props.size();
write_unsigned(os, num_props);
for (unsigned int i=0; i<num_props; i++) {
- write_unsigned(os, n.props[i].type);
- write_unsigned(os, n.props[i].name);
+ write_unsigned(os, n.props[i].type | (n.props[i].name << 3));
write_unsigned(os, n.props[i].value);
}
return os;
unsigned int num_props = read_unsigned(is);
n.props.resize(num_props);
for (unsigned int i=0; i<num_props; i++) {
- n.props[i].type = (archive_node::property_type)read_unsigned(is);
- n.props[i].name = read_unsigned(is);
+ unsigned int name_type = read_unsigned(is);
+ n.props[i].type = (archive_node::property_type)(name_type & 7);
+ n.props[i].name = name_type >> 3;
n.props[i].value = read_unsigned(is);
}
return is;
if (has_expression)
os << "(basic * " << e.bp << " = " << e << ")\n";
else
- os << "(no expression)\n";
+ os << "\n";
// Dump properties
vector<property>::const_iterator i = props.begin(), iend = props.end();
friend istream &operator>>(istream &is, archive_node &ar);
public:
- archive_node() : a(*dummy_ar_creator()), has_expression(false) {}
+ archive_node() : a(*dummy_ar_creator()), has_expression(false) {} // hack for cint which always requires a default constructor
archive_node(archive &ar) : a(ar), has_expression(false) {}
archive_node(archive &ar, const ex &expr);
~archive_node() {}