text: // Copyright 2020 Alexander Liniger
  
  // Licensed under the Apache License, Version 2.0 (the "License");
  // you may not use this file except in compliance with the License.
  // You may obtain a copy of the License at
  
  //     http://www.apache.org/licenses/LICENSE-2.0
  
  // Unless required by applicable law or agreed to in writing, software
  // distributed under the License is distributed on an "AS IS" BASIS,
  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  // See the License for the specific language governing permissions and
  // limitations under the License.
  ///////////////////////////////////////////////////////////////////////////
  ///////////////////////////////////////////////////////////////////////////
  
  #ifndef DISC_MODEL_H
  #define DISC_MODEL_H
  
  #include "types.h"
  #include "Grid/grid.h"
  
  
  class Model {
  public:
      ModelOutput nextState(const State &x,const Input &u,double kappa) const;
      std::vector<Input> possibleInputs(double v) const;
  private:
  
      StateVector dx(const StateVector &x_vec,const Input &u,double kappa) const;
      State RK4(const State &x,const Input &u,double kappa) const;
      bool roadConstraints(const State &x) const;
  
      RoadData road_;
      CarData car_;
  };
  
  
  #endif //DISC_MODEL_H
  