summaryrefslogtreecommitdiff
path: root/dnn/Event.cc
diff options
context:
space:
mode:
authorchatty1994-03-14 08:40:16 +0000
committerchatty1994-03-14 08:40:16 +0000
commit33c173febd67cf6b558eb86ba552dc9369ab4b24 (patch)
tree0af984e138144b6ff9d8ec98b0ea7245dd003bef /dnn/Event.cc
parent1ed65383fc2b49e22929862dd5705c93f79a60c2 (diff)
downloadivy-league-33c173febd67cf6b558eb86ba552dc9369ab4b24.zip
ivy-league-33c173febd67cf6b558eb86ba552dc9369ab4b24.tar.gz
ivy-league-33c173febd67cf6b558eb86ba552dc9369ab4b24.tar.bz2
ivy-league-33c173febd67cf6b558eb86ba552dc9369ab4b24.tar.xz
Initial revision
Diffstat (limited to 'dnn/Event.cc')
-rw-r--r--dnn/Event.cc163
1 files changed, 163 insertions, 0 deletions
diff --git a/dnn/Event.cc b/dnn/Event.cc
new file mode 100644
index 0000000..3dbf5fb
--- /dev/null
+++ b/dnn/Event.cc
@@ -0,0 +1,163 @@
+/*
+ * DNN - Data News Network
+ *
+ * by Stephane Chatty
+ *
+ * Copyright 1993-1994
+ * Centre d'Etudes de la Navigation Aerienne (CENA)
+ *
+ * Events.
+ *
+ * $Id$
+ * $CurLog$
+ */
+
+#include "Event.h"
+#include <memory.h>
+
+DnnEventFeatureList :: DnnEventFeatureList (const DnnEventFeatureList& base, int nbf, DnnEventFeature* f)
+: CcuListOf <DnnEventFeature> (base)
+{
+ Load (nbf, f);
+}
+
+DnnEventFeatureList :: DnnEventFeatureList (int nbf, DnnEventFeature* f)
+: CcuListOf <DnnEventFeature> ()
+{
+ Load (nbf, f);
+}
+
+void
+DnnEventFeatureList :: Load (int nbf, DnnEventFeature* f)
+{
+ while (nbf-- > 0)
+ Append (f++);
+}
+
+DnnEventFeatureList :: ~DnnEventFeatureList ()
+{
+}
+
+
+/*?class DnnEventType
+A \typ{DnnEventType} contains the description of a -- dynamic -- class of events.
+It holds a name and an array of offsets, each describing where to find the corresponding
+feature in an event of that class.
+?*/
+
+CcuListOf <DnnEventType>* DnnEventType::AllTypes = 0;
+
+/*?hidden?*/
+void
+DnnEventType :: ClassInit ()
+{
+ AllTypes = new CcuListOf <DnnEventType>;
+}
+
+/*?
+Build an event type named \var{name} from an array of features. This is mostly
+useful for statically defined event classes. \var{f} is the array of features, and
+\var{nbf} is the number of features in that array.
+?*/
+DnnEventType :: DnnEventType (const char* name, int nbf, DnnEventFeature f [])
+: Name (name),
+#if 0
+ Features (),
+#endif
+ NbFeatures (nbf),
+ FeaturesOffsets (new int [nbf])
+{
+ if (!AllTypes)
+ ClassInit ();
+ AllTypes->Append (this);
+ int offset = 0;
+ for (int i = 0; i < nbf; ++i) {
+ offset += f[i].Size;
+ FeaturesOffsets [i] = offset;
+ }
+}
+
+/*?
+Build an event type from a list of features.
+?*/
+DnnEventType :: DnnEventType (const char* name, const DnnEventFeatureList& fl)
+: Name (name),
+#if 0
+ Features (),
+#endif
+ NbFeatures (fl.Length ()),
+ FeaturesOffsets (new int [NbFeatures])
+{
+ if (!AllTypes)
+ ClassInit ();
+ AllTypes->Append (this);
+ int offset = 0;
+ int i = 0;
+ CcuListIterOf <DnnEventFeature> f = fl;
+ while (++f) {
+ offset += (*f)->Size;
+ FeaturesOffsets [i] = offset;
+ ++i;
+ }
+}
+
+/*?nodoc?*/
+DnnEventType :: ~DnnEventType ()
+{
+ AllTypes->Remove (this);
+ delete [] FeaturesOffsets;
+}
+
+/*?
+Build an even of type \var{t}.
+?*/
+DnnEvent :: DnnEvent (const DnnEventType* t)
+: Type (*t)
+{
+ int sz = t->GetTotalSize ();
+ if (sz > 0)
+ Data = new char [sz];
+ else
+ Data = 0;
+}
+
+/*?nodoc?*/
+DnnEvent :: ~DnnEvent ()
+{
+ if (Data)
+ delete [] Data;
+}
+
+void
+DnnEvent :: SetFeature (int i, const void* data)
+{
+ int offset = Type.GetOffset (i);
+ int size = Type.GetSize (i);
+ memcpy (Data+offset, data, size);
+}
+
+void
+DnnEvent :: GetFeature (int i, void* data)
+{
+ int offset = Type.GetOffset (i);
+ int size = Type.GetSize (i);
+ memcpy (data, Data+offset, size);
+}
+
+#if 0
+void
+DnnEvent :: WriteTo (DnnIOS& s)
+{
+ // what about byte swapping?
+ s.WriteBuf ((const byte*) Data, Type.GetTotalSize ());
+}
+
+void
+DnnEvent :: ReadFrom (DnnIOS& s, lword)
+{
+ // what about byte swapping?
+ s.ReadBuf ((byte*) Data, Type.GetTotalSize ());
+}
+
+
+#endif