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 bool is_empty()
const
36 return _tdomain.is_empty();
39 virtual Interval tdomain()
const
44 virtual void truncate_tdomain(
const Interval& new_tdomain)
46 assert_release(this->tdomain().is_superset(new_tdomain));
47 _tdomain &= new_tdomain;
50 virtual typename Wrapper<S>::Domain codomain()
const
52 return AnalyticFunction<O>::eval(this->_tdomain);
55 virtual S operator()(
double t)
const
57 if(!this->tdomain().contains(t))
58 return this->nan_value();
59 return AnalyticFunction<O>::real_eval(t);
62 virtual typename Wrapper<S>::Domain operator()(
const Interval& t)
const
64 if(!this->tdomain().is_superset(t))
65 return typename Wrapper<S>::Domain((*
this)(tdomain().lb()))
66 .init(Interval(-oo,oo));
67 return AnalyticFunction<O>::eval(t);