13 namespace statespace {
 
   17 using Ptr = std::unique_ptr<JointStateSpace>;
 
   20 template <
class Jo
intType>
 
   29   static Ptr create(const ::dart::dynamics::RevoluteJoint* _joint)
 
   31     if (_joint->isCyclic(0))
 
   32       return ::aikido::common::make_unique<SO2Joint>(_joint);
 
   34       return ::aikido::common::make_unique<R1Joint>(_joint);
 
   42   static Ptr create(const ::dart::dynamics::PrismaticJoint* _joint)
 
   44     return ::aikido::common::make_unique<R1Joint>(_joint);
 
   52   static Ptr create(const ::dart::dynamics::TranslationalJoint* _joint)
 
   54     return ::aikido::common::make_unique<R3Joint>(_joint);
 
   62   static Ptr create(const ::dart::dynamics::BallJoint* _joint)
 
   64     return ::aikido::common::make_unique<SO3Joint>(_joint);
 
   72   static Ptr create(const ::dart::dynamics::PlanarJoint* _joint)
 
   74     return ::aikido::common::make_unique<SE2Joint>(_joint);
 
   82   static Ptr create(const ::dart::dynamics::FreeJoint* _joint)
 
   84     return ::aikido::common::make_unique<SE3Joint>(_joint);
 
   92   static Ptr create(const ::dart::dynamics::WeldJoint* _joint)
 
   94     return ::aikido::common::make_unique<WeldJoint>(_joint);
 
  100     const ::dart::dynamics::BallJoint,
 
  101     const ::dart::dynamics::FreeJoint,
 
  102     const ::dart::dynamics::PlanarJoint,
 
  103     const ::dart::dynamics::PrismaticJoint,
 
  104     const ::dart::dynamics::RevoluteJoint,
 
  105     const ::dart::dynamics::TranslationalJoint,
 
  106     const ::dart::dynamics::WeldJoint
 
  115 template <
class Jo
intType>