/* -*- C++ -*- * cpp_sym.h * @(#) Symmetry Code Declaration * * Copyright (C) 1992 - 1999 by the Board of Trustees of * Leland Stanford Junior University. * * License to use, copy, modify, sell and/or distribute this software * and its documentation any purpose is hereby granted without royalty, * subject to the following terms and conditions: * * 1. The above copyright notice and this permission notice must * appear in all copies of the software and related documentation. * * 2. The name of Stanford University may not be used in advertising or * publicity pertaining to distribution of the software without the * specific, prior written permission of Stanford. * * 3. This software may not be called "Murphi" if it has been modified * in any way, without the specific prior written permission of David L. * Dill. * * 4. THE SOFTWARE IS PROVIDED "AS-IS" AND STANFORD MAKES NO * REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, BY WAY OF EXAMPLE, * BUT NOT LIMITATION. STANFORD MAKES NO REPRESENTATIONS OR WARRANTIES * OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE * USE OF THE SOFTWARE WILL NOT INFRINGE ANY PATENTS, COPYRIGHTS * TRADEMARKS OR OTHER RIGHTS. STANFORD SHALL NOT BE LIABLE FOR ANY * LIABILITY OR DAMAGES WITH RESPECT TO ANY CLAIM BY LICENSEE OR ANY * THIRD PARTY ON ACCOUNT OF, OR ARISING FROM THE LICENSE, OR ANY * SUBLICENSE OR USE OF THE SOFTWARE OR ANY SERVICE OR SUPPORT. * * LICENSEE shall indemnify, hold harmless and defend STANFORD and its * trustees, officers, employees, students and agents against any and all * claims arising out of the exercise of any rights under this Agreement, * including, without limiting the generality of the foregoing, against * any damages, losses or liabilities whatsoever with respect to death or * injury to person or damage to property arising from or out of the * possession, use, or operation of Software or Licensed Program(s) by * LICENSEE or its customers. * * Read the file "license" distributed with these sources, or call * Murphi without the -l switch for additional information. * */ /* * Original Author: C. Norris Ip * Symmetry extension to Rel2.6 * Created: 24 Nov 1993 * * Update: * * None * */ #define MAX_NUM_SCALARSET 512 #define MAX_NUM_GLOBALS 512 #define TRUNCATE_LIMIT_FOR_LIMIT_FUNCTION 1 class symmetryclass { stelist *scalarsetlist; stelist *varlist; int num_scalarset; unsigned long size_of_set; int size[MAX_NUM_SCALARSET]; unsigned long factorialsize[MAX_NUM_SCALARSET]; bool no_need_for_perm; unsigned long factorial(int n); void setup(); void generate_set_class(); void generate_permutation_class(); void generate_symmetry_class(); void generate_exhaustive_fast_canonicalization(); void generate_heuristic_fast_canonicalization(); void generate_heuristic_small_mem_canonicalization(); void generate_heuristic_fast_normalization(); void generate_symmetry_code(); void generate_match_function(); void set_var_list(ste * globals); public: symmetryclass() : scalarsetlist(NULL), varlist(NULL), no_need_for_perm(TRUE) {}; void add(ste *s) { scalarsetlist = new stelist(s, scalarsetlist); }; int getsize() { return size_of_set; } void generate_code(ste * globals); void generate_symmetry_function_decl(); }; bool is_simple_scalarset(typedecl * t); class charlist { public: const char * string; charlist * next; typedecl * e; charlist(const char * str, charlist * nxt) : string(str), next(nxt) {} charlist(const char * str, typedecl * e, charlist * nxt) : string(str), next(nxt), e(e) {} virtual ~charlist() { delete string; delete next; } }; /**************************************** * 6 April 94 Norris Ip: generate code for Match() for correct error trace printing beta2.9S released * 14 July 95 Norris Ip: Tidying/removing old algorithm adding small memory algorithm for larger scalarsets ****************************************/ /******************** $Log: cpp_sym.h,v $ Revision 1.2 1999/01/29 07:49:12 uli bugfixes Revision 1.4 1996/08/07 18:54:00 ip last bug fix on NextRule/SetNextEnabledRule has a bug; fixed this turn Revision 1.3 1996/08/07 00:59:13 ip Fixed bug on what_rule setting during guard evaluation; otherwise, bad diagnoistic message on undefine error on guard Revision 1.2 1996/08/06 23:57:39 ip fixed while code generation bug Revision 1.1 1996/08/06 23:56:55 ip Initial revision ********************/