mirror of
				https://github.com/isledecomp/isle.git
				synced 2025-10-26 01:44:19 +00:00 
			
		
		
		
	 97b3dcaa2c
			
		
	
	97b3dcaa2c
	
	
	
		
			
			* Beta addrs * Streamer changes * Typo and comment. One more beta addr * Rename member to m_controllers
		
			
				
	
	
		
			229 lines
		
	
	
		
			6.9 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			229 lines
		
	
	
		
			6.9 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| #ifndef MXATOM_H
 | |
| #define MXATOM_H
 | |
| 
 | |
| #include "mxstl/stlcompat.h"
 | |
| #include "mxstring.h"
 | |
| #include "mxtypes.h"
 | |
| 
 | |
| // Counts the number of existing MxAtomId objects based
 | |
| // on the matching char* string. A <map> seems fit for purpose here:
 | |
| // We have an MxString as a key and MxU16 as the value.
 | |
| // And yet a <set> is the best match. The malloc in MxOmni::Create
 | |
| // for the _Nil node asks for more bytes than a regular node if a <map>
 | |
| // is used, but all nodes are 20 bytes wide with a <set>.
 | |
| // Also: the increment/decrement methods suggest a custom type was used
 | |
| // for the combined key_value_pair, which doesn't seem possible with <map>.
 | |
| 
 | |
| // SIZE 0x14
 | |
| class MxAtom {
 | |
| public:
 | |
| 	// always inlined
 | |
| 	// FUNCTION: BETA10 0x10123720
 | |
| 	MxAtom(const char* p_str)
 | |
| 	{
 | |
| 		m_key = p_str;
 | |
| 		m_value = 0;
 | |
| 	}
 | |
| 
 | |
| 	void Inc();
 | |
| 	void Dec();
 | |
| 
 | |
| 	// FUNCTION: BETA10 0x101236d0
 | |
| 	MxString& GetKey() { return m_key; }
 | |
| 
 | |
| 	// SYNTHETIC: BETA10 0x10124a50
 | |
| 	// MxAtom::`scalar deleting destructor'
 | |
| 
 | |
| private:
 | |
| 	MxString m_key; // 0x00
 | |
| 	MxU16 m_value;  // 0x10
 | |
| };
 | |
| 
 | |
| struct MxAtomCompare {
 | |
| 	// FUNCTION: LEGO1 0x100ad120
 | |
| 	// FUNCTION: BETA10 0x10123980
 | |
| 	int operator()(MxAtom* const& p_val0, MxAtom* const& p_val1) const
 | |
| 	{
 | |
| 		return strcmp(p_val0->GetKey().GetData(), p_val1->GetKey().GetData()) > 0;
 | |
| 	}
 | |
| };
 | |
| 
 | |
| class MxAtomSet : public set<MxAtom*, MxAtomCompare> {};
 | |
| 
 | |
| enum LookupMode {
 | |
| 	e_exact = 0,
 | |
| 	e_lowerCase,
 | |
| 	e_upperCase,
 | |
| 	e_lowerCase2,
 | |
| };
 | |
| 
 | |
| // SIZE 0x04
 | |
| class MxAtomId {
 | |
| public:
 | |
| 	MxAtomId(const char*, LookupMode);
 | |
| 	~MxAtomId();
 | |
| 
 | |
| 	MxAtomId& operator=(const MxAtomId& p_atomId);
 | |
| 
 | |
| 	// FUNCTION: BETA10 0x100178d0
 | |
| 	MxBool operator==(const MxAtomId& p_atomId) const { return this->m_internal == p_atomId.m_internal; }
 | |
| 
 | |
| #ifdef COMPAT_MODE
 | |
| 	// Required for modern compilers.
 | |
| 	// MSVC 4.20 uses a synthetic function from INCLUDE/UTILITY that inverts operator==
 | |
| 	MxBool operator!=(const MxAtomId& p_atomId) const { return this->m_internal != p_atomId.m_internal; }
 | |
| #endif
 | |
| 
 | |
| 	// TODO:
 | |
| 	// BETA10 0x1007dc20 operator==
 | |
| 	// BETA10 0x10096970 operator!=
 | |
| 
 | |
| 	// FUNCTION: BETA10 0x10146dd0
 | |
| 	MxBool operator==(const char* p_internal) const { return p_internal && !strcmp(m_internal, p_internal); }
 | |
| 
 | |
| 	// FUNCTION: BETA10 0x10025d40
 | |
| 	MxAtomId() { this->m_internal = 0; }
 | |
| 
 | |
| 	void Clear();
 | |
| 
 | |
| 	// FUNCTION: BETA10 0x100735e0
 | |
| 	const char* GetInternal() const { return m_internal; }
 | |
| 
 | |
| private:
 | |
| 	// FUNCTION: BETA10 0x101236f0
 | |
| 	MxAtomId& operator=(const MxString& p_key)
 | |
| 	{
 | |
| 		m_internal = p_key.GetData();
 | |
| 		return *this;
 | |
| 	}
 | |
| 
 | |
| 	MxAtom* GetAtom(const char*, LookupMode);
 | |
| 	void Destroy();
 | |
| 
 | |
| 	const char* m_internal; // 0x00
 | |
| };
 | |
| 
 | |
| // SYNTHETIC: BETA10 0x1002b520
 | |
| // ??9@YAHABVMxAtomId@@0@Z
 | |
| // aka MxAtomId::operator!=
 | |
| 
 | |
| // SYNTHETIC: LEGO1 0x100ad170
 | |
| // MxAtom::~MxAtom
 | |
| 
 | |
| // clang-format off
 | |
| // TEMPLATE: LEGO1 0x100ad480
 | |
| // _Tree<MxAtom *,MxAtom *,set<MxAtom *,MxAtomCompare,allocator<MxAtom *> >::_Kfn,MxAtomCompare,allocator<MxAtom *> >::iterator::_Dec
 | |
| // clang-format on
 | |
| 
 | |
| // clang-format off
 | |
| // TEMPLATE: LEGO1 0x100ad780
 | |
| // _Tree<MxAtom *,MxAtom *,set<MxAtom *,MxAtomCompare,allocator<MxAtom *> >::_Kfn,MxAtomCompare,allocator<MxAtom *> >::_Lbound
 | |
| // clang-format on
 | |
| 
 | |
| // clang-format off
 | |
| // TEMPLATE: LEGO1 0x100ad4d0
 | |
| // _Tree<MxAtom *,MxAtom *,set<MxAtom *,MxAtomCompare,allocator<MxAtom *> >::_Kfn,MxAtomCompare,allocator<MxAtom *> >::_Insert
 | |
| // clang-format on
 | |
| 
 | |
| // clang-format off
 | |
| // TEMPLATE: BETA10 0x101237a0
 | |
| // _Tree<MxAtom *,MxAtom *,set<MxAtom *,MxAtomCompare,allocator<MxAtom *> >::_Kfn,MxAtomCompare,allocator<MxAtom *> >::const_iterator::operator*
 | |
| // clang-format on
 | |
| 
 | |
| // clang-format off
 | |
| // TEMPLATE: LEGO1 0x100af6d0
 | |
| // TEMPLATE: BETA10 0x10131170
 | |
| // _Tree<MxAtom *,MxAtom *,set<MxAtom *,MxAtomCompare,allocator<MxAtom *> >::_Kfn,MxAtomCompare,allocator<MxAtom *> >::~_Tree<MxAtom *,MxAtom *,set<MxAtom *,MxAtomCompare,allocator<MxAtom *> >::_Kfn,MxAtomCompare,allocator<MxAtom *> >
 | |
| // clang-format on
 | |
| 
 | |
| // clang-format off
 | |
| // TEMPLATE: LEGO1 0x100af7a0
 | |
| // _Tree<MxAtom *,MxAtom *,set<MxAtom *,MxAtomCompare,allocator<MxAtom *> >::_Kfn,MxAtomCompare,allocator<MxAtom *> >::iterator::_Inc
 | |
| // clang-format on
 | |
| 
 | |
| // clang-format off
 | |
| // TEMPLATE: LEGO1 0x100af7e0
 | |
| // TEMPLATE: BETA10 0x10131210
 | |
| // _Tree<MxAtom *,MxAtom *,set<MxAtom *,MxAtomCompare,allocator<MxAtom *> >::_Kfn,MxAtomCompare,allocator<MxAtom *> >::erase
 | |
| // clang-format on
 | |
| 
 | |
| // TEMPLATE: BETA10 0x10131460
 | |
| // _Tree<MxAtom *,MxAtom *,set<MxAtom *,MxAtomCompare,allocator<MxAtom *> >::_Kfn,MxAtomCompare,allocator<MxAtom *>
 | |
| // >::size
 | |
| 
 | |
| // clang-format off
 | |
| // TEMPLATE: LEGO1 0x100afc40
 | |
| // _Tree<MxAtom *,MxAtom *,set<MxAtom *,MxAtomCompare,allocator<MxAtom *> >::_Kfn,MxAtomCompare,allocator<MxAtom *> >::_Erase
 | |
| // clang-format on
 | |
| 
 | |
| // clang-format off
 | |
| // TEMPLATE: LEGO1 0x100afc80
 | |
| // TEMPLATE: BETA10 0x10132080
 | |
| // set<MxAtom *,MxAtomCompare,allocator<MxAtom *> >::~set<MxAtom *,MxAtomCompare,allocator<MxAtom *> >
 | |
| // clang-format on
 | |
| 
 | |
| // TEMPLATE: LEGO1 0x100afe40
 | |
| // TEMPLATE: BETA10 0x101320e0
 | |
| // Set<MxAtom *,MxAtomCompare>::~Set<MxAtom *,MxAtomCompare>
 | |
| 
 | |
| // TEMPLATE: BETA10 0x10132140
 | |
| // set<MxAtom *,MxAtomCompare,allocator<MxAtom *> >::begin
 | |
| 
 | |
| // clang-format off
 | |
| // GLOBAL: LEGO1 0x101013f0
 | |
| // GLOBAL: BETA10 0x10201264
 | |
| // _Tree<MxAtom *,MxAtom *,set<MxAtom *,MxAtomCompare,allocator<MxAtom *> >::_Kfn,MxAtomCompare,allocator<MxAtom *> >::_Nil
 | |
| // clang-format on
 | |
| 
 | |
| // TEMPLATE: BETA10 0x10132170
 | |
| // _Tree<MxAtom *,MxAtom *,set<MxAtom *,MxAtomCompare,allocator<MxAtom *> >::_Kfn,MxAtomCompare,allocator<MxAtom *>
 | |
| // >::begin
 | |
| 
 | |
| // TEMPLATE: BETA10 0x101321d0
 | |
| // set<MxAtom *,MxAtomCompare,allocator<MxAtom *> >::size
 | |
| 
 | |
| // TEMPLATE: BETA10 0x101321f0
 | |
| // set<MxAtom *,MxAtomCompare,allocator<MxAtom *> >::erase
 | |
| 
 | |
| // TEMPLATE: BETA10 0x101237f0
 | |
| // set<MxAtom *,MxAtomCompare,allocator<MxAtom *> >::end
 | |
| 
 | |
| // TEMPLATE: BETA10 0x101238b0
 | |
| // set<MxAtom *,MxAtomCompare,allocator<MxAtom *> >::find
 | |
| 
 | |
| // clang-format off
 | |
| // TEMPLATE: BETA10 0x101238e0
 | |
| // _Tree<MxAtom *,MxAtom *,set<MxAtom *,MxAtomCompare,allocator<MxAtom *> >::_Kfn,MxAtomCompare,allocator<MxAtom *> >::find
 | |
| // clang-format on
 | |
| 
 | |
| // SYNTHETIC: BETA10 0x10123bf0
 | |
| // MxAtom::~MxAtom
 | |
| 
 | |
| // TEMPLATE: BETA10 0x10123c50
 | |
| // set<MxAtom *,MxAtomCompare,allocator<MxAtom *> >::insert
 | |
| 
 | |
| // SYNTHETIC: BETA10 0x10130fc0
 | |
| // MxAtomSet::MxAtomSet
 | |
| 
 | |
| // TEMPLATE: BETA10 0x10131030
 | |
| // Set<MxAtom *,MxAtomCompare>::Set<MxAtom *,MxAtomCompare>
 | |
| 
 | |
| // clang-format off
 | |
| // TEMPLATE: BETA10 0x101310a0
 | |
| // set<MxAtom *,MxAtomCompare,allocator<MxAtom *> >::set<MxAtom *,MxAtomCompare,allocator<MxAtom *> >
 | |
| 
 | |
| // TEMPLATE: BETA10 0x10131120
 | |
| // _Tree<MxAtom *,MxAtom *,set<MxAtom *,MxAtomCompare,allocator<MxAtom *> >::_Kfn,MxAtomCompare,allocator<MxAtom *> >::_Tree<MxAtom *,MxAtom *,set<MxAtom *,MxAtomCompare,allocator<MxAtom *> >::_Kfn,MxAtomCompare,allocator<MxAtom *> >
 | |
| 
 | |
| // TEMPLATE: BETA10 0x10131f30
 | |
| // _Tree<MxAtom *,MxAtom *,set<MxAtom *,MxAtomCompare,allocator<MxAtom *> >::_Kfn,MxAtomCompare,allocator<MxAtom *> >::_Init
 | |
| // clang-format on
 | |
| 
 | |
| // SYNTHETIC: BETA10 0x101322a0
 | |
| // MxAtomSet::`scalar deleting destructor'
 | |
| 
 | |
| // SYNTHETIC: BETA10 0x101322e0
 | |
| // MxAtomSet::~MxAtomSet
 | |
| 
 | |
| #endif // MXATOM_H
 |