public static Shever operator !(Shever a) { Shever b = new Shever(); b.Mana = 0; b.Mone = a.Mahane; b.Mahane = a.Mana * a.Mahane + a.Mone; b.Tsimtsum(); return b; }
/// <summary> /// calculate the fragment multiple fragment /// </summary> /// <param name="a">First fragment</param> /// <param name="b">Secend fragment</param> public static Shever operator *(Shever a, Shever b) { Shever c = new Shever(); c.Mahane = a.Mahane * b.Mahane; c.Mone = (a.Mana * a.Mahane + a.Mone) * (b.Mana * b.Mahane + b.Mone); if (c.Mone > c.Mahane) { int temp = c.Mone; c.Mone = c.Mone % c.Mahane; c.Mana += c.Mone / c.Mahane; } return c; }
/// <summary> /// calculate the fragment minus fragment /// </summary> /// <param name="a">First fragment</param> /// <param name="b">Secend fragment</param> public static Shever operator -(Shever a, Shever b) { Shever c = new Shever(); c.Mana = a.Mana - b.Mana; c.Mahane = a.Mahane * b.Mahane; c.Mone = a.Mone * b.Mahane - a.Mahane * b.Mone; if (c.Mone > c.Mahane) { int temp = c.Mone; c.Mone = c.Mone % c.Mahane; c.Mana += c.Mone / c.Mahane; } if (c.Mone < 0) { c.Mana -= 1; c.Mone += c.Mahane; } return c; }
/// <summary> /// Parse the fragment from string /// </summary> /// <remarks> /// If string not proper -> returns Empty fragment /// </remarks> public static Shever Parse(string str) { try { Shever shever = new Shever(); str.Replace("(", ""); str.Replace(")", ""); string[] ar = str.Split('&'); shever.Mana = int.Parse(ar[0]); shever.Mone = int.Parse(ar[1]); shever.Mahane = int.Parse(ar[2]); return shever; } catch { return new Shever(); } }
/// <summary> /// calculate the fragment plus fragment /// </summary> /// <param name="a">First fragment</param> /// <param name="b">Secend fragment</param> public static double operator +(Shever a, Shever b) { Shever c = new Shever(); c.Mana = a.Mana + b.Mana; c.Mahane = a.Mahane * b.Mahane; c.Mone = a.Mone * b.Mahane + a.Mahane * b.Mone; c.Tsimtsum(); if (a.ToDouble() + b.ToDouble() != c.ToDouble()) { throw new System.Exception("problem with parsing to double : " + a.ToString() + "@" + b.ToString() + "@" + c.ToString()); } return c.ToDouble(); }