summaryrefslogtreecommitdiff
path: root/src/autoreplace_base.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/autoreplace_base.h')
-rw-r--r--src/autoreplace_base.h38
1 files changed, 38 insertions, 0 deletions
diff --git a/src/autoreplace_base.h b/src/autoreplace_base.h
new file mode 100644
index 000000000..065cc5661
--- /dev/null
+++ b/src/autoreplace_base.h
@@ -0,0 +1,38 @@
+/* $Id$ */
+
+/** @file autoreplace_base.h Base class for autoreplaces/autorenews. */
+
+#ifndef AUTOREPLACE_BASE_H
+#define AUTOREPLACE_BASE_H
+
+#include "oldpool.h"
+#include "autoreplace_type.h"
+
+/**
+ * Memory pool for engine renew elements. DO NOT USE outside of engine.c. Is
+ * placed here so the only exception to this rule, the saveload code, can use
+ * it.
+ */
+DECLARE_OLD_POOL(EngineRenew, EngineRenew, 3, 8000)
+
+/**
+ * Struct to store engine replacements. DO NOT USE outside of engine.c. Is
+ * placed here so the only exception to this rule, the saveload code, can use
+ * it.
+ */
+struct EngineRenew : PoolItem<EngineRenew, EngineRenewID, &_EngineRenew_pool> {
+ EngineID from;
+ EngineID to;
+ EngineRenew *next;
+ GroupID group_id;
+
+ EngineRenew(EngineID from = INVALID_ENGINE, EngineID to = INVALID_ENGINE) : from(from), to(to), next(NULL) {}
+ ~EngineRenew() { this->from = INVALID_ENGINE; }
+
+ inline bool IsValid() const { return this->from != INVALID_ENGINE; }
+};
+
+#define FOR_ALL_ENGINE_RENEWS_FROM(er, start) for (er = GetEngineRenew(start); er != NULL; er = (er->index + 1U < GetEngineRenewPoolSize()) ? GetEngineRenew(er->index + 1U) : NULL) if (er->IsValid())
+#define FOR_ALL_ENGINE_RENEWS(er) FOR_ALL_ENGINE_RENEWS_FROM(er, 0)
+
+#endif /* AUTOREPLACE_BASE_H */