{
public Point (double x, double y)
{
- this.x = x;
- this.y = y;
+ this._x = x;
+ this._y = y;
}
public double X {
- get { return x; }
- set { x = value; }
+ get { return _x; }
+ set { _x = value; }
}
public double Y {
- get { return y; }
- set { y = value; }
+ get { return _y; }
+ set { _y = value; }
}
public override bool Equals (object o)
public bool Equals (Point value)
{
- return x == value.X && y == value.Y;
+ return _x == value.X && _y == value.Y;
}
public override int GetHashCode ()
{
- return (x.GetHashCode() ^ y.GetHashCode());
+ return (_x.GetHashCode() ^ _y.GetHashCode());
}
public void Offset (double offsetX, double offsetY)
{
- x += offsetX;
- y += offsetY;
+ _x += offsetX;
+ _y += offsetY;
}
public static Point Add (Point point, Vector vector)
public static Point Parse (string source)
{
- string[] points = source.Split(',');
-
- if (points.Length<2)
- throw new InvalidOperationException ("source does not contain two numbers");
- if (points.Length > 2)
- throw new InvalidOperationException ("source contains too many delimiters");
-
- CultureInfo ci = CultureInfo.InvariantCulture;
- return new Point (Convert.ToDouble(points[0],ci), Convert.ToDouble(points[1],ci));
+ if (source == null)
+ throw new ArgumentNullException ("source");
+ var tokenizer = new NumericListTokenizer (source, CultureInfo.InvariantCulture);
+ double x;
+ double y;
+ if (!double.TryParse (tokenizer.GetNextToken (), NumberStyles.Float, CultureInfo.InvariantCulture, out x) ||
+ !double.TryParse (tokenizer.GetNextToken (), NumberStyles.Float, CultureInfo.InvariantCulture, out y))
+ {
+ throw new FormatException (string.Format ("Invalid Point format: {0}", source));
+ }
+ if (!tokenizer.HasNoMoreTokens ())
+ {
+ throw new InvalidOperationException ("Invalid Point format: " + source);
+ }
+ return new Point(x, y);
}
public override string ToString ()
return this.ToString(null, null);
}
- public string ToString (IFormatProvider formatProvider)
+ public string ToString (IFormatProvider provider)
{
- return this.ToString(null,formatProvider);
+ return this.ToString(null, provider);
}
private string ToString(string format,IFormatProvider formatProvider)
{
- CultureInfo ci = (CultureInfo)formatProvider;
-
- if (ci == null)
- ci = CultureInfo.CurrentCulture;
- string seperator = ci.NumberFormat.NumberDecimalSeparator;
- if (seperator.Equals(","))
- seperator = ";";
- else
- seperator = ",";
- object[] ob = { this.x, seperator, this.y };
-
- return string.Format(formatProvider, "{0:" + format + "}{1}{2:" + format + "}", ob);
+ if (formatProvider == null)
+ formatProvider = CultureInfo.CurrentCulture;
+ if (format == null)
+ format = string.Empty;
+ var separator = NumericListTokenizer.GetSeparator (formatProvider);
+ var pointFormat = string.Format ("{{0:{0}}}{1}{{1:{0}}}", format, separator);
+ return string.Format (formatProvider, pointFormat, _x, _y);
}
string IFormattable.ToString (string format, IFormatProvider formatProvider)
return this.ToString(format, formatProvider);
}
- double x;
- double y;
+ double _x;
+ double _y;
}
}