Правильный пример с использованием регистров и лучшего объяснения был бы лучше. Я предполагаю, что вы хотите переназначить одно имя регистра в другое. Предложение:
class Register {
public:
enum class UserName {
REG_IO0,
REG_MEM1
};
enum class CPUName {
REG_INT0,
REG_INT1
};
void setMapping(UserName from, CPUName to); // store the mapping
CPUName getMapping(UserName name) const; // retrieve the mapping
private:
std::map<UserName, CPUName> m_registerMap;
};
Если вы хотите, вы можете реализовать методы get / set для регистров в этом классе, если вы храните индексы / адреса регистров. Используйте шаблоны или перегрузите их для разных типов данных.
Объявите кортеж (зона, дата)
как уникальный в вашем операторе CREATE. Это заставит INSERT ... ON DUPLICATE UPDATE работать должным образом:
CREATE TABLE `stats` (
`id` int(11) NOT NULL auto_increment,
`zone` varchar(100) default NULL,
`date` date default NULL,
`hits` int(100) default NULL,
PRIMARY KEY (`id`),
UNIQUE (`zone`, `date`)
) ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=latin1;
INSERT INTO stats (zone, date, hits) values ('zone1', 'date1', 1) ON DUPLICATE KEY UPDATE hits = hits + 1;
$result = mysql_query("SELECT id FROM stats WHERE zone=$zone AND date=$today LIMIT 1");
if(mysql_num_rows($result)) {
$id = mysql_result($result,0);
mysql_query("UPDATE stats SET hits=hits+1 WHERE id=$id");
} else {
mysql_query("INSERT INTO stats (zone, date, hits) VALUES ($zone, $today, 1)");
}
Что-то вроде этого, если я правильно вас истолковал ... это совершенно непроверено. Вы можете выяснить, что это за переменные.