File: Main.cpp

package info (click to toggle)
storm-lang 0.7.4-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 52,004 kB
  • sloc: ansic: 261,462; cpp: 140,405; sh: 14,891; perl: 9,846; python: 2,525; lisp: 2,504; asm: 860; makefile: 678; pascal: 70; java: 52; xml: 37; awk: 12
file content (45 lines) | stat: -rw-r--r-- 1,148 bytes parent folder | download | duplicates (3)
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
#include "stdafx.h"
#include "Engine.h"
#include "LibData.h"
#include "Core/EngineFwd.h"
#include "Core/SharedLib.h"
#include "Core/Gen/CppTypes.h"

namespace storm {

#define CHECK_SIZE(Type, var)											\
	if (sizeof(Type) != (var)) {										\
		ok = false;														\
		PLN(L"Size of " << STRING(Type) << L" does not match ("			\
			<< sizeof(Type) << L" vs " << (var)	<< L").");				\
		PLN(L"Make sure you are using compatible versions of Storm and libraries."); \
	}

	static void destroyLibInfo(SharedLibInfo *info) {
		destroyLibData(info->libData);
	}

	bool sharedLibEntry(const SharedLibStart &params, SharedLibInfo &out) {
		// Check sizes for version issues.
		bool ok = true;
		CHECK_SIZE(SharedLibStart, params.sizeLibStart);
		CHECK_SIZE(SharedLibInfo, params.sizeLibInfo);
		CHECK_SIZE(EngineFwdShared, params.sizeFwdShared);
		CHECK_SIZE(EngineFwdUnique, params.sizeFwdUnique);
		if (!ok)
			return false;

		void *prev = params.engine.attach(params.shared, params.unique);

		SharedLibInfo result = {
			cppWorld(),
			prev,
			createLibData(params.engine),
			&destroyLibInfo,
		};

		out = result;
		return true;
	}

}