You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							134 lines
						
					
					
						
							5.3 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							134 lines
						
					
					
						
							5.3 KiB
						
					
					
				
								/**
							 | 
						|
								  @file 
							 | 
						|
								
							 | 
						|
								  @ingroup mtr
							 | 
						|
								
							 | 
						|
								  @brief Multiway-branch tree manipulation
							 | 
						|
								
							 | 
						|
								  @details This package provides two layers of functions. Functions
							 | 
						|
								  of the lower level manipulate multiway-branch trees, implemented
							 | 
						|
								  according to the classical scheme whereby each node points to its
							 | 
						|
								  first child and its previous and next siblings. These functions are
							 | 
						|
								  collected in mtrBasic.c.<p>
							 | 
						|
								  Functions of the upper layer deal with group trees, that is the trees
							 | 
						|
								  used by group sifting to represent the grouping of variables. These
							 | 
						|
								  functions are collected in mtrGroup.c.
							 | 
						|
								
							 | 
						|
								  @see The CUDD package documentation; specifically on group
							 | 
						|
								  sifting.
							 | 
						|
								
							 | 
						|
								  @author Fabio Somenzi
							 | 
						|
								
							 | 
						|
								  @copyright@parblock
							 | 
						|
								  Copyright (c) 1995-2015, Regents of the University of Colorado
							 | 
						|
								
							 | 
						|
								  All rights reserved.
							 | 
						|
								
							 | 
						|
								  Redistribution and use in source and binary forms, with or without
							 | 
						|
								  modification, are permitted provided that the following conditions
							 | 
						|
								  are met:
							 | 
						|
								
							 | 
						|
								  Redistributions of source code must retain the above copyright
							 | 
						|
								  notice, this list of conditions and the following disclaimer.
							 | 
						|
								
							 | 
						|
								  Redistributions in binary form must reproduce the above copyright
							 | 
						|
								  notice, this list of conditions and the following disclaimer in the
							 | 
						|
								  documentation and/or other materials provided with the distribution.
							 | 
						|
								
							 | 
						|
								  Neither the name of the University of Colorado nor the names of its
							 | 
						|
								  contributors may be used to endorse or promote products derived from
							 | 
						|
								  this software without specific prior written permission.
							 | 
						|
								
							 | 
						|
								  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
							 | 
						|
								  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
							 | 
						|
								  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
							 | 
						|
								  FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
							 | 
						|
								  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
							 | 
						|
								  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
							 | 
						|
								  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
							 | 
						|
								  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
							 | 
						|
								  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
							 | 
						|
								  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
							 | 
						|
								  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
							 | 
						|
								  POSSIBILITY OF SUCH DAMAGE.
							 | 
						|
								  @endparblock
							 | 
						|
								
							 | 
						|
								*/
							 | 
						|
								
							 | 
						|
								#ifndef MTR_H_
							 | 
						|
								#define MTR_H_
							 | 
						|
								
							 | 
						|
								/*---------------------------------------------------------------------------*/
							 | 
						|
								/* Nested includes                                                           */
							 | 
						|
								/*---------------------------------------------------------------------------*/
							 | 
						|
								
							 | 
						|
								#include <stdio.h>
							 | 
						|
								
							 | 
						|
								#ifdef __cplusplus
							 | 
						|
								extern "C" {
							 | 
						|
								#endif
							 | 
						|
								
							 | 
						|
								/*---------------------------------------------------------------------------*/
							 | 
						|
								/* Constant declarations                                                     */
							 | 
						|
								/*---------------------------------------------------------------------------*/
							 | 
						|
								
							 | 
						|
								/* Flag definitions */
							 | 
						|
								#define MTR_DEFAULT	0x00000000
							 | 
						|
								#define MTR_TERMINAL	0x00000001
							 | 
						|
								#define MTR_SOFT	0x00000002
							 | 
						|
								#define MTR_FIXED	0x00000004
							 | 
						|
								#define MTR_NEWNODE	0x00000008
							 | 
						|
								
							 | 
						|
								/*---------------------------------------------------------------------------*/
							 | 
						|
								/* Stucture declarations                                                     */
							 | 
						|
								/*---------------------------------------------------------------------------*/
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								/*---------------------------------------------------------------------------*/
							 | 
						|
								/* Type declarations                                                         */
							 | 
						|
								/*---------------------------------------------------------------------------*/
							 | 
						|
								
							 | 
						|
								/**
							 | 
						|
								 * @brief multi-way tree node.
							 | 
						|
								 */
							 | 
						|
								typedef struct MtrNode_ MtrNode;
							 | 
						|
								
							 | 
						|
								/*---------------------------------------------------------------------------*/
							 | 
						|
								/* Variable declarations                                                     */
							 | 
						|
								/*---------------------------------------------------------------------------*/
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								/*---------------------------------------------------------------------------*/
							 | 
						|
								/* Macro declarations                                                        */
							 | 
						|
								/*---------------------------------------------------------------------------*/
							 | 
						|
								
							 | 
						|
								/*---------------------------------------------------------------------------*/
							 | 
						|
								/* Function prototypes                                                       */
							 | 
						|
								/*---------------------------------------------------------------------------*/
							 | 
						|
								
							 | 
						|
								MtrNode * Mtr_AllocNode(void);
							 | 
						|
								void Mtr_DeallocNode(MtrNode *node);
							 | 
						|
								MtrNode * Mtr_InitTree(void);
							 | 
						|
								void Mtr_FreeTree(MtrNode *node);
							 | 
						|
								MtrNode * Mtr_CopyTree(MtrNode const *node, int expansion);
							 | 
						|
								void Mtr_MakeFirstChild(MtrNode *parent, MtrNode *child);
							 | 
						|
								void Mtr_MakeLastChild(MtrNode *parent, MtrNode *child);
							 | 
						|
								MtrNode * Mtr_CreateFirstChild(MtrNode *parent);
							 | 
						|
								MtrNode * Mtr_CreateLastChild(MtrNode *parent);
							 | 
						|
								void Mtr_MakeNextSibling(MtrNode *first, MtrNode *second);
							 | 
						|
								void Mtr_PrintTree(MtrNode const *node);
							 | 
						|
								MtrNode * Mtr_InitGroupTree(int lower, int size);
							 | 
						|
								MtrNode * Mtr_MakeGroup(MtrNode *root, unsigned int low, unsigned int high, unsigned int flags);
							 | 
						|
								MtrNode * Mtr_DissolveGroup(MtrNode *group);
							 | 
						|
								MtrNode * Mtr_FindGroup(MtrNode *root, unsigned int low, unsigned int high);
							 | 
						|
								int Mtr_SwapGroups(MtrNode *first, MtrNode *second);
							 | 
						|
								void Mtr_ReorderGroups(MtrNode *treenode, int *permutation);
							 | 
						|
								void Mtr_PrintGroups(MtrNode const *root, int silent);
							 | 
						|
								int Mtr_PrintGroupedOrder(MtrNode const * root, int const *invperm, FILE *fp);
							 | 
						|
								MtrNode * Mtr_ReadGroups(FILE *fp, int nleaves);
							 | 
						|
								
							 | 
						|
								#ifdef __cplusplus
							 | 
						|
								}
							 | 
						|
								#endif
							 | 
						|
								
							 | 
						|
								#endif /* MTR_H_ */
							 |