Exemple #1
0
        /// <summary>
        /// Load precalcuation table for fast calculation.
        /// If not called by user, will be called automatically as soon as
        /// it is necessary (which may slow-down the very first calculation).
        /// </summary>
        public static void LoadLut()
        {
            string path = GetLutPath();

            BdsVersion assemblyVersion = new BdsVersion(Assembly.GetExecutingAssembly());

            using (BinaryReader r = new BinaryReader(File.Open(path, FileMode.Open, FileAccess.Read, FileShare.Read)))
            {
                BdsVersion fileVersion = new BdsVersion();
                fileVersion.Read(r);
                if (assemblyVersion.Major != fileVersion.Major ||
                    assemblyVersion.Minor != fileVersion.Minor ||
                    assemblyVersion.Revision != fileVersion.Revision)
                {
                    throw new ApplicationException(
                              String.Format("Wrong file version: expected: {0:x8}, was: {1:x8}, file: {2}",
                                            assemblyVersion, fileVersion, path));
                }
                int count = r.ReadInt32();
                _lut = new Precalculated[count];

                for (int i = 0; i < count; ++i)
                {
                    _lut[i].Read(r);
                }
            }
        }
Exemple #2
0
        public static Result CalculateFast(HePocketKind p1, HePocketKind p2)
        {
            if (_lut == null)
            {
                LoadLut();
            }
            Precalculated key     = new Precalculated();
            bool          reverse = p1 > p2;

            if (reverse)
            {
                key.PocketKind1 = (byte)p2;
                key.PocketKind2 = (byte)p1;
            }
            else
            {
                key.PocketKind1 = (byte)p1;
                key.PocketKind2 = (byte)p2;
            }
            int    i = Array.BinarySearch(_lut, key, _precalculatedComparer);
            Result r = new Result {
                Count = _lut[i].Count
            };

            if (reverse)
            {
                r.Equity = 1 - _lut[i].Equity;
            }
            else
            {
                r.Equity = _lut[i].Equity;
            }
            return(r);
        }
Exemple #3
0
        public static void Precalculate()
        {
            DateTime startTime = DateTime.Now;

            string lutPath = GetLutPath();

            if (File.Exists(lutPath))
            {
                // Do not ovewriting an existing file to save time.
                Console.WriteLine("LUT file {0} already exist, exiting. Delete the file to recalculate.", lutPath);
                return;
            }

            Precalculated[] precalcArray = new Precalculated[HePocket.Count * (HePocket.Count + 1) / 2];
            int             i            = 0;

            Console.WriteLine("Calculating for");
            for (int pk1 = 0; pk1 < HePocket.Count; pk1++)
            {
                Console.Write(" {0}", (HePocketKind)pk1);
                for (int pk2 = pk1; pk2 < HePocket.Count; pk2++)
                {
                    Result r = Calculate((HePocketKind)pk1, (HePocketKind)pk2);
                    precalcArray[i].PocketKind1 = (byte)pk1;
                    precalcArray[i].PocketKind2 = (byte)pk2;
                    precalcArray[i].Count       = (byte)r.Count;
                    precalcArray[i].Equity      = r.Equity;
                    ++i;
                }
            }
            Console.WriteLine();

            BdsVersion assemblyVersion = new BdsVersion(Assembly.GetExecutingAssembly());
            BdsVersion fileVersion     = new BdsVersion();

            fileVersion.Major       = assemblyVersion.Major;
            fileVersion.Minor       = assemblyVersion.Minor;
            fileVersion.Revision    = assemblyVersion.Revision;
            fileVersion.ScmInfo     = assemblyVersion.ScmInfo;
            fileVersion.Description = "HE heads-up pocket equity LUT.";

            string dir = Path.GetDirectoryName(lutPath);

            if (!Directory.Exists(dir))
            {
                Directory.CreateDirectory(dir);
            }

            using (BinaryWriter wr = new BinaryWriter(File.Open(lutPath, FileMode.Create)))
            {
                fileVersion.Write(wr);
                wr.Write(precalcArray.Length);
                for (i = 0; i < precalcArray.Length; ++i)
                {
                    precalcArray[i].Write(wr);
                }
            }
            Console.WriteLine("Calculated in {0} s", (DateTime.Now - startTime).TotalSeconds);
        }