From 33c173febd67cf6b558eb86ba552dc9369ab4b24 Mon Sep 17 00:00:00 2001 From: chatty Date: Mon, 14 Mar 1994 08:40:16 +0000 Subject: Initial revision --- dnn/Event.cc | 163 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 163 insertions(+) create mode 100644 dnn/Event.cc (limited to 'dnn/Event.cc') 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 + +DnnEventFeatureList :: DnnEventFeatureList (const DnnEventFeatureList& base, int nbf, DnnEventFeature* f) +: CcuListOf (base) +{ + Load (nbf, f); +} + +DnnEventFeatureList :: DnnEventFeatureList (int nbf, DnnEventFeature* f) +: CcuListOf () +{ + 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::AllTypes = 0; + +/*?hidden?*/ +void +DnnEventType :: ClassInit () +{ + AllTypes = new CcuListOf ; +} + +/*? +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 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 -- cgit v1.1