diff options
Diffstat (limited to 'src/pattern.cc')
-rw-r--r-- | src/pattern.cc | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/src/pattern.cc b/src/pattern.cc index 9f22674..ba8f4d4 100644 --- a/src/pattern.cc +++ b/src/pattern.cc @@ -403,15 +403,17 @@ Pattern *PatternList::GetPattern(int i) { // Return a randomly selected pattern. Pattern *PatternList::GetRandomPattern() { - unsigned int target = random(); - target = target % weightcount_; - + int target = random(); unsigned int i = 0; - unsigned int sum = 0; - while (target > sum) { - sum += patterns_[i].weight(); + target = (target % weightcount_) + 1; + + do { + target -= patterns_[i].weight(); + if (target <= 0) + break; i++; - } + } while (i < size_); + if (i < size_) { return &patterns_[i]; } |