(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 */