permlib  0.2.6
Library for permutation computations
 All Classes Functions Variables Typedefs Enumerations Friends
include/permlib/bsgs_core.h
00001 // ---------------------------------------------------------------------------
00002 //
00003 //  This file is part of PermLib.
00004 //
00005 // Copyright (c) 2009-2011 Thomas Rehn <thomas@carmen76.de>
00006 // All rights reserved.
00007 // 
00008 // Redistribution and use in source and binary forms, with or without
00009 // modification, are permitted provided that the following conditions
00010 // are met:
00011 // 1. Redistributions of source code must retain the above copyright
00012 //    notice, this list of conditions and the following disclaimer.
00013 // 2. Redistributions in binary form must reproduce the above copyright
00014 //    notice, this list of conditions and the following disclaimer in the
00015 //    documentation and/or other materials provided with the distribution.
00016 // 3. The name of the author may not be used to endorse or promote products
00017 //    derived from this software without specific prior written permission.
00018 // 
00019 // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
00020 // IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
00021 // OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
00022 // IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
00023 // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
00024 // NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
00025 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
00026 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
00027 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
00028 // THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00029 //
00030 // ---------------------------------------------------------------------------
00031 
00032 #include <list>
00033 #include <vector>
00034 
00035 #ifndef BSGSCORE_H_
00036 #define BSGSCORE_H_
00037 
00038 namespace permlib {
00039         
00041 template <class PERM, class TRANS>
00042 struct BSGSCore {
00043         public:
00045                 typedef PERM PERMtype;
00047                 typedef TRANS TRANStype;
00048                 
00049                 typedef std::list<typename PERM::ptr> PERMlist;
00050                 
00052                 virtual ~BSGSCore() {}
00053                 
00055                 std::vector<dom_int> B;
00057                 PERMlist S;
00059                 std::vector<TRANS> U;
00061                 dom_int n;
00062                 
00064 
00067                 virtual bool operator==(const BSGSCore<PERM,TRANS>& bsgs) const;
00068                 
00070                 virtual bool isSymmetricGroup() const { return false; }
00071         protected:
00073                 explicit BSGSCore(unsigned int id) : m_id(id) {}
00075                 BSGSCore(unsigned int id, dom_int n_, dom_int bSize) : B(bSize), n(n_), m_id(id) {}
00077                 BSGSCore(unsigned int id, const std::vector<dom_int>& B_,  const std::vector<TRANS>& U_, dom_int n_) 
00078                         : B(B_), U(U_.size(), TRANS(n_)), n(n_), m_id(id) {}
00079                 
00081                 int m_id;
00082         private:
00084                 BSGSCore(const BSGSCore<PERM,TRANS>& copy) {}
00086                 BSGSCore& operator=(const BSGSCore<PERM,TRANS>& copy) {}
00087 };
00088 
00089 template <class PERM, class TRANS>
00090 bool BSGSCore<PERM, TRANS>::operator==(const BSGSCore<PERM,TRANS>& bsgs) const {
00091         return bsgs.m_id == this->m_id;
00092 }
00093 
00094 }
00095 
00096 #endif // BSGSCORE_H_
00097