54 lines
1.5 KiB
C++
54 lines
1.5 KiB
C++
|
#include <iomanip>
|
||
|
|
||
|
#include <Rcpp.h>
|
||
|
|
||
|
#include "types.h"
|
||
|
|
||
|
// [[Rcpp::export(name = "print.mvbinary", rng = false)]]
|
||
|
void print_mvbinary(const MVBinary& binary, int nrLines = 10) {
|
||
|
// Divider bits
|
||
|
constexpr uint32_t div = 0x88888888;
|
||
|
|
||
|
// Get nr of element to be printed
|
||
|
nrLines = nrLines < binary.size() ? nrLines : binary.size();
|
||
|
|
||
|
// from first to nr lines print binary events to console
|
||
|
for (int i = 0; i < nrLines; ++i) {
|
||
|
uint32_t val = binary[i];
|
||
|
Rcpp::Rcout << std::setw(12) << std::right << val << ": ";
|
||
|
for (uint32_t j = 0; j < binary.dim(); ++j) {
|
||
|
Rcpp::Rcout << ((val & (1 << j)) ? '1' : '.');
|
||
|
if (div & (1 << j)) {
|
||
|
Rcpp::Rcout << ' ';
|
||
|
}
|
||
|
}
|
||
|
Rcpp::Rcout << '\n';
|
||
|
}
|
||
|
|
||
|
// report skipped entries (if any)
|
||
|
if (nrLines < binary.size()) {
|
||
|
Rcpp::Rcout << "[ skipping " << (binary.size() - nrLines) << " lines ]\n";
|
||
|
}
|
||
|
|
||
|
Rcpp::Rcout << std::flush;
|
||
|
}
|
||
|
|
||
|
// [[Rcpp::export(rng = false)]]
|
||
|
void printBits(const Rcpp::IntegerVector& ints) {
|
||
|
// Value with only the left most bit set
|
||
|
constexpr uint32_t lmb = 1UL << 31;
|
||
|
|
||
|
for (uint32_t val : ints) {
|
||
|
Rcpp::Rcout << std::setw(12) << std::right << val << ": ";
|
||
|
for (int j = 0; j < 8; ++j) {
|
||
|
for (int k = 0; k < 4; ++k) {
|
||
|
Rcpp::Rcout << ((val & lmb) ? '1' : '.');
|
||
|
val <<= 1;
|
||
|
}
|
||
|
Rcpp::Rcout << ' ';
|
||
|
}
|
||
|
Rcpp::Rcout << '\n';
|
||
|
}
|
||
|
Rcpp::Rcout << std::flush;
|
||
|
}
|