1 | // **************************************************************************
|
---|
2 | /** @class Event
|
---|
3 |
|
---|
4 | @brief Concerete implementation of an EventImp stroring name, format, data and time
|
---|
5 |
|
---|
6 | This is the implementation of an event which can be posted to a state
|
---|
7 | machine, hosting all the data itself. In addition to the base class
|
---|
8 | it has storage for name, format, the data and a time stamp.
|
---|
9 |
|
---|
10 | */
|
---|
11 | // **************************************************************************
|
---|
12 | #include "Event.h"
|
---|
13 |
|
---|
14 | #include <iostream>
|
---|
15 |
|
---|
16 | #include "Time.h"
|
---|
17 |
|
---|
18 | using namespace std;
|
---|
19 |
|
---|
20 | // --------------------------------------------------------------------------
|
---|
21 | //
|
---|
22 | //! Store the name in fName and the format in fFormat. Initializes fTime
|
---|
23 | //! to an invalid time.
|
---|
24 | //!
|
---|
25 | //! @param name
|
---|
26 | //! Name given to the event
|
---|
27 | //!
|
---|
28 | //! @param fmt
|
---|
29 | //! If the event has data attached (like arguments of commands)
|
---|
30 | //! the format can be given here. How the format string is defined
|
---|
31 | //! is defined within the dim libarary. It is used in console
|
---|
32 | //! and shell access to properly format the data sent with the event
|
---|
33 | //!
|
---|
34 | //! <B>From the dim manual:</B>
|
---|
35 | //! The format parameter specifies the contents of the structure in
|
---|
36 | //! the form T:N[;T:N]*[;T] where T is the item type: (I)nteger,
|
---|
37 | //! (C)haracter, (L)ong, (S)hort, (F)loat, (D)ouble, and N is the
|
---|
38 | //! number of such items. The type alone at the end means all
|
---|
39 | //! following items are of the same type. Example: "I:3;F:2;C" means
|
---|
40 | //! 3 Integers, 2 Floats and Characters until the end. The format
|
---|
41 | //! parameter is used for communicating between different platforms.
|
---|
42 | //!
|
---|
43 | //
|
---|
44 | Event::Event(const string &name, const string &fmt) :
|
---|
45 | fName(name), fFormat(fmt), fTime(Time::none), fQoS(0), fEmpty(true)
|
---|
46 | {
|
---|
47 | }
|
---|
48 |
|
---|
49 | // --------------------------------------------------------------------------
|
---|
50 | //
|
---|
51 | //! Copies the all contents from an EventImp. Note, that also the data
|
---|
52 | //! area is copied. If the name contains a slash ('/') everything before
|
---|
53 | //! the slash is removed.
|
---|
54 | //!
|
---|
55 | //! @param evt
|
---|
56 | //! Reference to an object of type EventImp.
|
---|
57 | //
|
---|
58 | Event::Event(const EventImp &evt) : EventImp(evt),
|
---|
59 | fName(evt.GetName()), fFormat(evt.GetFormat()),
|
---|
60 | fData(evt.GetText(), evt.GetText()+evt.GetSize()), fTime(evt.GetTime()),
|
---|
61 | fQoS(evt.GetQoS()), fEmpty(evt.IsEmpty())
|
---|
62 | {
|
---|
63 | const size_t pos = fName.find_first_of('/');
|
---|
64 | if (pos!=string::npos)
|
---|
65 | fName = fName.substr(pos+1);
|
---|
66 | }
|
---|
67 |
|
---|
68 | // --------------------------------------------------------------------------
|
---|
69 | //
|
---|
70 | //! Copies the all contents from an EventImp. fData is initialized from the
|
---|
71 | //! given memory. If the name contains a slash ('/') everything before
|
---|
72 | //! the slash is removed.
|
---|
73 | //!
|
---|
74 | //! @param evt
|
---|
75 | //! Reference to an object of type EventImp.
|
---|
76 | //!
|
---|
77 | //! @param ptr
|
---|
78 | //! Pointer to the memory region to be copied.
|
---|
79 | //!
|
---|
80 | //! @param siz
|
---|
81 | //! Size of the memory region to be copied.
|
---|
82 | //
|
---|
83 | Event::Event(const EventImp &evt, const char *ptr, size_t siz) : EventImp(evt),
|
---|
84 | fName(evt.GetName()), fFormat(evt.GetFormat()),
|
---|
85 | fData(ptr, ptr+siz), fTime(evt.GetTime()), fQoS(evt.GetQoS()), fEmpty(ptr==0)
|
---|
86 | {
|
---|
87 | const size_t pos = fName.find_first_of('/');
|
---|
88 | if (pos!=string::npos)
|
---|
89 | fName = fName.substr(pos+1);
|
---|
90 | }
|
---|