mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-10-31 21:21:06 +01:00 
			
		
		
		
	Moved IM_NEW, IM_DELETE helpers to imgui.h for convenient use by back-ends and user code.
This commit is contained in:
		
							
								
								
									
										10
									
								
								imgui.h
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								imgui.h
									
									
									
									
									
								
							| @@ -1177,6 +1177,16 @@ public: | |||||||
|     inline bool         contains(const value_type& v) const             { const T* data = Data;  const T* data_end = Data + Size; while (data < data_end) if (*data++ == v) return true; return false; } |     inline bool         contains(const value_type& v) const             { const T* data = Data;  const T* data_end = Data + Size; while (data < data_end) if (*data++ == v) return true; return false; } | ||||||
| }; | }; | ||||||
|  |  | ||||||
|  | // Helper: IM_NEW(), IM_PLACEMENT_NEW(), IM_DELETE() macros to call MemAlloc + Placement New, Placement Delete + MemFree | ||||||
|  | // We call C++ constructor on own allocated memory via the placement "new(ptr) Type()" syntax. | ||||||
|  | // Defining a custom placement new() with a dummy parameter allows us to bypass including <new> which on some platforms complains when user has disabled exceptions. | ||||||
|  | struct ImNewDummy {}; | ||||||
|  | inline void* operator new(size_t, ImNewDummy, void* ptr) { return ptr; } | ||||||
|  | inline void  operator delete(void*, ImNewDummy, void*)   {} // This is only required so we can use the symetrical new() | ||||||
|  | #define IM_PLACEMENT_NEW(_PTR)              new(ImNewDummy(), _PTR) | ||||||
|  | #define IM_NEW(_TYPE)                       new(ImNewDummy(), ImGui::MemAlloc(sizeof(_TYPE))) _TYPE | ||||||
|  | template<typename T> void IM_DELETE(T*& p)  { if (p) { p->~T(); ImGui::MemFree(p); p = NULL; } } | ||||||
|  |  | ||||||
| // Helper: execute a block of code at maximum once a frame. Convenient if you want to quickly create an UI within deep-nested code that runs multiple times every frame. | // Helper: execute a block of code at maximum once a frame. Convenient if you want to quickly create an UI within deep-nested code that runs multiple times every frame. | ||||||
| // Usage: static ImGuiOnceUponAFrame oaf; if (oaf) ImGui::Text("This will be called only once per frame"); | // Usage: static ImGuiOnceUponAFrame oaf; if (oaf) ImGui::Text("This will be called only once per frame"); | ||||||
| struct ImGuiOnceUponAFrame | struct ImGuiOnceUponAFrame | ||||||
|   | |||||||
| @@ -165,15 +165,6 @@ static inline ImVec2 ImRotate(const ImVec2& v, float cos_a, float sin_a) | |||||||
| static inline float  ImLinearSweep(float current, float target, float speed)    { if (current < target) return ImMin(current + speed, target); if (current > target) return ImMax(current - speed, target); return current; } | static inline float  ImLinearSweep(float current, float target, float speed)    { if (current < target) return ImMin(current + speed, target); if (current > target) return ImMax(current - speed, target); return current; } | ||||||
| static inline ImVec2 ImMul(const ImVec2& lhs, const ImVec2& rhs)                { return ImVec2(lhs.x * rhs.x, lhs.y * rhs.y); } | static inline ImVec2 ImMul(const ImVec2& lhs, const ImVec2& rhs)                { return ImVec2(lhs.x * rhs.x, lhs.y * rhs.y); } | ||||||
|  |  | ||||||
| // We call C++ constructor on own allocated memory via the placement "new(ptr) Type()" syntax. |  | ||||||
| // Defining a custom placement new() with a dummy parameter allows us to bypass including <new> which on some platforms complains when user has disabled exceptions. |  | ||||||
| struct ImNewPlacementDummy {}; |  | ||||||
| inline void* operator   new(size_t, ImNewPlacementDummy, void* ptr) { return ptr; } |  | ||||||
| inline void  operator   delete(void*, ImNewPlacementDummy, void*)   {} // This is only required so we can use the symetrical new() |  | ||||||
| #define IM_PLACEMENT_NEW(_PTR)              new(ImNewPlacementDummy(), _PTR) |  | ||||||
| #define IM_NEW(_TYPE)                       new(ImNewPlacementDummy(), ImGui::MemAlloc(sizeof(_TYPE))) _TYPE |  | ||||||
| template <typename T> void IM_DELETE(T*& p) { if (p) { p->~T(); ImGui::MemFree(p); p = NULL; } } |  | ||||||
|  |  | ||||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||||
| // Types | // Types | ||||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user