atlas  0.6
Public Member Functions | Private Types | Private Attributes | List of all members
atlas::klsupport::KLSupport Class Reference

#include <klsupport.h>

Inheritance diagram for atlas::klsupport::KLSupport:
Inheritance graph
[legend]
Collaboration diagram for atlas::klsupport::KLSupport:
Collaboration graph
[legend]

Public Member Functions

 KLSupport (const Block_base &)
 
void swap (KLSupport &)
 
const Block_base & block () const
 
size_t rank () const
 
size_t size () const
 
size_t length (BlockElt z) const
 
BlockElt lengthLess (size_t l) const
 
BlockElt cross (size_t s, BlockElt z) const
 
BlockEltPair cayley (size_t s, BlockElt z) const
 
DescentStatus::Value descentValue (size_t s, BlockElt z) const
 
const DescentStatus & descent (BlockElt y) const
 
const RankFlagsdescentSet (BlockElt z) const
 
const RankFlagsgoodAscentSet (BlockElt z) const
 
unsigned int ascent_descent (BlockElt x, BlockElt y) const
 
unsigned int good_ascent_descent (BlockElt x, BlockElt y) const
 
unsigned int prim_index (BlockElt x, const RankFlags &descent_set) const
 
unsigned int self_index (BlockElt y) const
 
void filter_extremal (BitMap &, const RankFlags &) const
 : Flags in b those block elements which are extremal w.r.t. the simple reflections in d. More...
 
void filter_primitive (BitMap &, const RankFlags &) const
 
void fill ()
 
void fillDownsets ()
 Fills in the |downset|, |primset|, |descents| and |goodAscent| bitmap/set vectors. Here |downset| and |primset| are vectors indexed by a simple reflection |s|, and giving a bitmap over all block elements, while |descents| and |goodAscent| are vectors indexed by a block element |z| and giving a bitset over all simple reflections. This difference is motivated by their use: |downset| and |primset| are used to filter bitmaps over the entire block according to some set of simple generators, which is easier if the data is grouped by generator. In fact the data computed is stored twice: one always has |downset[s].isMember(z) == descents[z].test(s)| and |primset[s].isMember(z) != good_ascent[z].test(s)|. More...
 
void fillPrimitivize ()
 

Private Types

enum  State {
  PrimitivizeFilled, DownsetsFilled, LengthLessFilled, Filled,
  NumStates
}
 

Private Attributes

BitSet< NumStatesd_state
 
const Block_base & d_block
 
std::vector< RankFlagsd_descent
 
std::vector< RankFlagsd_goodAscent
 
std::vector< BitMap > d_downset
 
std::vector< BitMap > d_primset
 
std::vector< BlockEltd_lengthLess
 
std::vector< std::vector< unsigned int > > d_prim_index
 

Member Enumeration Documentation

Enumerator
PrimitivizeFilled 
DownsetsFilled 
LengthLessFilled 
Filled 
NumStates 

Constructor & Destructor Documentation

atlas::klsupport::KLSupport::KLSupport ( const Block_base &  b)

Member Function Documentation

unsigned int atlas::klsupport::KLSupport::ascent_descent ( BlockElt  x,
BlockElt  y 
) const
inline
const Block_base& atlas::klsupport::KLSupport::block ( ) const
inline
BlockEltPair atlas::klsupport::KLSupport::cayley ( size_t  s,
BlockElt  z 
) const
inline
BlockElt atlas::klsupport::KLSupport::cross ( size_t  s,
BlockElt  z 
) const
inline
const DescentStatus& atlas::klsupport::KLSupport::descent ( BlockElt  y) const
inline
const RankFlags& atlas::klsupport::KLSupport::descentSet ( BlockElt  z) const
inline
DescentStatus::Value atlas::klsupport::KLSupport::descentValue ( size_t  s,
BlockElt  z 
) const
inline
void atlas::klsupport::KLSupport::fill ( )
void atlas::klsupport::KLSupport::fillDownsets ( )

Fills in the |downset|, |primset|, |descents| and |goodAscent| bitmap/set vectors. Here |downset| and |primset| are vectors indexed by a simple reflection |s|, and giving a bitmap over all block elements, while |descents| and |goodAscent| are vectors indexed by a block element |z| and giving a bitset over all simple reflections. This difference is motivated by their use: |downset| and |primset| are used to filter bitmaps over the entire block according to some set of simple generators, which is easier if the data is grouped by generator. In fact the data computed is stored twice: one always has |downset[s].isMember(z) == descents[z].test(s)| and |primset[s].isMember(z) != good_ascent[z].test(s)|.

The predicate that |s| is a |descent| for |z| is taken in the weak sense that |s| belongs to the "tau-invariant" of |z|, in other words, it is a complex descent, real parity (type I or type II), or imaginary compact (the final case does not actually allow going down). The |goodAscent| bitset for |z| holds the non-decents for |z| that are not imaginary type II, so they are either complex ascent, imaginary type I or real nonparity. The |primset| bitmap for |s| records the block elements |z| for which |s| is not a |goodAscent|, in other words it is either a |descent| or imaginary type II.

void atlas::klsupport::KLSupport::fillPrimitivize ( )
void atlas::klsupport::KLSupport::filter_extremal ( BitMap &  b,
const RankFlags d 
) const

: Flags in b those block elements which are extremal w.r.t. the simple reflections in d.

Preconditions: the capacity of b is the size(); d contains rank() flags;

Explanation: an element z in the block is extremal w.r.t. d, if all the simple generators flagged in d are descents for z. Since d_downset[s] flags the elements for which s is a descent, this amounts to requesting that z belong to the intersection of the downsets for the various descents in d.

void atlas::klsupport::KLSupport::filter_primitive ( BitMap &  b,
const RankFlags d 
) const
unsigned int atlas::klsupport::KLSupport::good_ascent_descent ( BlockElt  x,
BlockElt  y 
) const
inline
const RankFlags& atlas::klsupport::KLSupport::goodAscentSet ( BlockElt  z) const
inline
size_t atlas::klsupport::KLSupport::length ( BlockElt  z) const
inline
BlockElt atlas::klsupport::KLSupport::lengthLess ( size_t  l) const
inline
unsigned int atlas::klsupport::KLSupport::prim_index ( BlockElt  x,
const RankFlags descent_set 
) const
inline
size_t atlas::klsupport::KLSupport::rank ( ) const
inline
unsigned int atlas::klsupport::KLSupport::self_index ( BlockElt  y) const
inline
size_t atlas::klsupport::KLSupport::size ( ) const
inline
void atlas::klsupport::KLSupport::swap ( KLSupport other)

Member Data Documentation

const Block_base& atlas::klsupport::KLSupport::d_block
private
std::vector<RankFlags> atlas::klsupport::KLSupport::d_descent
private
std::vector<BitMap> atlas::klsupport::KLSupport::d_downset
private
std::vector<RankFlags> atlas::klsupport::KLSupport::d_goodAscent
private
std::vector<BlockElt> atlas::klsupport::KLSupport::d_lengthLess
private
std::vector<std::vector<unsigned int> > atlas::klsupport::KLSupport::d_prim_index
private
std::vector<BitMap> atlas::klsupport::KLSupport::d_primset
private
BitSet<NumStates> atlas::klsupport::KLSupport::d_state
private

The documentation for this class was generated from the following files: