ROOT logo
// $Id: ZFilterAggregator.cxx 2088 2008-11-23 20:26:46Z matevz $

// Copyright (C) 1999-2008, Matevz Tadel. All rights reserved.
// This file is part of GLED, released under GNU General Public License version 2.
// For the licensing terms see $GLEDSYS/LICENSE or http://www.gnu.org/.

//__________________________________________________________________________
// ZFilterAggregator
//
//

#include "ZFilterAggregator.h"

#include "ZFilterAggregator.c7"

ClassImp(ZFilterAggregator);

/**************************************************************************/

void ZFilterAggregator::_init()
{
  bStrongNone = bPreemptNone = false;
  bPreemptAllow = true;
  bPreemptDeny  = false;
  mFilters = 0;
}

/**************************************************************************/

ZMirFilter::Result_e ZFilterAggregator::FilterMIR(ZMIR& mir)
{
  if(mFilters != 0) {
    UChar_t result  = 0;
    UChar_t preempt = BuildPreemptionBits();
    {
      GMutexHolder filter_lock(mFilters->RefListMutex());
      AList::Stepper<> s(*mFilters);
      while(s.step()) {
	UChar_t r = ((ZMirFilter*)*s)->FilterMIR(mir);
	if(r & preempt) {
	  return FinaliseResult((Result_e)r);
	}
	result |= r;
	if(result & R_Allow && result & R_Deny) break;
      }
    }
    if( (result & R_Allow && result & R_Deny) ||
        (result & ZMirFilter::R_None && bStrongNone) )
      {
	return FinaliseResult(R_None);
      }
    if(result & R_Allow) return R_Allow;
    if(result & R_Deny)  return R_Deny;
  }
  return PARENT_GLASS::FilterMIR(mir);
}


/**************************************************************************/
 ZFilterAggregator.cxx:1
 ZFilterAggregator.cxx:2
 ZFilterAggregator.cxx:3
 ZFilterAggregator.cxx:4
 ZFilterAggregator.cxx:5
 ZFilterAggregator.cxx:6
 ZFilterAggregator.cxx:7
 ZFilterAggregator.cxx:8
 ZFilterAggregator.cxx:9
 ZFilterAggregator.cxx:10
 ZFilterAggregator.cxx:11
 ZFilterAggregator.cxx:12
 ZFilterAggregator.cxx:13
 ZFilterAggregator.cxx:14
 ZFilterAggregator.cxx:15
 ZFilterAggregator.cxx:16
 ZFilterAggregator.cxx:17
 ZFilterAggregator.cxx:18
 ZFilterAggregator.cxx:19
 ZFilterAggregator.cxx:20
 ZFilterAggregator.cxx:21
 ZFilterAggregator.cxx:22
 ZFilterAggregator.cxx:23
 ZFilterAggregator.cxx:24
 ZFilterAggregator.cxx:25
 ZFilterAggregator.cxx:26
 ZFilterAggregator.cxx:27
 ZFilterAggregator.cxx:28
 ZFilterAggregator.cxx:29
 ZFilterAggregator.cxx:30
 ZFilterAggregator.cxx:31
 ZFilterAggregator.cxx:32
 ZFilterAggregator.cxx:33
 ZFilterAggregator.cxx:34
 ZFilterAggregator.cxx:35
 ZFilterAggregator.cxx:36
 ZFilterAggregator.cxx:37
 ZFilterAggregator.cxx:38
 ZFilterAggregator.cxx:39
 ZFilterAggregator.cxx:40
 ZFilterAggregator.cxx:41
 ZFilterAggregator.cxx:42
 ZFilterAggregator.cxx:43
 ZFilterAggregator.cxx:44
 ZFilterAggregator.cxx:45
 ZFilterAggregator.cxx:46
 ZFilterAggregator.cxx:47
 ZFilterAggregator.cxx:48
 ZFilterAggregator.cxx:49
 ZFilterAggregator.cxx:50
 ZFilterAggregator.cxx:51
 ZFilterAggregator.cxx:52
 ZFilterAggregator.cxx:53
 ZFilterAggregator.cxx:54
 ZFilterAggregator.cxx:55
 ZFilterAggregator.cxx:56
 ZFilterAggregator.cxx:57
 ZFilterAggregator.cxx:58
 ZFilterAggregator.cxx:59