Created
February 2, 2018 04:33
-
-
Save wwiv/f7874ab79e184c25f90529a4551efa0c to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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