/* ** Command & Conquer Generals(tm) ** Copyright 2025 Electronic Arts Inc. ** ** This program is free software: you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program. If not, see . */ //////////////////////////////////////////////////////////////////////////////// // // // (c) 2001-2003 Electronic Arts Inc. // // // //////////////////////////////////////////////////////////////////////////////// // LatchRestore.h ///////////////////////////////////////////////////////////////////////////////// // Author: John K. McDonald, Jr. // 09/19/2002 // DO NOT DISTRIBUTE /////////////////////////////////////////////////////////////////////////////////////////////////// #pragma once #ifndef __LATCHRESTORE_H__ #define __LATCHRESTORE_H__ /* The purpose of the LatchRestore class is to allow you to override member variables for the scope of a function. Here's the code that this saves: void Foo::func(Team *overrideTeam) { Team *saveTeam = m_saveTeam; m_saveTeam = overrideTeam; // ... stuff ... if (fu) { // early return m_saveTeam = saveTeam; return true; } if (bar) { // early return m_saveTeam = saveTeam; return true; } if (munkees) { // early return m_saveTeam = saveTeam; return true; } m_saveTeam = saveTeam; return false; } Instead, the code would simply be: void Foo::func(Team *overrideTeam) { LatchRestore latch(m_saveTeam, overrideTeam); // ... stuff ... if (fu) return true; if (bar) return true; if (munkees) return true; return false; } */ template class LatchRestore { protected: T valueToRestore; T& whereToRestore; public: LatchRestore(T& dest, const T& src) : whereToRestore(dest) { valueToRestore = dest; dest = src; } virtual ~LatchRestore() { whereToRestore = valueToRestore; } }; #endif /* __LATCHRESTORE_H__ */