/**
 * @file
 * $Id$
 * $Revision$
 * $Author$
 * $Date$
 *
 * This file is part of The iWear Framework.
 *
 * The iWear Framework is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by the
 * Free Software Foundation as in version 2 of the License.

 * 
 * The iWear Framework is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
 * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
 * more details.
 * 
 * You should have received a copy of the GNU General Public License along with
 * The iWear Framework; if not, write to the Free Software Foundation, Inc., 59
 * Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */

#ifndef __IWLOCATOR_LOCATOR_H
#define __IWLOCATOR_LOCATOR_H

#ifndef __IWSENS_SENSOR_H
#include <iwsens/sensor.h>
#endif

#ifndef __IWLOCATOR_LOCATION_H
#include <iwlocator/location.h>
#endif

#ifndef __IWLOCATOR_LOCATOR_ENUMS_H
#include <iwlocator/locator_enums.h>
#endif

namespace iwear
{
    namespace sensor
    {
	namespace location
	{

class LocationManager;
    
/**
 * The Locator is a base class for all locating modules.
 */
class Locator : public Sensor
{
public:
    Locator( LocationManager* );

    virtual const Location& get_actual_location( void ) const = 0;

    virtual locator_type get_locator_type( void ) const = 0;

    inline virtual sensor_type get_sensor_type( void ) const { return location_sensor; } 

protected:
    LocationManager * manager;

   /**
    * The last location measured, with a valid timestamp. In most cases this is
    * returned by the get_actual_location() call, since the most locators will
    * periodically update their internal state based on a thread. But some
    * modules will certainly do some computations and return another reference
    * before.
    */
    mutable Location last_location;
private:
};
typedef Locator locator;

}
}
}
#endif
