OSDN Git Service

[Refactor] TrFlagsを生配列からstd::arrayにする
authorHabu <habu1010+github@gmail.com>
Sat, 4 Sep 2021 09:20:03 +0000 (18:20 +0900)
committerHabu <habu1010+github@gmail.com>
Sat, 4 Sep 2021 09:20:03 +0000 (18:20 +0900)
今後のリファクタリングを見据えるため、TrFlagsを生配列から
std::array型へ変更する。
これに伴い、配列インデックスのループによる処理を以下の通り
置き換える。

- クリア → std::array::fill メソッドによるクリア
- コピー → 構造体のコピー代入
- 比較 → std::arrayクラスの比較演算子による比較

12 files changed:
src/info-reader/info-reader-util.h
src/mind/mind-samurai.cpp
src/object/object-flags.cpp
src/object/object-stack.cpp
src/player-info/self-info-util.cpp
src/player/permanent-resistances.cpp
src/player/race-resistances.cpp
src/player/temporary-resistances.cpp
src/specific-object/bloody-moon.cpp
src/spell/spells-object.cpp
src/store/store-util.cpp
src/system/h-type.h

index ee5e96a..da7df9e 100644 (file)
@@ -41,6 +41,23 @@ bool info_grab_one_flag(uint32_t &flags, const std::unordered_map<sview, T> &nam
  * @return 見つけたらtrue
  */
 template <typename T>
+bool info_grab_one_flag(TrFlags &flags, const std::unordered_map<sview, T> &names, sview what)
+{
+    if (auto it = names.find(what); it != names.end()) {
+        add_flag(flags, it->second);
+        return true;
+    }
+    return false;
+}
+
+/*!
+ * @brief infoフラグ文字列をフラグビットに変換する
+ * @param flags ビットフラグ配列
+ * @param names フラグ文字列変換表
+ * @param what フラグ文字列
+ * @return 見つけたらtrue
+ */
+template <typename T>
 bool info_grab_one_flag(uint32_t *flags, const std::unordered_map<sview, T> &names, sview what)
 {
     if (auto it = names.find(what); it != names.end()) {
index 234139e..1d57516 100644 (file)
@@ -49,7 +49,7 @@ static samurai_slaying_type *initialize_samurai_slaying_type(
     samurai_slaying_type *samurai_slaying_ptr, MULTIPLY mult, const TrFlags &flags, monster_type *m_ptr, combat_options mode, monster_race *r_ptr)
 {
     samurai_slaying_ptr->mult = mult;
-    std::copy_n(flags, TR_FLAG_SIZE, samurai_slaying_ptr->flags);
+    samurai_slaying_ptr->flags = flags;
     samurai_slaying_ptr->m_ptr = m_ptr;
     samurai_slaying_ptr->mode = mode;
     samurai_slaying_ptr->r_ptr = r_ptr;
index 4d1607b..29d2836 100644 (file)
@@ -23,15 +23,10 @@ void object_flags(const object_type *o_ptr, TrFlags &flgs)
     object_kind *k_ptr = &k_info[o_ptr->k_idx];
 
     /* Base object */
-    for (int i = 0; i < TR_FLAG_SIZE; i++) {
-        flgs[i] = k_ptr->flags[i];
-    }
+    flgs = k_ptr->flags;
 
     if (o_ptr->is_fixed_artifact()) {
-        artifact_type *a_ptr = &a_info[o_ptr->name1];
-        for (int i = 0; i < TR_FLAG_SIZE; i++) {
-            flgs[i] = a_ptr->flags[i];
-        }
+        flgs = a_info[o_ptr->name1].flags;
     }
 
     if (o_ptr->is_ego()) {
@@ -101,17 +96,13 @@ void object_flags_known(const object_type *o_ptr, TrFlags &flgs)
 {
     bool spoil = false;
     object_kind *k_ptr = &k_info[o_ptr->k_idx];
-    for (int i = 0; i < TR_FLAG_SIZE; i++) {
-        flgs[i] = 0;
-    }
+    flgs.fill(0U);
 
     if (!o_ptr->is_aware())
         return;
 
     /* Base object */
-    for (int i = 0; i < TR_FLAG_SIZE; i++) {
-        flgs[i] = k_ptr->flags[i];
-    }
+    flgs = k_ptr->flags;
 
     if (!o_ptr->is_known())
         return;
@@ -134,11 +125,7 @@ void object_flags_known(const object_type *o_ptr, TrFlags &flgs)
 
     if (spoil || o_ptr->is_fully_known()) {
         if (o_ptr->is_fixed_artifact()) {
-            artifact_type *a_ptr = &a_info[o_ptr->name1];
-
-            for (int i = 0; i < TR_FLAG_SIZE; i++) {
-                flgs[i] = a_ptr->flags[i];
-            }
+            flgs = a_info[o_ptr->name1].flags;
         }
 
         /* Random artifact ! */
index 481af45..c5bfb68 100644 (file)
@@ -188,9 +188,8 @@ int object_similar_part(const object_type *o_ptr, const object_type *j_ptr)
     }
     }
 
-    for (int i = 0; i < TR_FLAG_SIZE; i++)
-        if (o_ptr->art_flags[i] != j_ptr->art_flags[i])
-            return 0;
+    if (o_ptr->art_flags != j_ptr->art_flags)
+        return 0;
 
     if (o_ptr->curse_flags != j_ptr->curse_flags)
         return 0;
index 76f37e2..7ed93d1 100644 (file)
@@ -3,8 +3,7 @@
 self_info_type *initialize_self_info_type(self_info_type *self_ptr)
 {
     self_ptr->line = 0;
-    for (int i = 0; i < TR_FLAG_SIZE; i++)
-        self_ptr->flags[i] = 0L;
+    self_ptr->flags.fill(0U);
 
     return self_ptr;
 }
index 0af332a..12fe7a7 100644 (file)
@@ -276,8 +276,7 @@ static void add_kata_flags(player_type *creature_ptr, TrFlags &flags)
  */
 void player_flags(player_type *creature_ptr, TrFlags &flags)
 {
-    for (int i = 0; i < TR_FLAG_SIZE; i++)
-        flags[i] = 0L;
+    flags.fill(0U);
 
     add_class_flags(creature_ptr, flags);
     add_player_race_flags(creature_ptr, flags);
@@ -289,10 +288,8 @@ void player_flags(player_type *creature_ptr, TrFlags &flags)
 
 void riding_flags(player_type *creature_ptr, TrFlags &flags, TrFlags &negative_flags)
 {
-    for (int i = 0; i < TR_FLAG_SIZE; i++) {
-        flags[i] = 0L;
-        negative_flags[i] = 0L;
-    }
+    flags.fill(0U);
+    negative_flags.fill(0U);
 
     if (!creature_ptr->riding)
         return;
index c5f2032..d23f5eb 100644 (file)
@@ -20,9 +20,7 @@
  */
 void player_immunity(player_type *creature_ptr, TrFlags &flags)
 {
-    for (int i = 0; i < TR_FLAG_SIZE; i++) {
-        flags[i] = 0L;
-    }
+    flags.fill(0U);
 
     if (player_race_has_flag(creature_ptr, TR_IM_ACID))
         add_flag(flags, TR_RES_ACID);
@@ -59,8 +57,7 @@ void player_immunity(player_type *creature_ptr, TrFlags &flags)
  */
 void tim_player_immunity(player_type *creature_ptr, TrFlags &flags)
 {
-    for (int i = 0; i < TR_FLAG_SIZE; i++)
-        flags[i] = 0L;
+    flags.fill(0U);
 
     if (creature_ptr->special_defense & DEFENSE_ACID)
         add_flag(flags, TR_RES_ACID);
@@ -83,8 +80,7 @@ void tim_player_immunity(player_type *creature_ptr, TrFlags &flags)
  */
 void known_obj_immunity(player_type *creature_ptr, TrFlags &flags)
 {
-    for (int i = 0; i < TR_FLAG_SIZE; i++)
-        flags[i] = 0L;
+    flags.fill(0U);
 
     for (int i = INVEN_MAIN_HAND; i < INVEN_TOTAL; i++) {
         TrFlags o_flags;
@@ -114,8 +110,7 @@ void known_obj_immunity(player_type *creature_ptr, TrFlags &flags)
  */
 void player_vulnerability_flags(player_type *creature_ptr, TrFlags &flags)
 {
-    for (int i = 0; i < TR_FLAG_SIZE; i++)
-        flags[i] = 0L;
+    flags.fill(0U);
 
     if (creature_ptr->muta.has(MUTA::VULN_ELEM) || (creature_ptr->special_defense & KATA_KOUKIJIN)) {
         add_flag(flags, TR_RES_ACID);
index 1e55e25..fb0447c 100644 (file)
@@ -28,8 +28,7 @@ void tim_player_flags(player_type *creature_ptr, TrFlags &flags)
     BIT_FLAGS race_class_flag = FLAG_CAUSE_CLASS;
     set_bits(race_class_flag, FLAG_CAUSE_RACE);
 
-    for (int i = 0; i < TR_FLAG_SIZE; i++)
-        flags[i] = 0L;
+    flags.fill(0U);
 
     if (is_oppose_acid(creature_ptr) && none_bits(has_immune_acid(creature_ptr), (race_class_flag | tmp_effect_flag)))
         add_flag(flags, TR_RES_ACID);
index 0f67dbc..73cd2a0 100644 (file)
@@ -17,8 +17,7 @@
  */
 void get_bloody_moon_flags(object_type *o_ptr)
 {
-    for (int i = 0; i < TR_FLAG_SIZE; i++)
-        o_ptr->art_flags[i] = a_info[ART_BLOOD].flags[i];
+    o_ptr->art_flags = a_info[ART_BLOOD].flags;
 
     int dummy = randint1(2) + randint1(2);
     for (int i = 0; i < dummy; i++) {
index 5252f87..f1377bc 100644 (file)
@@ -251,8 +251,7 @@ bool curse_armor(player_type *owner_ptr)
     o_ptr->dd = 0;
     o_ptr->ds = 0;
 
-    for (int i = 0; i < TR_FLAG_SIZE; i++)
-        o_ptr->art_flags[i] = 0;
+    o_ptr->art_flags.fill(0U);
 
     /* Curse it */
     o_ptr->curse_flags.set(TRC::CURSED);
index 504be09..3ad8159 100644 (file)
@@ -85,7 +85,7 @@ void store_delete(void)
 
     if ((st_ptr->stock[what].tval == TV_ROD) || (st_ptr->stock[what].tval == TV_WAND))
         st_ptr->stock[what].pval -= num * st_ptr->stock[what].pval / st_ptr->stock[what].number;
-    
+
     store_item_increase(what, -num);
     store_item_optimize(what);
 }
@@ -227,9 +227,8 @@ bool store_object_similar(object_type *o_ptr, object_type *j_ptr)
     if (o_ptr->is_artifact() || j_ptr->is_artifact())
         return false;
 
-    for (int i = 0; i < TR_FLAG_SIZE; i++)
-        if (o_ptr->art_flags[i] != j_ptr->art_flags[i])
-            return false;
+    if (o_ptr->art_flags != j_ptr->art_flags)
+        return false;
 
     if (o_ptr->xtra1 || j_ptr->xtra1)
         return false;
index 8aa09da..65d0899 100644 (file)
@@ -33,6 +33,7 @@
  * </pre>
  */
 
+#include <array>
 #include <cassert>
 #include <stdint.h>
 
@@ -190,7 +191,7 @@ typedef int16_t ACTION_SKILL_POWER; /*!< 行動技能値 */
 
 typedef int16_t FEAT_PRIORITY; /*!< 地形の縮小表示優先順位 */
 
-using TrFlags = BIT_FLAGS[TR_FLAG_SIZE];
+using TrFlags = std::array<BIT_FLAGS, TR_FLAG_SIZE>;
 
 enum process_result {
     PROCESS_FALSE = 0,