source: trunk/src/Locator.h

Last change on this file was 2731, 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...

Redefined Locator and its derived classes as template class.


File size: 2.2 KB
Line 
1//
2// C++ Interface: Locator
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#ifndef ASAP_LOCATOR_H
13#define ASAP_LOCATOR_H
14
15namespace asap {
16
17/**
18 * Base class for locate operation
19 * @author TakeshiNakazato
20 */
21template <class T> class Locator {
22public:
23  // Default constructor.
24  Locator();
25 
26  // Construct with data.
27  // @param[in] v pointer to input data.
28  // @param[in] n length of the data.
29  // @param[in] copystorage whether allocate internal memory or not.
30  // @see set()
31  Locator(T *v, unsigned int n, bool copystorage=true);
32 
33  // Set data. The data must be sorted in either ascending or descending
34  // order, and must not have any duplicate elements.
35  // @param[in] v pointer to input data.
36  // @param[in] n length of the data.
37  // @param[in] copystorage whether allocate internal memory or not.
38  //
39  // Setting copystorage=false is bit faster since it directly points
40  // to the input array instead to allocate memory and copy input array.
41  // However, you have to be careful to set copystorage to false since
42  // it will take a risk to allow to edit the data to be searched from
43  // outside the class.
44  void set(T *v, unsigned int n, bool copystorage=true);
45 
46  // Destructor.
47  virtual ~Locator();
48 
49  // Return right hand side index of location.
50  // @param[in] x input value to be located.
51  // @return location as an index j.
52  //
53  // Returned index j satisfies x_[j-1] < x <= x_[j] for ascending
54  // case while x_[j-1] > x >= x_[j] for descending case.
55  // Returned value 0 or x.nelements() indicates out of range.
56  virtual unsigned int locate(T x) = 0;
57 
58protected:
59  // Bisection search.
60  // @param[in] x input value to be located.
61  // @param[in] left the leftmost index to search.
62  // @param[in] right the rightmost index to search.
63  unsigned int bisection(T x, unsigned int left, unsigned int right);
64 
65  // Pointer to the data.
66  T *x_;
67
68  // Length of the data.
69  unsigned int n_;
70
71  // Is data ascending or descending?
72  bool ascending_;
73
74  // Is internal storage allocated?
75  bool copy_;
76};
77
78}
79
80#include "Locator.tcc"
81
82#endif
Note: See TracBrowser for help on using the repository browser.