EXP
void LinearizeCurve( int max_iter,
             const int n, const int p, Ptr< T > U, Ptr< HP > Pw,
             const T tol, const rtl<T>& t,
             int *ret_nP, Ptr< EP > *retP )
{
  List< ListNode<EP> > L;
  ListNode<EP> *node = new ListNode<EP>(euclid(Pw[0]));
  int i,nEl;
  Ptr< EP > P;

  L.Append( node );

  LinearizeCurve( max_iter, n, p, U, Pw, tol, t, 
                  LinearizeLineCallback<EP>, (void *)&L );

  nEl = L.nElems;
  node = L.head;
  P.reserve_pool( nEl );
  for( i = 0; i < nEl; i++ )
  {
    P[nEl-1-i] = node->el;
    node = node->next;
  }
  *ret_nP = nEl;
  *retP = P;
  
  L.DeleteElems();
}