ROOT logo
// $Id: ZKing.h 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/.

#ifndef GledCore_ZKing_H
#define GledCore_ZKing_H

#include <Glasses/ZHashList.h>
#include <Glasses/SaturnInfo.h>
#include <Glasses/ZMirFilter.h>

class ZQueen;

class ZKing : public ZHashList,
	      public MIR_Priest
{
  MAC_RNR_FRIENDS(ZKing);

  friend class Saturn;

public:
  enum LightType_e { LT_Undef, LT_Moon, LT_Sun, LT_Fire };

private:
  void _init();

protected:
  ZLink<SaturnInfo>	mSaturnInfo;	// X{gS} L{} Saturn that shines for this King
  ID_t		mMinID;		// X{g} ValOut(-range=>[0,MAX_ID,1,0], -width=>10, -join=>1)
  ID_t		mMaxID;		// X{g} ValOut(-range=>[0,MAX_ID,1,0], -width=>10)
  ID_t		mMaxUsedID;	//

  LightType_e	mLightType;	// X{g}

  UChar_t	mMapNoneTo;     // X{gS} 7 PhonyEnum(-type=>ZMirFilter::Result_e, -names=>[R_Allow,R_Deny], -width=>8)

  virtual void BlessMIR(ZMIR& mir);

public:
  ZKing(const Text_t* n="ZKing", const Text_t* t=0) :
    ZHashList(n,t), mMinID(0), mMaxID(0), mMaxUsedID(0) { _init(); }
  ZKing(ID_t min, ID_t max, const Text_t* n="ZKing", const Text_t* t=0) :
    ZHashList(n,t), mMinID(min), mMaxID(max), mMaxUsedID(min-1) { _init(); }

  virtual ~ZKing();

  virtual void AdEnlightenment();

  virtual void Enthrone(ZQueen* queen);

  void StarToQueen(ZComet* comet, ID_t span);

  ZComet* MakeComet();

  // Dependency of Queens
  //void AddDependency(ZQueen* target, ZQueen* new_dep); // X{E} C{2}
  //void RemoveDependency(ZQueen* target, ZQueen* dep);  // X{E} C{2}

  // The following ones are internal.
  // Should upgrade p7: Ctx{#q}; q ~ do not export to ContextMethodList
  void reflect_queen(ZQueen* queen_to_mirror, SaturnInfo* moon);  // X{E} C{2q}
  void activate_queen(ZQueen* queen);				  // X{E} C{1q}
  void unreflect_queen(ZQueen* queen_to_leave, SaturnInfo* moon); // X{E} C{2q}

  void receive_eunuch(); // X{E}

  // A more general queen mirroring infrastructure; server push
  // void reflect_queen_to_saturn(ZQueen* queen_to_mirror, SaturnInfo* moon); // X{E} C{2}
  // void reflect_queen_to_all(ZQueen* queen);               // X{E} C{1}
  // void reflect_queen_to_list(ZQueen* queen, ZList* list); // X{E} C{2}

#include "ZKing.h7"
  ClassDef(ZKing, 1); // Ruler of top-level object-spaces
}; // endclass ZKing


#endif
 ZKing.h:1
 ZKing.h:2
 ZKing.h:3
 ZKing.h:4
 ZKing.h:5
 ZKing.h:6
 ZKing.h:7
 ZKing.h:8
 ZKing.h:9
 ZKing.h:10
 ZKing.h:11
 ZKing.h:12
 ZKing.h:13
 ZKing.h:14
 ZKing.h:15
 ZKing.h:16
 ZKing.h:17
 ZKing.h:18
 ZKing.h:19
 ZKing.h:20
 ZKing.h:21
 ZKing.h:22
 ZKing.h:23
 ZKing.h:24
 ZKing.h:25
 ZKing.h:26
 ZKing.h:27
 ZKing.h:28
 ZKing.h:29
 ZKing.h:30
 ZKing.h:31
 ZKing.h:32
 ZKing.h:33
 ZKing.h:34
 ZKing.h:35
 ZKing.h:36
 ZKing.h:37
 ZKing.h:38
 ZKing.h:39
 ZKing.h:40
 ZKing.h:41
 ZKing.h:42
 ZKing.h:43
 ZKing.h:44
 ZKing.h:45
 ZKing.h:46
 ZKing.h:47
 ZKing.h:48
 ZKing.h:49
 ZKing.h:50
 ZKing.h:51
 ZKing.h:52
 ZKing.h:53
 ZKing.h:54
 ZKing.h:55
 ZKing.h:56
 ZKing.h:57
 ZKing.h:58
 ZKing.h:59
 ZKing.h:60
 ZKing.h:61
 ZKing.h:62
 ZKing.h:63
 ZKing.h:64
 ZKing.h:65
 ZKing.h:66
 ZKing.h:67
 ZKing.h:68
 ZKing.h:69
 ZKing.h:70
 ZKing.h:71
 ZKing.h:72
 ZKing.h:73
 ZKing.h:74
 ZKing.h:75
 ZKing.h:76
 ZKing.h:77
 ZKing.h:78
 ZKing.h:79