diff options
author | chatty | 1994-03-14 08:40:16 +0000 |
---|---|---|
committer | chatty | 1994-03-14 08:40:16 +0000 |
commit | 33c173febd67cf6b558eb86ba552dc9369ab4b24 (patch) | |
tree | 0af984e138144b6ff9d8ec98b0ea7245dd003bef /dnn/Event.cc | |
parent | 1ed65383fc2b49e22929862dd5705c93f79a60c2 (diff) | |
download | ivy-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.cc | 163 |
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 |