Skip to content

Instantly share code, notes, and snippets.

@wwiv
Created February 2, 2018 04:33
Show Gist options
  • Save wwiv/f7874ab79e184c25f90529a4551efa0c to your computer and use it in GitHub Desktop.
Save wwiv/f7874ab79e184c25f90529a4551efa0c to your computer and use it in GitHub Desktop.
class qscan_bitfield {
public:
qscan_bitfield(uint32_t* q, size_t max_size) : q_(q), max_size_(max_size) {}
~qscan_bitfield() = default;
void set(int n) {
q_[n / 32] |= (1L << (n % 32));
}
void clear(int n) {
q_[n / 32] &= ~(1L << (n % 32));
}
bool test(int n) const {
return q_[n / 32] & (1L << (n % 32));
}
void flip(int n) {
q_[n / 32] ^= (1L << (n % 32));
}
private:
uint32_t* q_;
size_t max_size_;
};
class BaseUserQScan {
public:
BaseUserQScan(uint32_t* q, int qscan_length, int max_subs, int max_dirs);
BaseUserQScan(int qscan_length, int max_subs, int max_dirs);
~BaseUserQScan() = delete;
qscan_bitfield& subs() { return subs_; };
qscan_bitfield& dirs() { return dirs_; };
uint32_t lastread_pointer(int n) const { return lastread_pointer_[n]; }
void lastread_pointer(int n, uint32_t val) { lastread_pointer_[n] = val; }
uint32_t* qsc() { return qscan_.get(); }
private:
std::unique_ptr<uint32_t[]> qscan_;
uint32_t* newscan_dir_{};
uint32_t* newscan_sub_{};
uint32_t* lastread_pointer_{};
qscan_bitfield subs_;
qscan_bitfield dirs_;
};
// Experimental SDK class for working with QScan data.
class UserQScan : public BaseUserQScan {
public:
UserQScan(const std::string& filename, int user_number, int qscan_length, int max_subs,
int max_dirs);
~UserQScan();
bool save();
bool clear();
private:
File file_;
bool open_ = false;
};
class AllUserQScan {
public:
AllUserQScan(const std::string& filename, int max_users) {}
void swap_dir(int subnum);
void swap_sub(int subnum);
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment