+
+/**
+ * Saving data fields:
+
+ ulong n;
+ ulong *data; //here is the bit-arra
+ */
+void BitRank::Save(FILE *file)
+{
+ if (std::fwrite(&(this->n), sizeof(ulong), 1, file) != 1)
+ throw std::runtime_error("BitRank::Save(): file write error (n).");
+
+ for (ulong offset = 0; offset < integers; ++offset)
+ if (std::fwrite(this->data + offset, sizeof(ulong), 1, file) != 1)
+ throw std::runtime_error("BitRank::Save(): file write error (data).");
+}
+
+BitRank::BitRank(FILE *file)
+{
+ owner = 1;
+ if (std::fread(&(this->n), sizeof(ulong), 1, file) != 1)
+ throw std::runtime_error("BitRank::Load(): file read error (n).");
+
+ ulong aux=(n+1)%W;
+ if (aux != 0)
+ integers = (n+1)/W+1;
+ else
+ integers = (n+1)/W;
+
+ data = new ulong[integers];
+ for (ulong offset = 0; offset < integers; ++offset)
+ if (std::fread(this->data + offset, sizeof(ulong), 1, file) != 1)
+ throw std::runtime_error("BitRank::Load(): file read error (data).");
+
+ BuildRank();
+}