blob: fc555098c90d95c79d7a57a512bc3c33e08d5be6 (
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
|
#include "UnityPrefix.h"
#include "MessageIdentifier.h"
using namespace std;
MessageIdentifier::RegisteredMessages* gRegisteredMessageIdentifiers = NULL;
MessageIdentifier::MessageIdentifier (const char* name, Options opts, int classId, const char* scriptParamName)
{
AssertIf (name == NULL);
messageName = name;
parameterClassId = classId;
scriptParameterName = scriptParamName;
messageID = -1;
options = (int)opts;
if (gRegisteredMessageIdentifiers == NULL)
gRegisteredMessageIdentifiers = new RegisteredMessages();
gRegisteredMessageIdentifiers->push_back (this);
}
MessageIdentifier::RegisteredMessages& MessageIdentifier::GetRegisteredMessages ()
{
AssertIf (gRegisteredMessageIdentifiers == NULL);
return *gRegisteredMessageIdentifiers;
}
MessageIdentifier::SortedMessages MessageIdentifier::GetSortedMessages (bool notificationMessages)
{
// Build sorted Messages map. Which contains all messages sorted by name.
SortedMessages sortedMessages;
RegisteredMessages& messages = GetRegisteredMessages();
RegisteredMessages::iterator j;
for (j = messages.begin ();j != messages.end ();j++)
{
MessageIdentifier& identifier = **j;
AssertIf (identifier.messageName == NULL);
bool usesNotifications = identifier.options & kUseNotificationManager;
if (usesNotifications != notificationMessages)
continue;
SortedMessages::iterator found = sortedMessages.find (identifier.messageName);
if (found == sortedMessages.end ())
{
sortedMessages.insert (make_pair (string (identifier.messageName), identifier));
}
else
{
if (identifier.parameterClassId != found->second.parameterClassId)
{
string error = "There are conflicting definitions of the message: ";
error += identifier.messageName;
error += ". The parameter of one message has to be the same across all definitions of that message.";
ErrorString (error);
}
if (identifier.scriptParameterName != found->second.scriptParameterName)
{
string error = "There are conflicting definitions of the message: ";
error += identifier.messageName;
error += ". The parameter of one message has to be the same across all definitions of that message.";
ErrorString (error);
}
if (identifier.options != found->second.options)
{
string error = "There are conflicting options of the message: ";
error += identifier.messageName;
ErrorString (error);
}
}
}
return sortedMessages;
}
void MessageIdentifier::Cleanup ()
{
delete gRegisteredMessageIdentifiers;
}
#include "Runtime/Dynamics/Collider.h"
#undef MESSAGE_IDENTIFIER
#define MESSAGE_IDENTIFIER(n,p) const EXPORT_COREMODULE MessageIdentifier n p
#include "MessageIdentifiers.h"
|