Exemple #1
0
 void parse (StringParser& p, std::complex<F>& out) {
   size_t start = p.pos ();
   F real, imag;
   parse (p, real);
   size_t pos = p.pos ();
   p.skipWs ();
   size_t pos2 = p.pos ();
   char sign = p.read ();
   if (sign == '+' || sign == '-') {
     p.skipWs ();
     if (p.peek () == 'i' || p.peek () == 'I') {
       p.read ();
       imag = sign == '+' ? 1 : -1;
     } else {
       p.seek (pos2);
       parse (p, imag);
       p.skipWs ();
       char c = p.read ();
       if (c != 'i' && c != 'I') {
         throw ParseException (typeid (std::complex<F>), p.value (), start, p.pos () - 1, "Expected `i' oder `I' after imaginary part");
       }
     }
     out = std::complex<F> (real, imag);
   } else {
     p.seek (pos);
     out = std::complex<F> (real, 0);
   }
 }
Exemple #2
0
 void parse (StringParser& p, Math::DiagMatrix3<T>& out) {
   size_t start = p.pos ();
   if (p.peek () == '(') {
     p.expect (typeid (Math::DiagMatrix3<T>), start, '(');
     parse (p, out.m11 ());
     p.expect (typeid (Math::DiagMatrix3<T>), start, ',');
     parse (p, out.m22 ());
     p.expect (typeid (Math::DiagMatrix3<T>), start, ',');
     parse (p, out.m33 ());
     p.expect (typeid (Math::DiagMatrix3<T>), start, ')');
   } else {
     T value;
     parse (p, value);
     out = Math::DiagMatrix3<T> (value, value, value);
   }
 }