diff options
Diffstat (limited to 'source/dng_abort_sniffer.cpp')
-rw-r--r-- | source/dng_abort_sniffer.cpp | 484 |
1 files changed, 242 insertions, 242 deletions
diff --git a/source/dng_abort_sniffer.cpp b/source/dng_abort_sniffer.cpp index 4c65733..2b96dfc 100644 --- a/source/dng_abort_sniffer.cpp +++ b/source/dng_abort_sniffer.cpp @@ -1,242 +1,242 @@ -/*****************************************************************************/
-// Copyright 2006-2008 Adobe Systems Incorporated
-// All Rights Reserved.
-//
-// NOTICE: Adobe permits you to use, modify, and distribute this file in
-// accordance with the terms of the Adobe license agreement accompanying it.
-/*****************************************************************************/
-
-/* $Id: //mondo/dng_sdk_1_4/dng_sdk/source/dng_abort_sniffer.cpp#1 $ */
-/* $DateTime: 2012/05/30 13:28:51 $ */
-/* $Change: 832332 $ */
-/* $Author: tknoll $ */
-
-/*****************************************************************************/
-
-#include "dng_abort_sniffer.h"
-
-#include "dng_mutex.h"
-
-/*****************************************************************************/
-
-#if qDNGThreadSafe
-
-/*****************************************************************************/
-
-class dng_priority_manager
- {
-
- private:
-
- dng_mutex fMutex;
-
- dng_condition fCondition;
-
- uint32 fCounter [dng_priority_count];
-
- public:
-
- dng_priority_manager ();
-
- void Increment (dng_priority priority);
-
- void Decrement (dng_priority priority);
-
- void Wait (dng_priority priority);
-
- private:
-
- dng_priority MinPriority ()
- {
-
- // Assumes mutex is locked.
-
- for (uint32 level = dng_priority_maximum;
- level > dng_priority_minimum;
- level--)
- {
-
- if (fCounter [level])
- {
- return (dng_priority) level;
- }
-
- }
-
- return dng_priority_minimum;
-
- }
-
- };
-
-/*****************************************************************************/
-
-dng_priority_manager::dng_priority_manager ()
-
- : fMutex ("dng_priority_manager::fMutex")
- , fCondition ()
-
- {
-
- for (uint32 level = dng_priority_minimum;
- level <= dng_priority_maximum;
- level++)
- {
-
- fCounter [level] = 0;
-
- }
-
- }
-
-/*****************************************************************************/
-
-void dng_priority_manager::Increment (dng_priority priority)
- {
-
- dng_lock_mutex lock (&fMutex);
-
- fCounter [priority] += 1;
-
- }
-
-/*****************************************************************************/
-
-void dng_priority_manager::Decrement (dng_priority priority)
- {
-
- dng_lock_mutex lock (&fMutex);
-
- dng_priority oldMin = MinPriority ();
-
- fCounter [priority] -= 1;
-
- dng_priority newMin = MinPriority ();
-
- if (newMin < oldMin)
- {
-
- fCondition.Broadcast ();
-
- }
-
- }
-
-/*****************************************************************************/
-
-void dng_priority_manager::Wait (dng_priority priority)
- {
-
- if (priority < dng_priority_maximum)
- {
-
- dng_lock_mutex lock (&fMutex);
-
- while (priority < MinPriority ())
- {
-
- fCondition.Wait (fMutex);
-
- }
-
- }
-
- }
-
-/*****************************************************************************/
-
-static dng_priority_manager gPriorityManager;
-
-/*****************************************************************************/
-
-#endif
-
-/*****************************************************************************/
-
-dng_set_minimum_priority::dng_set_minimum_priority (dng_priority priority)
-
- : fPriority (priority)
-
- {
-
- #if qDNGThreadSafe
-
- gPriorityManager.Increment (fPriority);
-
- #endif
-
- }
-
-/*****************************************************************************/
-
-dng_set_minimum_priority::~dng_set_minimum_priority ()
- {
-
- #if qDNGThreadSafe
-
- gPriorityManager.Decrement (fPriority);
-
- #endif
-
- }
-
-/*****************************************************************************/
-
-dng_abort_sniffer::dng_abort_sniffer ()
-
- : fPriority (dng_priority_maximum)
-
- {
-
- }
-
-/*****************************************************************************/
-
-dng_abort_sniffer::~dng_abort_sniffer ()
- {
-
- }
-
-/*****************************************************************************/
-
-void dng_abort_sniffer::SniffForAbort (dng_abort_sniffer *sniffer)
- {
-
- if (sniffer)
- {
-
- #if qDNGThreadSafe
-
- gPriorityManager.Wait (sniffer->Priority ());
-
- #endif
-
- sniffer->Sniff ();
-
- }
-
- }
-
-/*****************************************************************************/
-
-void dng_abort_sniffer::StartTask (const char * /* name */,
- real64 /* fract */)
- {
-
- }
-
-/*****************************************************************************/
-
-void dng_abort_sniffer::EndTask ()
- {
-
- }
-
-/*****************************************************************************/
-
-void dng_abort_sniffer::UpdateProgress (real64 /* fract */)
- {
-
- }
-
-/*****************************************************************************/
+/*****************************************************************************/ +// Copyright 2006-2008 Adobe Systems Incorporated +// All Rights Reserved. +// +// NOTICE: Adobe permits you to use, modify, and distribute this file in +// accordance with the terms of the Adobe license agreement accompanying it. +/*****************************************************************************/ + +/* $Id: //mondo/dng_sdk_1_4/dng_sdk/source/dng_abort_sniffer.cpp#1 $ */ +/* $DateTime: 2012/05/30 13:28:51 $ */ +/* $Change: 832332 $ */ +/* $Author: tknoll $ */ + +/*****************************************************************************/ + +#include "dng_abort_sniffer.h" + +#include "dng_mutex.h" + +/*****************************************************************************/ + +#if qDNGThreadSafe + +/*****************************************************************************/ + +class dng_priority_manager + { + + private: + + dng_mutex fMutex; + + dng_condition fCondition; + + uint32 fCounter [dng_priority_count]; + + public: + + dng_priority_manager (); + + void Increment (dng_priority priority); + + void Decrement (dng_priority priority); + + void Wait (dng_priority priority); + + private: + + dng_priority MinPriority () + { + + // Assumes mutex is locked. + + for (uint32 level = dng_priority_maximum; + level > dng_priority_minimum; + level--) + { + + if (fCounter [level]) + { + return (dng_priority) level; + } + + } + + return dng_priority_minimum; + + } + + }; + +/*****************************************************************************/ + +dng_priority_manager::dng_priority_manager () + + : fMutex ("dng_priority_manager::fMutex") + , fCondition () + + { + + for (uint32 level = dng_priority_minimum; + level <= dng_priority_maximum; + level++) + { + + fCounter [level] = 0; + + } + + } + +/*****************************************************************************/ + +void dng_priority_manager::Increment (dng_priority priority) + { + + dng_lock_mutex lock (&fMutex); + + fCounter [priority] += 1; + + } + +/*****************************************************************************/ + +void dng_priority_manager::Decrement (dng_priority priority) + { + + dng_lock_mutex lock (&fMutex); + + dng_priority oldMin = MinPriority (); + + fCounter [priority] -= 1; + + dng_priority newMin = MinPriority (); + + if (newMin < oldMin) + { + + fCondition.Broadcast (); + + } + + } + +/*****************************************************************************/ + +void dng_priority_manager::Wait (dng_priority priority) + { + + if (priority < dng_priority_maximum) + { + + dng_lock_mutex lock (&fMutex); + + while (priority < MinPriority ()) + { + + fCondition.Wait (fMutex); + + } + + } + + } + +/*****************************************************************************/ + +static dng_priority_manager gPriorityManager; + +/*****************************************************************************/ + +#endif + +/*****************************************************************************/ + +dng_set_minimum_priority::dng_set_minimum_priority (dng_priority priority) + + : fPriority (priority) + + { + + #if qDNGThreadSafe + + gPriorityManager.Increment (fPriority); + + #endif + + } + +/*****************************************************************************/ + +dng_set_minimum_priority::~dng_set_minimum_priority () + { + + #if qDNGThreadSafe + + gPriorityManager.Decrement (fPriority); + + #endif + + } + +/*****************************************************************************/ + +dng_abort_sniffer::dng_abort_sniffer () + + : fPriority (dng_priority_maximum) + + { + + } + +/*****************************************************************************/ + +dng_abort_sniffer::~dng_abort_sniffer () + { + + } + +/*****************************************************************************/ + +void dng_abort_sniffer::SniffForAbort (dng_abort_sniffer *sniffer) + { + + if (sniffer) + { + + #if qDNGThreadSafe + + gPriorityManager.Wait (sniffer->Priority ()); + + #endif + + sniffer->Sniff (); + + } + + } + +/*****************************************************************************/ + +void dng_abort_sniffer::StartTask (const char * /* name */, + real64 /* fract */) + { + + } + +/*****************************************************************************/ + +void dng_abort_sniffer::EndTask () + { + + } + +/*****************************************************************************/ + +void dng_abort_sniffer::UpdateProgress (real64 /* fract */) + { + + } + +/*****************************************************************************/ |