Ejemplo n.º 1
0
 /// <summary>
 /// [UI Thread] : EngineConfigのシリアライズを行う。
 /// 例外投げるかも。
 /// </summary>
 /// <param name="filepath"></param>
 /// <param name="config"></param>
 public static void WriteFile(string filepath, EngineConfigs config)
 {
     lock (config)
         Serializer.Serialize(filepath, config);
 }
Ejemplo n.º 2
0
 /// <summary>
 /// [UI Thread] : "MyShogi.engine.xml"にEngineConfigをシリアライズする。
 /// 例外を投げるかも。
 /// </summary>
 /// <param name="config"></param>
 public static void SaveEngineConfig(EngineConfigs config)
 {
     WriteFile(config_filepath, config);
 }
Ejemplo n.º 3
0
        /// <summary>
        /// [UI Thread] : EngineConfigのデシリアライズを行う。
        /// 例外投げない。
        /// </summary>
        /// <param name="filepath"></param>
        /// <returns></returns>
        public static EngineConfigs ReadFile(string filepath)
        {
            var config = Serializer.Deserialize <EngineConfigs>(filepath);

            // 読み込めなかったので新規に作成する。
            if (config == null)
            {
                config = new EngineConfigs();
            }

            // ぶら下がっているメンバがnullだといたるところでnull checkが必要になって
            // コードが書きにくいのでここでオブジェクトを生成して突っ込んでおく。
            // 空の要素をシリアライズしてデシリアライズするとnullになるので、ここで
            // 改めてnull checkが必要。

            if (config.NormalConfig == null)
            {
                config.NormalConfig = new EngineConfig()
                {
                    EngineConfigType = EngineConfigType.Normal
                }
            }
            ;

            if (config.ConsiderationConfig == null)
            {
                config.ConsiderationConfig = new EngineConfig()
                {
                    EngineConfigType = EngineConfigType.Consideration
                }
            }
            ;

            if (config.MateConfig == null)
            {
                config.MateConfig = new EngineConfig()
                {
                    EngineConfigType = EngineConfigType.Mate
                }
            }
            ;

            void NullCheck(EngineConfig c, bool forConsideration)
            {
                // あとでMateEngine用の共通設定用のデフォルトオプションを別に用意するかも知れんが、
                // とりま、同じでいいような気もしている。
                if (c.CommonOptions == null || c.CommonOptions.Count == 0 /*前回保存時に設定忘れ*/)
                {
                    c.CommonOptions = EngineCommonOptionsSample.CommonOptionDefault(forConsideration);
                }
                else
                {
                    // この共通設定に現在存在しないオプションが混じっていると、その値によって個別設定が上書きされかねないので削除しておく。
                    var currentCommonOptions = EngineCommonOptionsSample.CommonOptionDefault(forConsideration);

                    var engineOptions = new List <EngineOption>();
                    foreach (var option in c.CommonOptions)
                    {
                        if (currentCommonOptions.Exists(x => x.Name == option.Name))
                        {
                            engineOptions.Add(option);
                        }
                    }
                    c.CommonOptions = engineOptions;
                }

                if (c.IndivisualEnginesOptions == null)
                {
                    c.IndivisualEnginesOptions = new List <IndivisualEngineOptions>();
                }
            }

            NullCheck(config.NormalConfig, false);
            NullCheck(config.ConsiderationConfig, true);
            NullCheck(config.MateConfig, true);

            return(config);
        }