1 /* 2 * Copyright 2009, Ingo Weinhold, ingo_weinhold@gmx.de. 3 * Distributed under the terms of the MIT License. 4 */ 5 #ifndef _PACKAGE__HPKG__PRIVATE__STACKER_H_ 6 #define _PACKAGE__HPKG__PRIVATE__STACKER_H_ 7 8 9 namespace BPackageKit { 10 11 namespace BHPKG { 12 13 namespace BPrivate { 14 15 16 template<typename Type> 17 class Stacker { 18 public: 19 Stacker(Type*& location, Type* element) 20 : 21 fLocation(&location), 22 fPreviousElement(location) 23 { 24 *fLocation = element; 25 } 26 27 Stacker(Type** location, Type* element) 28 : 29 fLocation(location), 30 fPreviousElement(*location) 31 { 32 *fLocation = element; 33 } 34 35 ~Stacker() 36 { 37 if (fLocation != NULL) 38 *fLocation = fPreviousElement; 39 } 40 41 private: 42 Type** fLocation; 43 Type* fPreviousElement; 44 }; 45 46 47 } // namespace BPrivate 48 49 } // namespace BHPKG 50 51 } // namespace BPackageKit 52 53 54 #endif // _PACKAGE__HPKG__PRIVATE__STACKER_H_ 55