source: trunk/src/BufferedBisectionLocator.tcc

Last change on this file was 2732, checked in by Takeshi Nakazato, 11 years ago

New Development: No

JIRA Issue: Yes CAS-4770

Ready for Test: Yes

Interface Changes: Yes/No?

What Interface Changed: Please list interface changes

Test Programs: List test programs

Put in Release Notes: Yes/No?

Module(s): Module Names change impacts.

Description: Describe your changes here...

Commit .tcc files for Locator classes.


File size: 1.5 KB
Line 
1//
2// C++ Implementation: BufferedBisectionLocator
3//
4// Description:
5//
6//
7// Author: Takeshi Nakazato <takeshi.nakazato@nao.ac.jp>, (C) 2012
8//
9// Copyright: See COPYING file that comes with this distribution
10//
11//
12#include <assert.h>
13
14#include "BufferedBisectionLocator.h"
15
16namespace asap {
17template <class T> BufferedBisectionLocator<T>::BufferedBisectionLocator()
18  : Locator<T>(),
19    prev_(0)
20{}
21
22template <class T>
23BufferedBisectionLocator<T>::BufferedBisectionLocator(T *v, unsigned int n,
24                                                      bool copystorage)
25  : Locator<T>(v, n, copystorage),
26    prev_(0)
27{}
28
29template <class T> BufferedBisectionLocator<T>::~BufferedBisectionLocator()
30{}
31
32template <class T> unsigned int BufferedBisectionLocator<T>::locate(T x)
33{
34  if (this->n_ == 1)
35    return 0;
36
37  unsigned int jl = 0;
38  unsigned int ju = this->n_;
39  if (this->ascending_) {
40    // ascending order
41    if (x <= this->x_[0])
42      return 0;
43    else if (x > this->x_[this->n_-1])
44      return this->n_;
45
46    if (x < this->x_[prev_]) {
47      ju = this->bisection(x, jl, prev_);
48    }
49    else {
50      ju = this->bisection(x, prev_, ju);
51    }
52
53  }
54  else {
55    // descending order
56    if (x >= this->x_[0])
57      return 0;
58    else if (x < this->x_[this->n_-1])
59      return this->n_;
60
61    if (x > this->x_[prev_]) {
62      ju = this->bisection(x, jl, prev_);
63    }
64    else {
65      ju = this->bisection(x, prev_, ju);
66    }
67  }
68
69  prev_ = (ju > 0) ? ju - 1 : 0;
70  return ju;   
71}
72
73}
Note: See TracBrowser for help on using the repository browser.