using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Cosmos.IL2CPU.Plugs;

namespace Cosmos.IL2CPU.IL.CustomImplementations.System {
	[Plug(Target = typeof(UInt64))]
	public class UInt64Impl {
		public static string ToString(ref ulong aThis) {
      return UInt64Impl2.GetNumberString(aThis, false);
		}
  }

  // See note in UInt32Impl
  public class UInt64Impl2 {
    public static string GetNumberString(ulong aValue, bool aIsNegative) {
			const string xDigits = "0123456789";
			char[] xResultChars = new char[21];
			int xCurrentPos = 20;
            if (aValue > 0)
            {
                while (aValue > 0)
                {
                    byte xPos = (byte)(aValue % 10);
                    aValue /= 10;
                    xResultChars[xCurrentPos] = xDigits[xPos];
                    xCurrentPos -= 1;
                }
            }
            else {
                xResultChars[xCurrentPos] = '0';
                xCurrentPos -= 1;
            }
		    if (aIsNegative) {
				xResultChars[xCurrentPos] = '-';
				xCurrentPos -= 1;
			}
			return new String(xResultChars, xCurrentPos + 1, 20 - xCurrentPos);
		}
	}
}
