double GetNextDoubleFromCurveData(CurveStream curveStream) {
            var a = curveStream.GetNextCurveStreamElement();
            if (a == null)
                Error("cannot parse curveData");

            var d = a as DoubleStreamElement;
            if (d == null)
                Error("cannot parse curveData");
// ReSharper disable PossibleNullReferenceException
            return d.Double;
// ReSharper restore PossibleNullReferenceException
        }
 ICurve ParseCurve(string curveData) {
     var curve = new Curve();
     var curveStream = new CurveStream(curveData);
     var currentPoint = new Point();
     do {
         var curveStreamElement = curveStream.GetNextCurveStreamElement();
         if (curveStreamElement == null)
             return curve;
         var charStreamElement = curveStreamElement as CharStreamElement;
         if (charStreamElement == null) {
             Error("wrong formatted curve string " + curveStreamElement);
             return null;
         }
         AddCurveSegment(curveStream, charStreamElement.Char, curve, ref currentPoint);
     } while (true);
 }