26        return r >= c ? bitvec::operator[]((r * r + r) / 2 + c) : end();
 
   28    bool operator()(
unsigned r, 
unsigned c)
 const {
 
   29        return r >= c ? bitvec::operator[]((r * r + r) / 2 + c) : 
false;
 
   31    unsigned size()
 const {
 
   32        if (empty()) 
return 0;
 
   35        while ((r * r + r) / 2 <= m) r++;
 
   40    using bitvec::operator bool;
 
   48        rowref(T &s, 
unsigned r) : self(s), row(r) {}
 
   51        rowref(
const rowref &) = 
default;
 
   52        rowref(rowref &&) = 
default;
 
   53        explicit operator bool()
 const {
 
   54            if (row < bits_per_unit)
 
   55                return self.getrange((row * row + row) / 2, row + 1) != 0;
 
   57                return self.getslice((row * row + row) / 2, row + 1) ? true : 
false;
 
   59        operator bitvec()
 const { 
return self.getslice((row * row + row) / 2, row + 1); }
 
   61    class nonconst_rowref : 
public rowref<LTBitMatrix> {
 
   65        void operator|=(
bitvec a)
 const {
 
   71        nonconst_bitref operator[](
unsigned col)
 const { 
return self(row, col); }
 
   73    class const_rowref : 
public rowref<const LTBitMatrix> {
 
   77        bool operator[](
unsigned col)
 const { 
return self(row, col); }
 
   81    nonconst_rowref operator[](
unsigned r) { 
return nonconst_rowref(*
this, r); }
 
   82    const_rowref operator[](
unsigned r)
 const { 
return const_rowref(*
this, r); }
 
   84    bool operator==(
const LTBitMatrix &a)
 const { 
return bitvec::operator==(a); }
 
   85    bool operator!=(
const LTBitMatrix &a)
 const { 
return bitvec::operator!=(a); }
 
   86    friend bool operator>>(
const char *p, 
LTBitMatrix &bm);