-/* $Id$
-
-This file is part of R²C²
-Copyright © 2011 Mikkosoft Productions, Mikko Rasa
-Distributed under the GPL
-*/
-
#include "speedquantizer.h"
using namespace std;
namespace R2C2 {
SpeedQuantizer::SpeedQuantizer(unsigned n):
- steps(n+1)
+ steps(n+1),
+ weight_limit(10)
{
if(n<1)
- throw InvalidParameterValue("Must have at leats one speed step");
+ throw invalid_argument("SpeedQuantizer::SpeedQuantizer");
}
void SpeedQuantizer::learn(unsigned i, float s, float w)
{
if(i>=steps.size())
- throw InvalidParameterValue("Speed step index out of range");
+ throw out_of_range("SpeedQuantizer::learn");
steps[i].add(s, w);
}
{
if(i==0)
return 0;
- if(steps[i].weight)
+ if(steps[i].weight>=weight_limit)
return steps[i].speed;
unsigned low;
unsigned high;
for(low=i; low>0; --low)
- if(steps[low].weight)
+ if(steps[low].weight>=weight_limit)
break;
for(high=i; high+1<steps.size(); ++high)
- if(steps[high].weight)
+ if(steps[high].weight>=weight_limit)
break;
if(steps[high].weight)
unsigned high = 0;
unsigned last = 0;
for(unsigned i=0; (!high && i<steps.size()); ++i)
- if(steps[i].weight)
+ if(steps[i].weight>=weight_limit)
{
last = i;
if(steps[i].speed>=speed)