summaryrefslogtreecommitdiffhomepage
path: root/KernelKit/SharedObjectCore.hxx
blob: 516371924d0b8bea73229b63c7176d7bd538a4cf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
/*
 *      ========================================================
 *
 *      hCore
 *      Copyright Mahrouss Logic, all rights reserved.
 *
 *      ========================================================
 */

#ifndef __SUPPORTKIT_SHARED_OBJECT_CORE_HXX__
#define __SUPPORTKIT_SHARED_OBJECT_CORE_HXX__

#include <NewKit/Defines.hpp>
#include <KernelKit/Loader.hpp>

namespace hCore
{
	class SharedObject final
	{
	public:
		struct SharedObjectTraits final
		{
			VoidPtr fImageObject;
			VoidPtr fImageEntrypointOffset;
		};

	public:
		explicit SharedObject() = default;
		~SharedObject() = default;

	public:
		HCORE_COPY_DEFAULT(SharedObject);

	private:
		SharedObjectTraits* fMounted{ nullptr };

	public:
		SharedObjectTraits** GetAddressOf() { return &fMounted; }
		SharedObjectTraits* Get() { return fMounted; }

	public:
		void Mount(SharedObjectTraits* to_mount) { fMounted = to_mount; }
		void Unmount() { if (fMounted) fMounted = nullptr; };
		
		template <typename SymbolType>
		SymbolType Load(const char* symbol_name);

	};
	
	inline void hcore_pure_call(void)
	{
		// virtual placeholder.
		return;	
	}
}

#endif /* ifndef __SUPPORTKIT_SHARED_OBJECT_CORE_HXX__ */