Esempio n. 1
0
void repository::cache::verify_and_repair() {
  try {
    bool outdated = false;
    try {
      const auto meta = load_meta();
      if (meta.version != repository::version()) {
        BUNSAN_LOG_INFO << "Cache's version \"" << meta.version
                        << "\" is not equal to repository's version \""
                        << repository::version() << "\", resetting cache";
        outdated = true;
      }
    } catch (std::exception &) {
      BUNSAN_LOG_ERROR << "Unable to read cache's meta, resetting cache";
      outdated = true;
    }
    if (outdated) {
      clean_();
      save_meta();
    }
    verify_and_repair_directory(m_config.get_source());
    verify_and_repair_directory(m_config.get_package());
  } catch (std::exception &) {
    BOOST_THROW_EXCEPTION(cache_verify_and_repair_error()
                          << enable_nested_current());
  }
}
Esempio n. 2
0
void repository::cache::clean() {
  try {
    verify_and_repair();
    clean_();
  } catch (cache_clean_error &) {
    throw;
  } catch (std::exception &) {
    BOOST_THROW_EXCEPTION(cache_clean_error() << enable_nested_current());
  }
}
Esempio n. 3
0
unsigned int Integer::decimal_()
{
  clean_();
  int result = 0;
  int iter = 0;
  for (auto i = bits_.end(); i >= bits_.begin(); --i, ++iter) {
    if (*i) {
      result += (pow(2, iter - 1));
    }
  }
  return result;
}
Esempio n. 4
0
 bool draw( const input* p )
 {
     if( !fps )
     {   
         if(    ( !p && row_count_ > 0 )
             || ( !has_block && row_count_ >= block_size )
             || ( p && block_ && *block_ != p->block ) )
         {
             output_once_( timestamp_ );
             image.setTo( 0 );
             row_count_ = 0;
         }
     }
     if( !p ) { return false; }
     timestamp_ = p->t;
     block_ = p->block;
     unsigned int new_row;
     if( has_angle )
     {
         double angle = as_radians ? p->angle : ( p->angle * ( M_PI / 180.0 ) );
         if( sign < 0 ) { angle = M_PI * 2 - angle; }
         new_row = ( unsigned int )( angle / angle_step_ );
     }
     else
     {
         new_row = p->row;
     }
     if( new_row >= block_size ) { std::cerr << "image-accumulate: expected row number less than " << block_size << "; got " << new_row; return false; }
     comma::math::cyclic< unsigned int > r( 0, block_size );
     r = new_row + row_number_offset;
     new_row = r();
     // todo: test row number offset
     if( has_row || has_angle )
     {
         if( fps ) { clean_( new_row, clockwise ? -1 : 1 ); }
         row_ = new_row;
     }
     else
     {
         row_ = row_count_;
     }
     ++row_count_;
     draw_line_( p, row_() );
     draw_dial_();
     return true;
 }
Esempio n. 5
0
std::string Integer::binary_string()
{
  //Create output string which will be filled
  std::string output;
  
  //Clean up vector so that it doesn't return with unnecessary leading zeroes
  clean_();
  
  //Start formatting output
  output += "(";
  for (auto i : bits_)
  {
    //Convert to int - false = 0, true = 1
    if (i)
      output += "1";
    else
      output += "0";
  }
  //More formatting
  output += ")_2";
  return output;
}