/** \file
 *
 *  Specifies the interface details for the ReinitializeHFRCMVirtualSurfaceDrifter
 *  component in the EstimationModule.
 *
 *  ReinitializeHFRCMVirtualSurfaceDrifter.h should only be included by
 *  ReinitializeHFRCMVirtualSurfaceDrifter.cpp
 *  Other classes should include ReinitializeHFRCMVirtualSurfaceDrifterIF.h
 *
 *  Copyright (c) 2013, 2014 MBARI
 *  MBARI Proprietary Information.  All Rights Reserved
 */

#ifndef REINITIALIZEHFRCMVIRTUALSURFACEDRIFTER_H_
#define REINITIALIZEHFRCMVIRTUALSURFACEDRIFTER_H_

#include "component/Behavior.h"

/**
 *  Specifies the interface details for the ReinitializeHFRCMVirtualSurfaceDrifter
 *  component in the EstimationModule.
 *
 *  ReinitializeHFRCMVirtualSurfaceDrifter.h should only be included by
 *  ReinitializeHFRCMVirtualSurfaceDrifter.cpp
 *  Other classes should include ReinitializeHFRCMVirtualSurfaceDrifterIF.h
 *
 *  \ingroup modules_estimation
 */

class ReinitializeHFRCMVirtualSurfaceDrifter : public Behavior
{
public:
    ReinitializeHFRCMVirtualSurfaceDrifter( const Str& prefix, const Module* module );
    virtual ~ReinitializeHFRCMVirtualSurfaceDrifter();

    /// Initialize function
    void initialize( void );

    /// The actual "payload" of the component
    bool runIfUnsatisfied( void );

    /// The actual "payload" of the component
    void run( void );

    /// Mission Component factory interface
    static Behavior* CreateBehavior( const Str& prefix, const Module* module );

protected:
    SettingReader *initLatSettingReader_;
    SettingReader *initLonSettingReader_;

private:
    // Note that the copy constructor below is private and not given a body.
    // Any attempt to call it will return a compiler error.
    ReinitializeHFRCMVirtualSurfaceDrifter( const ReinitializeHFRCMVirtualSurfaceDrifter& old ); // disallow copy constructor

};

#endif /* REINITIALIZEHFRCMVIRTUALSURFACEDRIFTER_H_ */
