00001 /*! 00002 \file 00003 \brief Class definition and function declarations for the class BruhatOrder. 00004 */ 00005 00006 /* 00007 This is bruhat.h 00008 00009 Copyright (C) 2004,2005 Fokko du Cloux 00010 part of the Atlas of Reductive Lie Groups 00011 00012 See file main.cpp for full copyright notice 00013 */ 00014 00015 #ifndef BRUHAT_H /* guard against multiple inclusions */ 00016 #define BRUHAT_H 00017 00018 #include "bruhat_fwd.h" 00019 00020 #include "poset.h" 00021 00022 namespace atlas { 00023 00024 /******** type declarations *************************************************/ 00025 00026 /******** function declarations *********************************************/ 00027 00028 /******** type definitions **************************************************/ 00029 00030 namespace bruhat { 00031 00032 /*!\brief 00033 Intended to represent the Bruhat order on K orbits on G/B, or 00034 on a block of representations. 00035 00036 [Not seriously used in the present code; I'm not sure whether it is 00037 instantiated. The classes KGB and Block have manipulators fillBruhat 00038 that would create BruhatOrder classes, but they seem not to be called. 00039 DV 7/21/06] 00040 00041 [In fact the kgb::KGB and blocks::Block classes do contain members of type 00042 (pointer to) BruhatOrder, and methods fillBruhat that will create instances 00043 of BruhatOrder accessible from those classes, but these methods are never 00044 called. MvL 8 Nov 2006] 00045 00046 [Now instantiated by the new commands blockorder and kgborder.] 00047 */ 00048 class BruhatOrder { 00049 00050 private: 00051 /*! 00052 \brief Hasse diagram for a Bruhat order. 00053 00054 Entry \#j lists the numbers of the immediate predecessors of element 00055 \#j in the order. 00056 */ 00057 std::vector<set::SetEltList> d_hasse; // probably sparse; avoid |BitMap|s 00058 /*! 00059 \brief Poset relation. 00060 00061 It is assumed that element \#i can precede element \#j in the poset 00062 only if i < j. 00063 */ 00064 poset::Poset d_poset; 00065 00066 public: 00067 00068 // constructors and destructors 00069 explicit BruhatOrder(const std::vector<set::SetEltList>& Hasse_diagram) 00070 : d_hasse(Hasse_diagram), d_poset(0) {} 00071 00072 00073 // accessors 00074 00075 size_t size() const { return d_hasse.size(); } 00076 00077 //!\brief Returns row |x| of the Hasse diagram for the order. 00078 00079 const set::SetEltList& hasse(size_t x) const { 00080 return d_hasse[x]; 00081 } 00082 00083 /*! 00084 \brief Returns the number of comparable pairs in the order. 00085 */ 00086 unsigned long n_comparable() const { 00087 return poset::n_comparable_from_Hasse(d_hasse); 00088 } 00089 00090 // manipulators 00091 /*! 00092 \brief Returns the full poset relation. 00093 */ 00094 const poset::Poset& poset() { 00095 fillPoset(); return d_poset; 00096 } 00097 00098 private: 00099 void fillPoset(); 00100 00101 }; // class BruhatOrder 00102 00103 } // namespace bruhat 00104 00105 } // namespace atlas 00106 00107 #endif
1.3.9.1