18 template<
typename O,
typename S =
typename O::Scalar>
19 class AnalyticTraj :
public TrajBase<S>,
public AnalyticFunction<O>
23 AnalyticTraj(
const AnalyticFunction<O>& f,
const Interval& tdomain)
24 : TrajBase<S>(), AnalyticFunction<O>(f), _tdomain(tdomain)
26 assert_release(f.args().total_size() == 1 &&
"domain of f must be 1d");
29 virtual Index size()
const
31 return AnalyticFunction<O>::output_size();
34 virtual std::pair<Index,Index> shape()
const
36 return AnalyticFunction<O>::output_shape();
39 virtual bool is_empty()
const
41 return _tdomain.is_empty();
44 virtual Interval tdomain()
const
49 virtual void truncate_tdomain(
const Interval& new_tdomain)
51 assert_release(this->tdomain().is_superset(new_tdomain));
52 _tdomain &= new_tdomain;
55 virtual typename Wrapper<S>::Domain codomain()
const
57 return AnalyticFunction<O>::eval(this->_tdomain);
60 virtual S operator()(
double t)
const
62 if(!this->tdomain().contains(t))
63 return this->nan_value();
64 return AnalyticFunction<O>::real_eval(t);
67 virtual typename Wrapper<S>::Domain operator()(
const Interval& t)
const
69 if(!this->tdomain().is_superset(t))
70 return typename Wrapper<S>::Domain((*
this)(tdomain().lb()))
71 .init(Interval(-oo,oo));
72 return AnalyticFunction<O>::eval(t);