ompl/base/Goal.h
00001 /*********************************************************************
00002 * Software License Agreement (BSD License)
00003 *
00004 *  Copyright (c) 2008, Willow Garage, Inc.
00005 *  All rights reserved.
00006 *
00007 *  Redistribution and use in source and binary forms, with or without
00008 *  modification, are permitted provided that the following conditions
00009 *  are met:
00010 *
00011 *   * Redistributions of source code must retain the above copyright
00012 *     notice, this list of conditions and the following disclaimer.
00013 *   * Redistributions in binary form must reproduce the above
00014 *     copyright notice, this list of conditions and the following
00015 *     disclaimer in the documentation and/or other materials provided
00016 *     with the distribution.
00017 *   * Neither the name of the Willow Garage nor the names of its
00018 *     contributors may be used to endorse or promote products derived
00019 *     from this software without specific prior written permission.
00020 *
00021 *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
00022 *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
00023 *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
00024 *  FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
00025 *  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
00026 *  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
00027 *  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
00028 *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
00029 *  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
00030 *  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
00031 *  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
00032 *  POSSIBILITY OF SUCH DAMAGE.
00033 *********************************************************************/
00034 
00035 /* Author: Ioan Sucan */
00036 
00037 #ifndef OMPL_BASE_GOAL_
00038 #define OMPL_BASE_GOAL_
00039 
00040 #include "ompl/base/State.h"
00041 #include "ompl/base/SpaceInformation.h"
00042 #include "ompl/util/ClassForward.h"
00043 #include "ompl/base/GoalTypes.h"
00044 #include "ompl/util/Console.h"
00045 #include <iostream>
00046 #include <boost/noncopyable.hpp>
00047 #include <boost/concept_check.hpp>
00048 #include <vector>
00049 
00050 namespace ompl
00051 {
00052     namespace base
00053     {
00055 
00056         OMPL_CLASS_FORWARD(Goal);
00058 
00063         class Goal : private boost::noncopyable
00064         {
00065         public:
00066 
00068             Goal(const SpaceInformationPtr &si);
00069 
00071             virtual ~Goal()
00072             {
00073             }
00074 
00076             template<class T>
00077             T* as()
00078             {
00080                 BOOST_CONCEPT_ASSERT((boost::Convertible<T*, Goal*>));
00081 
00082                 return static_cast<T*>(this);
00083             }
00084 
00086             template<class T>
00087             const T* as() const
00088             {
00090                 BOOST_CONCEPT_ASSERT((boost::Convertible<T*, Goal*>));
00091 
00092                 return static_cast<const T*>(this);
00093             }
00094 
00096             GoalType getType() const
00097             {
00098                 return type_;
00099             }
00100 
00102             bool hasType(GoalType type) const
00103             {
00104                 return (type_ & type) == type;
00105             }
00106 
00108             const SpaceInformationPtr& getSpaceInformation() const
00109             {
00110                 return si_;
00111             }
00112 
00115             virtual bool isSatisfied(const State *st) const = 0;
00116 
00128             virtual bool isSatisfied(const State *st, double *distance) const;
00129 
00136             virtual bool isStartGoalPairValid(const State * /* start */, const State * /* goal */) const
00137             {
00138                 return true;
00139             }
00140 
00142             virtual void print(std::ostream &out = std::cout) const;
00143 
00144         protected:
00145 
00147             GoalType                     type_;
00148 
00150             SpaceInformationPtr          si_;
00151         };
00152 
00153     }
00154 }
00155 
00156 #endif
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines