00001 // --------------------------------------------------------------------------- 00002 // 00003 // This file is part of PermLib. 00004 // 00005 // Copyright (c) 2009-2010 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 00033 #ifndef BSGSCORE_H_ 00034 #define BSGSCORE_H_ 00035 00036 namespace permlib { 00037 00039 template <class PERM, class TRANS> 00040 struct BSGSCore { 00041 public: 00043 typedef PERM PERMtype; 00045 typedef TRANS TRANStype; 00046 00048 virtual ~BSGSCore() {} 00049 00051 std::vector<ulong> B; 00053 PERMlist S; 00055 std::vector<TRANS> U; 00057 uint n; 00058 00060 00063 virtual bool operator==(const BSGSCore<PERM,TRANS>& bsgs) const; 00064 00066 virtual bool isSymmetricGroup() const { return false; } 00067 protected: 00069 explicit BSGSCore(uint id) : m_id(id) {} 00071 BSGSCore(uint id, uint n, uint bSize) : B(bSize), n(n), m_id(id) {} 00073 BSGSCore(uint id, const std::vector<ulong>& B, const std::vector<TRANS>& U, uint n) 00074 : B(B), U(U.size(), TRANS(n)), n(n), m_id(id) {} 00075 00077 int m_id; 00078 private: 00080 BSGSCore(const BSGSCore<PERM,TRANS>& copy) {} 00082 BSGSCore& operator=(const BSGSCore<PERM,TRANS>& copy) {} 00083 }; 00084 00085 template <class PERM, class TRANS> 00086 bool BSGSCore<PERM, TRANS>::operator==(const BSGSCore<PERM,TRANS>& bsgs) const { 00087 return bsgs.m_id == this->m_id; 00088 } 00089 00090 } 00091 00092 #endif // BSGSCORE_H_ 00093