src/newgrf_string_type.h
author rubidium
Tue, 15 Jan 2008 13:19:49 +0000
changeset 8298 681e3c5f50ad
permissions -rw-r--r--
(svn r11862) -Fix [FS#1559]: when two NewGRFs 'fight' to define the same cargo it could happen that the strings are defined by one cargo and the 'action2' by another and when one assumes that both come from the same NewGRF... So store the GRF ID with the strings. To be extra sure add the same protection mechanism to industries and towns too.
/* $Id$ */

/** @file newgrf_string_type.h */

#ifndef NEWGRF_STRING_TYPE_H
#define NEWGRF_STRING_TYPE_H

#include "strings_type.h"

/**
 * A string with the required information to perform a GRF string remapping.
 */
struct GRFMappedStringID
{
private:
	/** The GRF ID associated to the to-be-remapped string */
	uint32 grfid;
	/** The string; when grfid != 0 it should be remapped */
	StringID string;

public:
	/**
	 * Create the struct.
	 * @param str    the string to store (or remap)
	 * @param grf_id the GRF to remap it with
	 */
	GRFMappedStringID(StringID str, uint32 grf_id) : grfid(grf_id), string(str) {}

	/**
	 * An empty string.
	 */
	GRFMappedStringID() {}

	/** Cast operator, returns the string */
	inline operator StringID() const
	{
		return string;
	}

	/** Assigns the string and resets the GRF ID. */
	GRFMappedStringID& operator = (StringID str)
	{
		string = str;
		grfid = 0;
		return *this;
	}

	/**
	 * Map the string.
	 */
	void MapString();
};

#endif /* NEWGRF_STRING_TYPE_H */