summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBardur Arantsson <bardur@scientician.net>2015-03-22 18:38:09 +0100
committerBardur Arantsson <bardur@scientician.net>2015-03-22 18:38:09 +0100
commit97c42872e9da98a7aa4a1d5fe70bfc1e8adfa68c (patch)
tree74ca3b6b0cff3443650ca3e82fb010390a00e147 /src
parent92344ee3f306ecdfd1da4365ffc5cab6eaa29afd (diff)
Split school_book_type out of types.h
- Rename to school_book - Remove pointless spell_idx_list indirection
Diffstat (limited to 'src')
-rw-r--r--src/q_library.cc2
-rw-r--r--src/school_book.hpp15
-rw-r--r--src/school_book_fwd.hpp3
-rw-r--r--src/spell_idx_list.hpp8
-rw-r--r--src/spell_idx_list_fwd.h3
-rw-r--r--src/spells3.cc10
-rw-r--r--src/spells4.cc66
-rw-r--r--src/spells4.hpp5
-rw-r--r--src/types.h9
-rw-r--r--src/types_fwd.h1
10 files changed, 51 insertions, 71 deletions
diff --git a/src/q_library.cc b/src/q_library.cc
index f8f7fb29..8cbadbfe 100644
--- a/src/q_library.cc
+++ b/src/q_library.cc
@@ -156,7 +156,7 @@ static void quest_library_finalize_book()
int i = 0;
for (i = 1; i <= 3; i++)
{
- school_book_type *school_book = school_books_at(BOOK_PLAYER);
+ school_book *school_book = school_books_at(BOOK_PLAYER);
school_book_add_spell(school_book, library_quest_book_get_slot(i));
}
}
diff --git a/src/school_book.hpp b/src/school_book.hpp
new file mode 100644
index 00000000..51d3e6a7
--- /dev/null
+++ b/src/school_book.hpp
@@ -0,0 +1,15 @@
+#pragma once
+
+#include "h-basic.h"
+
+#include <vector>
+
+/**
+ * School book.
+ */
+struct school_book {
+ /**
+ * Indexes of all the spells in the book.
+ */
+ std::vector<s32b> spell_idxs;
+};
diff --git a/src/school_book_fwd.hpp b/src/school_book_fwd.hpp
new file mode 100644
index 00000000..46363da6
--- /dev/null
+++ b/src/school_book_fwd.hpp
@@ -0,0 +1,3 @@
+#pragma once
+
+struct school_book;
diff --git a/src/spell_idx_list.hpp b/src/spell_idx_list.hpp
deleted file mode 100644
index 5f817452..00000000
--- a/src/spell_idx_list.hpp
+++ /dev/null
@@ -1,8 +0,0 @@
-#pragma once
-
-#include "spell_idx_list_fwd.h"
-#include <vector>
-
-struct spell_idx_list {
- std::vector<s32b> v;
-};
diff --git a/src/spell_idx_list_fwd.h b/src/spell_idx_list_fwd.h
deleted file mode 100644
index b961eb4e..00000000
--- a/src/spell_idx_list_fwd.h
+++ /dev/null
@@ -1,3 +0,0 @@
-#pragma once
-
-struct spell_idx_list;
diff --git a/src/spells3.cc b/src/spells3.cc
index 2e709391..00cdfcc4 100644
--- a/src/spells3.cc
+++ b/src/spells3.cc
@@ -11,7 +11,6 @@
#include "object2.hpp"
#include "skills.hpp"
#include "spell_type.hpp"
-#include "spell_idx_list.hpp"
#include "spells1.hpp"
#include "spells2.hpp"
#include "spells4.hpp"
@@ -2909,15 +2908,14 @@ casting_result tulkas_whirlwind()
int udun_in_book(s32b sval, s32b pval)
{
int count = 0;
- school_book_type *school_book;
random_book_setup(sval, pval);
/* Get the school book */
- school_book = school_books_at(sval);
+ school_book *school_book = school_books_at(sval);
/* Go through spells */
- for (auto spell_idx : school_book->spell_idx_list->v) {
+ for (auto spell_idx : school_book->spell_idxs) {
spell_type *spell = spell_at(spell_idx);
for (auto school_idx : spell_type_get_schools(spell))
{
@@ -2939,10 +2937,10 @@ int levels_in_book(s32b sval, s32b pval)
random_book_setup(sval, pval);
/* Get the school book */
- school_book_type *school_book = school_books_at(sval);
+ school_book *school_book = school_books_at(sval);
/* Parse all spells */
- for (auto spell_idx : school_book->spell_idx_list->v)
+ for (auto spell_idx : school_book->spell_idxs)
{
spell_type *spell = spell_at(spell_idx);
levels += spell_type_skill_level(spell);
diff --git a/src/spells4.cc b/src/spells4.cc
index d4aa7a72..45eb8c15 100644
--- a/src/spells4.cc
+++ b/src/spells4.cc
@@ -5,8 +5,8 @@
#include "gods.hpp"
#include "lua_bind.hpp"
#include "options.hpp"
+#include "school_book.hpp"
#include "spell_type.hpp"
-#include "spell_idx_list.hpp"
#include "spells3.hpp"
#include "spells5.hpp"
#include "spells6.hpp"
@@ -18,7 +18,11 @@
#include <cassert>
#include <sstream>
-school_book_type school_books[SCHOOL_BOOKS_SIZE];
+static std::array<school_book, SCHOOL_BOOKS_SIZE> &school_books() {
+ static std::array<school_book, SCHOOL_BOOKS_SIZE> *instance = new std::array<school_book, SCHOOL_BOOKS_SIZE>;
+ return *instance;
+}
+
s32b SCHOOL_AIR;
s32b SCHOOL_AULE;
@@ -106,35 +110,23 @@ void print_spell_desc(int s, int y)
}
}
-school_book_type *school_books_at(int i)
+school_book *school_books_at(int i)
{
assert(i >= 0);
assert(i < SCHOOL_BOOKS_SIZE);
- return &school_books[i];
-}
-
-static void school_book_init(school_book_type *school_book)
-{
- school_book->spell_idx_list = new spell_idx_list();
+ return &school_books()[i];
}
-void school_book_add_spell(school_book_type *school_book, s32b spell_idx)
+void school_book_add_spell(school_book *school_book, s32b spell_idx)
{
assert(school_book != nullptr);
- assert(school_book->spell_idx_list != nullptr);
- school_book->spell_idx_list->v.push_back(spell_idx);
+ school_book->spell_idxs.insert(std::begin(school_book->spell_idxs), spell_idx);
}
int school_book_length(int sval)
{
- school_book_type *school_book = school_books_at(sval);
-
- if (sval == BOOK_RANDOM)
- {
- return 1;
- }
-
- return school_book->spell_idx_list->v.size();
+ school_book *school_book = school_books_at(sval);
+ return school_book->spell_idxs.size();
}
int spell_x(int sval, int pval, int i)
@@ -147,38 +139,30 @@ int spell_x(int sval, int pval, int i)
}
else
{
- school_book_type *school_book = school_books_at(sval);
- return school_book->spell_idx_list->v.at(i);
+ school_book *school_book = school_books_at(sval);
+ return school_book->spell_idxs.at(i);
}
}
bool_ school_book_contains_spell(int sval, s32b spell_idx)
{
random_book_setup(sval, spell_idx);
- school_book_type *school_book = school_books_at(sval);
- return (school_book->spell_idx_list->v.end() !=
- std::find(school_book->spell_idx_list->v.begin(),
- school_book->spell_idx_list->v.end(),
+ school_book *school_book = school_books_at(sval);
+ return (school_book->spell_idxs.end() !=
+ std::find(school_book->spell_idxs.begin(),
+ school_book->spell_idxs.end(),
spell_idx));
}
-void push_spell(int book_idx, s32b spell_idx)
+static void push_spell(int book_idx, s32b spell_idx)
{
- school_book_type *school_book = school_books_at(book_idx);
+ school_book *school_book = school_books_at(book_idx);
assert(school_book != NULL);
school_book_add_spell(school_book, spell_idx);
}
void init_school_books()
{
- int i;
-
- /* Initialize the new school books */
- for (i = 0; i<SCHOOL_BOOKS_SIZE; i++)
- {
- school_book_init(&school_books[i]);
- }
-
/* Note: We're adding the spells in the reverse order that
they appear in each book. This is because the list
operations insert at the front. */
@@ -400,8 +384,9 @@ void random_book_setup(s16b sval, s32b spell_idx)
{
if (sval == BOOK_RANDOM)
{
- school_book_type *school_book = school_books_at(sval);
- school_book->spell_idx_list->v.at(0) = spell_idx;
+ school_book *school_book = school_books_at(sval);
+ school_book->spell_idxs.clear();
+ school_book->spell_idxs.push_back(spell_idx);
}
}
@@ -465,15 +450,14 @@ int print_book(s16b sval, s32b pval, object_type *obj)
{
int y = 2;
int i;
- school_book_type *school_book;
random_book_setup(sval, pval);
- school_book = school_books_at(sval);
+ school_book *school_book = school_books_at(sval);
/* Parse all spells */
i = 0;
- for (auto spell_idx : school_book->spell_idx_list->v)
+ for (auto spell_idx : school_book->spell_idxs)
{
byte color = TERM_L_DARK;
bool_ is_ok;
diff --git a/src/spells4.hpp b/src/spells4.hpp
index b358b571..7a8c8985 100644
--- a/src/spells4.hpp
+++ b/src/spells4.hpp
@@ -1,6 +1,7 @@
#pragma once
#include "angband.h"
+#include "school_book.hpp"
extern s32b SCHOOL_AIR;
extern s32b SCHOOL_AULE;
@@ -30,8 +31,8 @@ extern s32b SCHOOL_YAVANNA;
void print_spell_desc(int s, int y);
void init_school_books();
-school_book_type *school_books_at(int sval);
-void school_book_add_spell(school_book_type *school_book, s32b spell_idx);
+school_book *school_books_at(int sval);
+void school_book_add_spell(school_book *school_book, s32b spell_idx);
void random_book_setup(s16b sval, s32b spell_idx);
int print_spell(cptr label, byte color, int y, s32b s);
int print_book(s16b sval, s32b pval, object_type *obj);
diff --git a/src/types.h b/src/types.h
index ab62c208..ff944c0e 100644
--- a/src/types.h
+++ b/src/types.h
@@ -1,7 +1,6 @@
/* File: types.h */
#include "types_fwd.h"
-#include "spell_idx_list_fwd.h"
/* Purpose: global type declarations */
@@ -2472,14 +2471,6 @@ struct school_type
};
/*
- * School book.
- */
-typedef struct school_book_type school_book_type;
-struct school_book_type {
- struct spell_idx_list *spell_idx_list;
-};
-
-/*
* Desc for GF_FOO
*/
typedef struct gf_name_type gf_name_type;
diff --git a/src/types_fwd.h b/src/types_fwd.h
index 3a07d419..d1dbc7e0 100644
--- a/src/types_fwd.h
+++ b/src/types_fwd.h
@@ -69,7 +69,6 @@ struct skill_type;
struct spell_type;
struct school_provider_list;
struct school_type;
-struct school_book_type;
struct gf_name_type;
struct timer_type;
struct ability_type;