From bcb19dbd53973ff7efd9b2838de121d1e23430f4 Mon Sep 17 00:00:00 2001 From: chatty Date: Tue, 28 Nov 2000 14:52:15 +0000 Subject: Lots of files were added around '96 --- dnn/Loop.cc | 165 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 165 insertions(+) create mode 100755 dnn/Loop.cc (limited to 'dnn/Loop.cc') diff --git a/dnn/Loop.cc b/dnn/Loop.cc new file mode 100755 index 0000000..a655e8b --- /dev/null +++ b/dnn/Loop.cc @@ -0,0 +1,165 @@ +/* + * DNN - Data News Network + * + * by Stephane Chatty and Stephane Sire + * + * Copyright 1993-1996 + * Centre d'Etudes de la Navigation Aerienne (CENA) + * + * Multiplexer + * + * $Id$ + * $CurLog$ + */ + +#include "Loop.h" + +CcuInitializerFor DnnBaseMultiplexer::Initializer; +bool DnnBaseMultiplexer::ClassInitialized = false; +CcuList* DnnBaseMultiplexer::GlobalHooks = 0; +CcuList* DnnBaseMultiplexer::GlobalFinalHooks = 0; +DnnBaseMultiplexer* DnnMpx = 0; + +void +DnnBaseMultiplexer :: ClassInit () +{ + if (!ClassInitialized) { + ClassInitialized = true; + GlobalHooks = new CcuList; + GlobalFinalHooks = new CcuList; + } +} + +void +DnnBaseMultiplexer :: AddGlobalHook (DnnMpxHook* h, bool final) +{ + GlobalHooks->Append ((void*) h); + if (final) + GlobalFinalHooks->Append ((void*) h); +} + +void +DnnBaseMultiplexer :: RemoveGlobalHook (DnnMpxHook* h, bool final) +{ + GlobalHooks->Remove ((void*) h); + if (final) + GlobalFinalHooks->Remove ((void*) h); +} + + +DnnBaseMultiplexer :: DnnBaseMultiplexer () +{ +} + +DnnBaseMultiplexer :: ~DnnBaseMultiplexer () +{ +} + +/* useless? */ +MPX_RES +DnnBaseMultiplexer :: Run () +{ + return Loop (); +} + + +DnnMultiplexer :: DnnMultiplexer () +: DnnBaseMultiplexer (), + Hooks (), + FinalHooks () +{ +} + +DnnMultiplexer :: ~DnnMultiplexer () +{ +} + +void +DnnMultiplexer :: AddHook (DnnMpxHook* h, bool final) +{ + Hooks.Append ((void*) h); + if (final) + FinalHooks.Append ((void*) h); +} + +void +DnnMultiplexer :: RemoveHook (DnnMpxHook* h, bool final) +{ + Hooks.Remove ((void*) h); + if (final) + FinalHooks.Remove ((void*) h); +} + +void +DnnMultiplexer :: AddFinalHook (DnnMpxHook* h) +{ + FinalHooks.Append ((void*) h); +} + +void +DnnMultiplexer :: RemoveFinalHook (DnnMpxHook* h) +{ + FinalHooks.Remove ((void*) h); +} + + +void +DnnMultiplexer :: ExecHooks (bool final) +{ + CcuList* hooks = final ? &FinalHooks : &Hooks; + CcuListIter li = *hooks; + while (++li) { + DnnMpxHook* h = (DnnMpxHook*) *li; + (*h)(); + } +} + +MPX_RES +DnnMultiplexer :: Loop () +{ + Looping = true; + while (Looping) + ExecHooks (false); + ExecHooks (true); + return isMpxTerminated; +} + +void +DnnMultiplexer :: Stop () +{ + Looping = false; +} + + +void +DnnOpen (DnnBaseMultiplexer* m) +{ + DnnMpx = m ? m : new DnnMultiplexer; + + CcuListIter li = *DnnBaseMultiplexer::GlobalHooks; + while (++li) + DnnMpx->AddHook ((DnnMpxHook*) *li, false); + + li = *DnnBaseMultiplexer::GlobalFinalHooks; + while (++li) + DnnMpx->AddFinalHook ((DnnMpxHook*) *li); +} + +MPX_RES +DnnLoop () +{ + return DnnMpx->Loop (); +} + +void +DnnStop () +{ + DnnMpx->Stop (); +} + +void +DnnClose () +{ +} + + -- cgit v1.1