diff --git a/deprecated/cumulus/src/Alliance.py b/deprecated/cumulus/src/Alliance.py deleted file mode 100644 index adb2b0a6..00000000 --- a/deprecated/cumulus/src/Alliance.py +++ /dev/null @@ -1,1465 +0,0 @@ -# -*- Mode:Python; explicit-buffer-name: "Alliance.py" -*- -# -# This file is part of the Coriolis Software. -# Copyright (c) UPMC 2014-2018, All Rights Reserved -# -# +-----------------------------------------------------------------+ -# | C O R I O L I S | -# | C u m u l u s - P y t h o n T o o l s | -# | | -# | Author : Jean-Paul CHAPUT | -# | E-mail : Jean-Paul.Chaput@asim.lip6.fr | -# | =============================================================== | -# | Python : "./plugins/Alliance.py" | -# +-----------------------------------------------------------------+ - - -import os -import os.path -import sys -import time -import stat -import copy -import subprocess -import inspect -import helpers -from helpers.io import ErrorMessage -from helpers.io import WarningMessage -from helpers import Dots - - -# Global display flags -ShowCommand = 0x00001000 -ShowLog = 0x00002000 -ShowDots = 0x00004000 -ForceRun = 0x00008000 - -commandFlags = ShowCommand | ShowLog - - -class AddMode ( object ): - - Append = 1 - Prepend = 2 - Replace = 3 - - -class Gauge ( object ): - - Horizontal = 1 - Vertical = 2 - PinOnly = 4 - Default = 8 - - -class SearchPath ( object ): - - def __init__ ( self ): - self._pathes = [] - return - - def add ( self, path, mode ): - name = os.path.basename(path) - if mode == AddMode.Append: - self._pathes.append( (name,path) ) - elif mode == AddMode.Prepend: - self._pathes.insert( 0, (name,path) ) - elif mode == AddMode.Replace: - for ipath in range(len(self._pathes)): - if self._pathes[ipath][0] == name: - self._pathes[ipath] = (name, path) - return - self._pathes.append( (name,path) ) - return - - def toUnix ( self ): - if not len(self._pathes): return '' - - s = '' - for ipath in range(len(self._pathes)): - if ipath > 0: s += ':' - s += self._pathes[ipath][1] - return s - - def __str__ ( self ): - return self.toUnix() - - - -class Environment ( object ): - - DefaultEnv = 0x0001 - CommandEnv = 0x0002 - Append = 0x0004 - - BehavioralExt = 0x0001 - StructuralExt = 0x0002 - PhysicalExt = 0x0004 - ScriptExt = 0x0008 - CSourceExt = 0x0010 - DirectiveExt = 0x0020 - IocExt = 0x0040 - PatExt = 0x0080 - AllExt = 0x00ff - - extTable = { BehavioralExt : [ 'vbe' ] - , StructuralExt : [ 'vst', 'al' ] - , PhysicalExt : [ 'ap' , 'cp' ] - , ScriptExt : [ 'sh' , 'py' ] - , CSourceExt : [ 'c' ] - , IocExt : [ 'ioc' ] - , DirectiveExt : [ 'lax', 'boom', 'dly' ] - , PatExt : [ 'pat' ] - } - - - @staticmethod - def symbolToFilename ( name, eflags ): - extensions = [] - for iflag in range(0,len(Environment.extTable)): - if eflags & pow(2,iflag): extensions += Environment.extTable[ pow(2,iflag) ] - - for extension in extensions: - if name.endswith('_'+extension): - l = len(extension) - return name[:-l-1], name[-l:] - - return None, None - - @staticmethod - def isExt ( ext, eflags ): - extensions = [] - for iflag in range(0,len(Environment.extTable)): - if eflags & pow(2,iflag): extensions += Environment.extTable[ pow(2,iflag) ] - - if ext in extensions: return True - return False - - - def __init__ ( self, flags ): - self.mbkEnv = {} - if flags & Environment.DefaultEnv: - self.mbkEnv[ 'ALLIANCE_TOP' ] = None - self.mbkEnv[ 'LD_LIBRARY_PATH' ] = None - self.mbkEnv[ 'MBK_TARGET_LIB' ] = None - self.mbkEnv[ 'MBK_WORK_LIB' ] = '.' - self.mbkEnv[ 'MBK_CATA_LIB' ] = SearchPath() - self.mbkEnv[ 'MBK_CATAL_NAME' ] = 'CATAL' - self.mbkEnv[ 'MBK_OUT_LO' ] = 'vst' - self.mbkEnv[ 'MBK_OUT_PH' ] = 'ap' - self.mbkEnv[ 'MBK_IN_LO' ] = 'vst' - self.mbkEnv[ 'MBK_IN_PH' ] = 'ap' - self.mbkEnv[ 'MBK_SEPAR' ] = '_' - self.mbkEnv[ 'MBK_VDD' ] = 'vdd' - self.mbkEnv[ 'MBK_VSS' ] = 'vss' - self.mbkEnv[ 'RDS_TECHNO_NAME' ] = None - self.mbkEnv[ 'GRAAL_TECHNO_NAME' ] = None - else: - self.mbkEnv[ 'ALLIANCE_TOP' ] = None - self.mbkEnv[ 'LD_LIBRARY_PATH' ] = None - self.mbkEnv[ 'MBK_TARGET_LIB' ] = None - self.mbkEnv[ 'MBK_WORK_LIB' ] = None - self.mbkEnv[ 'MBK_CATA_LIB' ] = SearchPath() - self.mbkEnv[ 'MBK_CATAL_NAME' ] = None - self.mbkEnv[ 'MBK_OUT_LO' ] = None - self.mbkEnv[ 'MBK_OUT_PH' ] = None - self.mbkEnv[ 'MBK_IN_LO' ] = None - self.mbkEnv[ 'MBK_IN_PH' ] = None - self.mbkEnv[ 'MBK_SEPAR' ] = None - self.mbkEnv[ 'MBK_VDD' ] = None - self.mbkEnv[ 'MBK_VSS' ] = None - self.mbkEnv[ 'RDS_TECHNO_NAME' ] = None - self.mbkEnv[ 'GRAAL_TECHNO_NAME' ] = None - return - - - def load ( self, allianceConfig, allianceFile ): - entryNo = 0 - for entry in allianceConfig: - entryNo += 1 - - try: - if len(entry) != 2: - raise ErrorMessage(1,['Malformed entry in .' - ,'Must have exactly two fields ("key", ).' - ,str(entry) - ]) - - key, value = entry - if key == 'ALLIANCE_TOP': self.mbkEnv[ key ] = value - if key == 'GRAAL_TECHNO_NAME': self.mbkEnv[ key ] = value - if key == 'RDS_TECHNO_NAME': self.mbkEnv[ key ] = value - if key == 'CATALOG': self.mbkEnv[ key ] = value - if key == 'SCALE_X': self.mbkEnv[ key ] = value - if key == 'IN_LO': self.mbkEnv[ key ] = value - if key == 'IN_PH': self.mbkEnv[ key ] = value - if key == 'OUT_PH': self.mbkEnv[ key ] = value - if key == 'OUT_LO': self.mbkEnv[ key ] = value - if key == 'POWER': self.mbkEnv[ key ] = value - if key == 'GROUND': self.mbkEnv[ key ] = value - if key == 'MBK_TARGET_LIB': self.mbkEnv[ key ] = value - if key == 'WORKING_LIBRARY': self.mbkEnv[ key ] = value - if key == 'SYSTEM_LIBRARY': - for libraryEntry in value: - if len(libraryEntry) != 2: - raise ErrorMessage(1,['Malformed system library entry in .' - ,'Must have exactly two fields ("path", ).' - ,str(libraryEntry) - ]) - libPath, mode = libraryEntry - self.mbkEnv['MBK_CATA_LIB'].add( libPath, mode ) - - except Exception, e: - e = ErrorMessage( e ) - e.addMessage( 'In %s: at index %d.' % (allianceFile,entryNo) ) - print e - - self.mbkEnv[ 'LD_LIBRARY_PATH' ] = self.mbkEnv[ 'ALLIANCE_TOP' ] + '/lib' - return - - - def clone ( self ): - return copy.deepcopy(self) - - - def toSystemEnv ( self ): - env = os.environ - for key in self.mbkEnv.keys(): - if not self.mbkEnv[key]: - print WarningMessage( 'Environment variable <%s> is not set.' % key ) - continue - env[ key ] = str(self.mbkEnv[ key ]) - return env - - -class EnvironmentWrapper ( object ): - - def __init__ ( self, env ): - self._env = env.clone() - return - - def toSystemEnv ( self ): return self._env.toSystemEnv() - - @property - def env ( self ): return self._env - - @property - def TARGET_LIB ( self ): return self._env.mbkEnv[ 'MBK_TARGET_LIB' ] - @property - def WORK_LIB ( self ): return self._env.mbkEnv[ 'MBK_WORK_LIB'] - @property - def CATA_LIB ( self ): return self._env.mbkEnv[ 'MBK_CATA_LIB'] - @property - def CATAL_NAME ( self ): return self._env.mbkEnv[ 'MBK_CATAL_NAME' ] - @property - def OUT_LO ( self ): return self._env.mbkEnv[ 'MBK_OUT_LO' ] - @property - def OUT_PH ( self ): return self._env.mbkEnv[ 'MBK_OUT_PH' ] - @property - def IN_LO ( self ): return self._env.mbkEnv[ 'MBK_IN_LO' ] - @property - def IN_PH ( self ): return self._env.mbkEnv[ 'MBK_IN_PH' ] - @property - def SEPAR ( self ): return self._env.mbkEnv[ 'MBK_SEPAR' ] - @property - def VDD ( self ): return self._env.mbkEnv[ 'MBK_VDD' ] - @property - def VSS ( self ): return self._env.mbkEnv[ 'MBK_VSS' ] - @property - def RDS_TECHNO_NAME ( self ): return self._env.mbkEnv[ 'RDS_TECHNO_NAME' ] - @property - def GRAAL_TECHNO_NAME ( self ): return self._env.mbkEnv[ 'GRAAL_TECHNO_NAME' ] - - @TARGET_LIB.setter - def TARGET_LIB ( self, value ): self._env.mbkEnv[ 'MBK_TARGET_LIB' ] = value - @WORK_LIB.setter - def WORK_LIB ( self, value ): self._env.mbkEnv[ 'MBK_WORK_LIB'] = value - @CATA_LIB.setter - def CATA_LIB ( self, value ): self._env.mbkEnv[ 'MBK_CATA_LIB'] = value - @CATAL_NAME.setter - def CATAL_NAME ( self, value ): self._env.mbkEnv[ 'MBK_CATAL_NAME' ] = value - @OUT_LO.setter - def OUT_LO ( self, value ): self._env.mbkEnv[ 'MBK_OUT_LO' ] = value - @OUT_PH.setter - def OUT_PH ( self, value ): self._env.mbkEnv[ 'MBK_OUT_PH' ] = value - @IN_LO.setter - def IN_LO ( self, value ): self._env.mbkEnv[ 'MBK_IN_LO' ] = value - @IN_PH.setter - def IN_PH ( self, value ): self._env.mbkEnv[ 'MBK_IN_PH' ] = value - @SEPAR.setter - def SEPAR ( self, value ): self._env.mbkEnv[ 'MBK_SEPAR' ] = value - @VDD.setter - def VDD ( self, value ): self._env.mbkEnv[ 'MBK_VDD' ] = value - @VSS.setter - def VSS ( self, value ): self._env.mbkEnv[ 'MBK_VSS' ] = value - @RDS_TECHNO_NAME.setter - def RDS_TECHNO_NAME ( self, value ): self._env.mbkEnv[ 'RDS_TECHNO_NAME' ] = value - @GRAAL_TECHNO_NAME.setter - def GRAAL_TECHNO_NAME ( self, value ): self._env.mbkEnv[ 'GRAAL_TECHNO_NAME' ] = value - - -class ReportLog ( object ): - - def __init__ ( self, baseName ): - self._reportBase = baseName - self._reportFile = None - self._fd = None - self._lastLine = None - self._chooseName() - return - - def _chooseName ( self ): - index = 0 - timeTag = time.strftime("%Y.%m.%d") - while True: - self._reportFile = "./%s-%s-%02d.log" % (self._reportBase,timeTag,index) - if not os.path.isfile(self._reportFile): - print "Report log: <%s>" % self._reportFile - break - index += 1 - return - - @property - def baseName ( self ): return self._reportBase - @baseName.setter - def baseName ( self, baseName ): self._reportBase = baseName - - def open ( self ): - if self._fd: return - self._fd = open( self._reportFile, "a+" ) - return - - def close ( self ): - if not self._fd: return - self._fd.close() - self._fd = None - return - - def write ( self, line ): - if not self._fd: return - self._lastLine = line - self._fd.write( self._lastLine ) - return - - -moduleGlobals = globals() -env = Environment( Environment.DefaultEnv ) - -def staticInitialization (): - global moduleGlobals - global env - - confFile = helpers.sysConfDir+'/'+helpers.symbolicTechno+'/alliance.conf' - symbol = 'allianceConfig' - - if not os.path.isfile(confFile): - print '[ERROR] Missing mandatory Coriolis2 system file:' - print ' <%s>' % confFile - sys.exit( 1 ) - - try: - print ' o Running configuration hook: Alliance.staticInitialization().' - print ' - Loading \"%s\".' % helpers.truncPath(confFile) - exec( open(confFile).read() ) #, moduleGlobals ) - except Exception, e: - print '[ERROR] An exception occured while loading the configuration file:' - print ' <%s>\n' % (confFile) - print ' You should check for simple python errors in this file.' - print ' Error was:' - print ' %s\n' % e - sys.exit( 1 ) - - if moduleGlobals.has_key(symbol): - env.load( moduleGlobals[symbol], confFile ) - del moduleGlobals[symbol] - else: - print '[ERROR] Mandatory symbol <%s> is missing in system configuration file:' % symbol - print ' <%s>' % confFile - sys.exit( 1 ) - - print - return - - -helpers.staticInitialization( quiet=True ) -staticInitialization() - -report = ReportLog( 'alliance' ) - - -class Node ( EnvironmentWrapper ): - - Unreached = -1 - - __allNodes = [] - - @staticmethod - def getAllNodes (): return Node.__allNodes - - @staticmethod - def lookup ( symbol ): - for node in Node.__allNodes: - if node.ruleName == symbol: - return node - return None - - @staticmethod - def allClean (): - for node in Node.__allNodes: node.clean() - return - - @staticmethod - def findSelfSymbols (): - for node in Node.__allNodes: node._findSelfSymbol() - return - - def __init__ ( self ): - EnvironmentWrapper.__init__( self, env ) - self._targetName = None - self._extension = None - self._dependencies = [] - self._childs = [] - self._depth = Node.Unreached - self._depsReacheds = 0 - self._active = False - self._frame = inspect.stack()[self.frameDepth] - Node.__allNodes.append( self ) - return - - def _findSelfSymbol ( self ): - callerGlobals = self._frame[0].f_globals - for symbol in callerGlobals.keys(): - if self == callerGlobals[symbol]: - self.setTarget( symbol ) - return - - self.setDefaultTargetName() - #raise ErrorMessage( 1, 'Node cannot find its symbol in parent frame.' ) - return - - def setTarget ( self, name ): - baseName, extension = Environment.symbolToFilename( name, Environment.AllExt ) - if baseName: - self._targetName = baseName - self._extension = extension - else: - raise ErrorMessage( 1, 'Invalid file format of Node object <%s>' % name ) - return - - @property - def targetName ( self ): return self._targetName - - def setDefaultTargetName ( self ): - if self._dependencies == []: - raise ErrorMessage( 1, 'Node.setDefaultTargetName(): node is neither used nor have dependencies.' ) - self.setTarget( self.getDependency(0)._targetName+'_'+self.toolName.lower() ) - print WarningMessage( 'Node.setDefaultTargetName(): Node is not affected, using: <%s>' % self.targetName ) - return - - def addDependency ( self, dependency ): - if not isinstance(dependency,Node): - raise ErrorMessage( 1, 'Node.addDependency(): Not a node %s.' % str(dependency) ) - self._dependencies.append( dependency ) - dependency.addChild( self ) - return - - def getDependency ( self, i ): return self._dependencies[i] - def getDependencies ( self ): return self._dependencies - - def addChild ( self, child ): - if not child in self._childs: self._childs.append( child ) - return - - def getChilds ( self ): return self._childs - def getDepth ( self ): return self._depth - - def resetOrder ( self ): - self._depth = Node.Unreached - self._depsReacheds = 0 - return - - def incDepsReached ( self, depth ): - if depth > self._depth: self._depth = depth - if self._depsReacheds < len(self._dependencies): - self._depsReacheds += 1 - return self._depsReacheds >= len(self._dependencies) - - def allDepsReached ( self ): - return self._depsReacheds >= len(self._dependencies) - - def checkFile ( self, hardStop=False, errorMessage=[] ): - if not os.path.isfile(self.fileName): - error = ErrorMessage( 1, 'File <%s> of node <%s> has not been created.' - % (self.fileName,self._targetName) ) - if errorMessage: - print - for line in errorMessage: print line - if hardStop: - raise error - else: - print error - return - - def isUptodate ( self ): - depsMTime = 0 - #print ' Target: %-30s %d' % (self.fileName, self.mtime) - for dependency in self.getDependencies(): - dependency.checkFile() - depsMTime = max( depsMTime, dependency.mtime ) - #print ' | Dep: %-31s %d' % (dependency.fileName, dependency.mtime) - return depsMTime <= self.mtime - - def setActive ( self ): - self._active = True - for dependency in self.getDependencies(): - dependency.setActive() - - def isActive ( self ): return self._active - - def setMbkEnv ( self ): return - - def clean ( self ): - if not isinstance(self,Source) \ - and not isinstance(self,Probe) \ - and not isinstance(self,Rule): - print 'Clean | %-30s| rm %s' % ( "<%s>"%self.ruleName, self.fileName ) - - report.open() - report.write( 'Clean <%s>: (%s)\n' % (self.ruleName, self.fileName) ) - if os.path.isfile(self.fileName): - report.write( ' rm %s\n' % self.fileName ) - os.unlink( self.fileName ) - return - report.close() - - @property - def name ( self ): return self._targetName - - @property - def extension ( self ): return self._extension - - @property - def fileName ( self ): return self._targetName+'.'+self._extension - - @property - def ruleName ( self ): - if self._extension: - return self._targetName+'_'+self._extension - return self._targetName - - - @property - def mtime ( self ): - if not os.path.isfile(self.fileName): return 0 - return os.stat( self.fileName )[ stat.ST_MTIME ] - - -class Command ( Node ): - - commandTypes = [] - - def __init__ ( self ): - Node.__init__( self ) - self._flags = 0 - Command.commandTypes.append( type(self) ) - return - - @staticmethod - def asString ( command ): - s = '' - for i in range( len(command) ): - if i: s += ' ' - s += command[i] - return s - - @staticmethod - def indent ( command, indent, width=109 ): - lines = [] - lines.append( '|' ) - - for i in range(len(command)): - lines[-1] += ' ' + command[i] - if (len(lines) == 1 and len(lines[0]) >= width-indent) \ - or len(lines[-1]) >= width: - if i < len(command)-1: - lines.append( ' '*indent + '|' + ' '*(len(command[0])+1) ) - - s = lines[0] - for line in lines[1:]: - s += '\n' + line - return s - - #s = '' - #l = '|' - #for i in range(len(command)): - # l += ' ' + command[i] - # if len(l) >= width-indent: - # if len(s): s += '\n' - # s += l - # if i < len(command)-1: - # l = ' '*indent + '|' + ' '*(len(command[0])+1) - # else: - # return s - #if len(s): s += '\n' - #s += l - #return s - - @property - def frameDepth ( self ): return 3 - @property - def flags ( self ): return self._flags - @flags.setter - def flags ( self, flags ): self._flags = flags - - def _run ( self, checkFile=True ): - global commandFlags - - flags = commandFlags - if self._flags: flags = self._flags - - command = self.asCommand() - ruleName = "<%s>" % self.ruleName - - if self.isActive() and (not self.isUptodate() or flags & ForceRun): - if flags & ShowCommand: - print "Executing | %-30s%s" % (ruleName,Command.indent(command,42)) - child = subprocess.Popen( command - , env=self.env.toSystemEnv() - , stdout=subprocess.PIPE - , stderr=subprocess.PIPE - ) - - dots = Dots( ' '*42+'| ', 109 ) - report.open() - report.write( 'Executing command: %s \n' % ruleName ) - report.write( ' %s\n' % Command.asString(command) ) - - while True: - line = child.stdout.readline() - if not line: break - - if flags & ShowLog: - print "%s" % (line[:-1]) - sys.stdout.flush() - elif flags & ShowDots: - dots.dot() - - report.write( line ) - - errorLines = [] - while True: - line = child.stderr.readline() - if not line: break - - errorLines.append( line[:-1] ) - sys.stderr.flush() - report.write( line ) - - report.close() - dots.reset() - - (pid,status) = os.waitpid(child.pid, 0) - status >>= 8 - if status != 0: - print - for line in errorLines: print line - raise ErrorMessage( 1, "%s returned status:%d." % (self.toolName,status) ) - if checkFile: - self.checkFile( hardStop=True, errorMessage=errorLines ) - else: - if self.isActive(): action = 'Up to date' - else: action = 'Inactive' - if flags & ShowCommand: - print "%-10s| %-30s%s" % (action,ruleName,Command.indent(command,42)) - - report.open() - report.write( '%s command:\n' % action ) - report.write( ' %s\n' % Command.asString(command) ) - report.close() - status = 0 - - return status - - -class StampCommand ( Command ): - - def __init__ ( self ): - Command.__init__( self ) - return - - def setTarget ( self, name ): - if not name.startswith('stamp_'): - raise ErrorMessage( 1, 'Target of stamp commands must start with "stamp_" (<%s>)' % name ) - - self._targetName = 'stamp.' + name[6:] - return - - @property - def frameDepth ( self ): return 4 - @property - def fileName ( self ): return self._targetName - - def _run ( self ): - Command._run( self, checkFile=False ) - if self.isActive(): - with file(self.fileName,'a'): os.utime(self.fileName,None) - return - - -class Probe ( Command ): - - def __init__ ( self, script ): - Command.__init__( self ) - self.addDependency( script ) - return - - @property - def toolName ( self ): return self.getDependency(0).name+'_'+self.getDependency(0).extension - - def asCommand ( self ): - return [ os.path.join(os.getcwd(),self.getDependency(0).fileName) ] - - def _run ( self ): - Command._run( self, checkFile=False ) - return - - -class Source ( Node ): - - def __init__ ( self ): - Node.__init__( self ) - return - - @property - def frameDepth ( self ): return 2 - - -class Rule ( Node ): - - def __init__ ( self, *dependencies ): - Node.__init__( self ) - for dependency in dependencies: - self.addDependency( dependency ) - return - - @property - def frameDepth ( self ): return 2 - @property - def mtime ( self ): return 0 - - def setTarget ( self, name ): - self._targetName = name - return - - -class Boom ( Command ): - - Verbose = 0x00000001 - Trace = 0x00000002 - ReverseOrder = 0x00000004 - LocalOptimization = 0x00000008 - - AlgorithmS = 's' - AlgorithmJ = 'j' - AlgorithmB = 'b' - AlgorithmG = 'g' - AlgorithmP = 'p' - AlgorithmW = 'w' - AlgorithmT = 't' - AlgorithmM = 'm' - AlgorithmO = 'o' - AlgorithmR = 'r' - AlgorithmN = 'n' - - def __init__ ( self, behavioral ): - Command.__init__( self ) - self._directives = None - self._level = 0 - self._delayPercent = 0 - self._iterations = None - self._bddReorder = None - self._algorithm = None - - self.addDependency( behavioral ) - return - - @property - def toolName ( self ): return 'Boom' - - @property - def fileName ( self ): return self.name+'.'+self.extension - - @property - def directives ( self ): return self._directives - @directives.setter - def directives ( self, directives ): - self._directives = directives - self.addDependency( self._directives ) - - @property - def level ( self ): return self._level - @property - def delayPercent( self ): return self._delayPercent - @property - def iterations ( self ): return self._iterations - @property - def bddReorder ( self ): return self._bddReorder - @property - def algorithm ( self ): return self._algorithm - - @level.setter - def level ( self, level ): self._level = level - @delayPercent.setter - def delayPercent( self, delayPercent ): self._delayPercent = delayPercent - @iterations.setter - def iterations ( self, iterations ): self._iterations = iterations - @bddReorder.setter - def bddReorder ( self, bddReorder ): self._bddReorder = bddReorder - @algorithm.setter - def algorithm ( self, algorithm ): self._algorithm = algorithm - - def setMbkEnv ( self ): - if self.extension != 'vbe': - raise ErrorMessage( 1, 'Boom(): Optimized file format/ext must be , not <%s>.' - % self.extension ) - if self.getDependency(0).extension != 'vbe': - raise ErrorMessage( 1, 'Boom(): Behavioral source file format/ext must be , not <%s>.' - % self.getDependency(0).extension ) - if self._directives and self._directives.extension != 'boom': - raise ErrorMessage( 1, 'Boom(): Directive file format/ext must be , not <%s>.' - % self._directives.extension ) - self.IN_LO = 'vst' - self.OUT_LO = 'vst' - return - - def asCommand ( self ): - command = [ 'boom' ] - #command = [ './boom.sh' ] - if self._flags & Boom.Verbose: command += [ '-V' ] - if self._flags & Boom.Trace: command += [ '-T' ] - if self._flags & Boom.ReverseOrder: command += [ '-O' ] - if self._flags & Boom.LocalOptimization: command += [ '-A' ] - - if self._directives: command += [ '-P', self.getDependency(1).name ] - if self._level: command += [ '-l', str(self._level) ] - if self._delayPercent: command += [ '-d', str(self._delayPercent) ] - if self._iterations: command += [ '-i', str(self._iterations) ] - if self._bddReorder: command += [ '-a', str(self._bddReorder) ] - if self._algorithm: command += [ '-'+self._algorithm ] - - command += [ self.getDependency(0).name ] - command += [ self.name ] - return command - - -class Boog ( Command ): - - def __init__ ( self, behavioral ): - Command.__init__( self ) - self._optimMode = 5 - self._xschMode = 2 - self._delayPercent = 0 - self._laxFile = None - self._debugFile = None - - self.addDependency( behavioral ) - return - - @property - def toolName ( self ): return 'Boog' - - @property - def fileName ( self ): return self.name+'.'+self.extension - - @property - def laxFile ( self ): return self._laxNode - @laxFile.setter - def laxFile ( self, laxNode ): - self._laxNode = laxNode - self.addDependency( self._laxNode ) - - @property - def optimMode( self ): return self._optimMode - @property - def xschMode ( self ): return self._xschMode - @property - def debugFile( self ): return self._debugFile - - @optimMode.setter - def optimMode( self, optimMode ): self._optimMode = optimMode - @xschMode.setter - def xschMode ( self, xschMode ): self._xschMode = xschMode - @debugFile.setter - def debugFile( self, debugFile ): self._debugFile = debugFile - - def setMbkEnv ( self ): - if Environment.isExt(self.extension,Environment.StructuralExt): - self.OUT_LO = self.extension - else: - raise ErrorMessage( 1, 'Boog(): Invalid structural (netlist) file format/ext <%s>.' - % self.extension ) - if self.getDependency(0).extension != 'vbe': - raise ErrorMessage( 1, 'Boog(): Behavioral source file format/ext must be , not <%s>.' - % self.getDependency(0).extension ) - if self._laxFile and self._laxFile.extension != 'lax': - raise ErrorMessage( 1, 'Boog(): Lax file format/ext must be , not <%s>.' - % self._directives.extension ) - self.IN_LO = 'vst' - return - - def asCommand ( self ): - command = [ 'boog' ] - if self._optimMode < 5: command += [ '-m', str(self._optimMode) ] - if self._xschMode < 2: command += [ '-x', str(self._xschMode) ] - if self._laxFile: command += [ '-l', self.getDependency(1).name ] - if self._debugFile: command += [ '-d', self._debugFile ] - - command += [ self.getDependency(0).name ] - command += [ self.name ] - return command - - -class Loon ( Command ): - - def __init__ ( self, structural ): - Command.__init__( self ) - self._optimMode = 5 - self._xschMode = 2 - self._laxFile = None - - self.addDependency( structural ) - return - - @property - def toolName ( self ): return 'Loon' - - @property - def fileName ( self ): return self.name+'.'+self.OUT_LO - - @property - def laxFile ( self ): return self._laxFile - @laxFile.setter - def laxFile ( self, laxFile ): - self._laxFile = laxFile - self.addDependency( self._laxFile ) - - @property - def optimMode( self ): return self._optimMode - @property - def xschMode ( self ): return self._xschMode - - @optimMode.setter - def optimMode( self, optimMode ): self._optimMode = optimMode - @xschMode.setter - def xschMode ( self, xschMode ): self._xschMode = xschMode - - def setMbkEnv ( self ): - if Environment.isExt(self.extension,Environment.StructuralExt): - self.OUT_LO = self.extension - else: - raise ErrorMessage( 1, 'Loon(): Invalid output structural (netlist) file format/ext <%s>.' - % self.extension ) - if Environment.isExt(self.getDependency(0).extension,Environment.StructuralExt): - self.IN_LO = self.getDependency(0).extension - else: - raise ErrorMessage( 1, 'Loon(): Invalid input structural (netlist) file format/ext <%s>.' - % self.getDependency(0).extension ) - if self._laxFile and self._laxFile.extension != 'lax': - raise ErrorMessage( 1, 'Loon(): Lax file format/ext must be , not <%s>.' - % self._directives.extension ) - return - - def asCommand ( self ): - command = [ 'loon' ] - if self._optimMode < 5: command += [ '-m', str(self._optimMode) ] - if self._xschMode < 2: command += [ '-x', str(self._xschMode) ] - if self._laxFile: command += [ '-l', self.getDependency(1).fileName ] - - command += [ self.getDependency(0).name ] - command += [ self.name ] - return command - - -class Genlib ( Command ): - - def __init__ ( self, csource ): - Command.__init__( self ) - self.addDependency( csource ) - return - - @property - def toolName ( self ): return 'Genlib' - - @property - def fileName ( self ): return self.name+'.'+self.OUT_LO - - def setMbkEnv ( self ): - if not Environment.isExt(self.extension,Environment.StructuralExt|Environment.PhysicalExt): - raise ErrorMessage( 1, 'Genlib(): Invalid output netlist or layout file format/ext <%s>.' - % self.extension ) - if not Environment.isExt(self.getDependency(0).extension,Environment.CSourceExt): - raise ErrorMessage( 1, 'Genlib(): Input file format/ext must be , not <%s>.' - % self.getDependency(0).extension ) - - if Environment.isExt(self.extension,Environment.StructuralExt): self.OUT_LO = self.extension - if Environment.isExt(self.extension,Environment.PhysicalExt): self.OUT_PH = self.extension - return - - def asCommand ( self ): - command = [ 'genlib', '-v', '-k' ] - command += [ self.getDependency(0).name ] - return command - - -class Genpat ( Command ): - - def __init__ ( self, csource ): - Command.__init__( self ) - self.addDependency( csource ) - return - - @property - def toolName ( self ): return 'Genpat' - - @property - def fileName ( self ): return self.name+'.pat' - - def setMbkEnv ( self ): - if self.extension != 'pat': - raise ErrorMessage( 1, 'Genpat(): Invalid output pattern file format/ext <%s>, must be .' - % self.extension ) - if not Environment.isExt(self.getDependency(0).extension,Environment.CSourceExt): - raise ErrorMessage( 1, 'Genpat(): Input file format/ext must be , not <%s>.' - % self.getDependency(0).extension ) - return - - def asCommand ( self ): - command = [ 'genpat', '-v' ] - command += [ self.getDependency(0).name ] - return command - - -class Asimut ( Command ): - - RootIsBehavioral = 0x00000001 - UseBdd = 0x00000002 - CompileOnly = 0x00000004 - ZeroDelay = 0x00000008 - - def __init__ ( self, model, patterns ): - Command.__init__( self ) - self._backdelay = None - - self.addDependency( patterns ) - self.addDependency( model ) - return - - @property - def toolName ( self ): return 'Asimut' - - @property - def fileName ( self ): return self.name+'.pat' - - @property - def backdelay ( self ): return self._backdelay - @backdelay.setter - def backdelay ( self, backdelay ): - self._backdelay = backdelay - self.addDependency( self._backdelay ) - - def setMbkEnv ( self ): - if self.flags & Asimut.RootIsBehavioral: - if not Environment.isExt(self.getDependency(1).extension,Environment.BehavioralExt): - raise ErrorMessage( 1, 'Asimut(): Invalid input behavioral file format/ext <%s>, must be .' - % self.getDependency(1).extension ) - else: - if Environment.isExt(self.getDependency(1).extension,Environment.StructuralExt): - self.IN_LO = self.getDependency(1).extension - else: - raise ErrorMessage( 1, 'Asimut(): Invalid input structural (netlist) file format/ext <%s>.' - % self.getDependency(1).extension ) - - if self.extension != 'pat': - raise ErrorMessage( 1, 'Asimut(): Invalid output pattern file format/ext <%s>, must be .' - % self.extension ) - if self.getDependency(0).extension != 'pat': - raise ErrorMessage( 1, 'Asimut(): Invalid input pattern file format/ext <%s>, must be .' - % self.getDependency(0).extension ) - return - - def asCommand ( self ): - command = [ 'asimut' ] - if self.flags & Asimut.RootIsBehavioral: command += [ '-b' ] - if self.flags & Asimut.UseBdd: command += [ '-bdd' ] - if self.flags & Asimut.CompileOnly: command += [ '-c' ] - if self.flags & Asimut.ZeroDelay: command += [ '-zd' ] - if self._backdelay: command += [ '-backdelay', self.getDependency(1).name ] - - command += [ self.getDependency(1).name ] - command += [ self.getDependency(0).name ] - command += [ self.name ] - return command - - -class Ocp ( Command ): - - Ring = 0x00000001 - Gnuplot = 0x00000002 - - def __init__ ( self, netlist ): - Command.__init__( self ) - self._partial = None - self._ioc = None - self._margin = -1 - - self.addDependency( netlist ) - return - - @property - def toolName ( self ): return 'Ocp' - - @property - def fileName ( self ): return self.name+'.'+self._extension - - @property - def partial ( self ): return self._partial - @partial.setter - def partial ( self, partial ): - self._partial = partial - self.addDependency( self._partial ) - - @property - def ioc ( self ): return self._ioc - @ioc.setter - def ioc ( self, ioc ): - self._ioc = ioc - self.addDependency( self._ioc ) - - @property - def margin ( self ): return self._margin - @margin.setter - def margin ( self, margin ): - if margin < 0 or margin > 100: - raise ErrorMessage( 1, 'Ocp: Margin must be between 0 and 100% (%d)' % margin ) - self._margin = margin - - def setMbkEnv ( self ): - if Environment.isExt(self.extension,Environment.PhysicalExt): - self.OUT_PH = self.extension - else: - raise ErrorMessage( 1, 'Ocp(): Invalid output layout file format/ext <%s>.' - % self.extension ) - - if Environment.isExt(self.getDependency(0).extension,Environment.StructuralExt): - self.IN_LO = self.getDependency(0).extension - else: - raise ErrorMessage( 1, 'Ocp(): Input file format/ext must be structural, not <%s>.' - % self.getDependency(0).extension ) - - if Environment.isExt(self._partial.extension,Environment.PhysicalExt): - self.IN_PH = self._partial.extension - else: - raise ErrorMessage( 1, 'Ocp(): Invalid input layout file format/ext <%s> for partial placement.' - % self._partial.extension ) - if self._ioc.extension != 'ioc': - raise ErrorMessage( 1, 'Ocp(): Invalid IOC file format/ext <%s>, must be .' - % self._ioc.extension ) - - return - - def asCommand ( self ): - command = [ 'ocp', '-v' ] - if self.flags & Ocp.Ring: command += [ '-ring' ] - if self.flags & Ocp.Gnuplot: command += [ '-gnuplot' ] - if self._margin > 0: command += [ '-margin' , str(self._margin) ] - if self._partial: command += [ '-partial', self._partial.name ] - if self._ioc: command += [ '-ioc' , self._ioc.name ] - - command += [ self.getDependency(0).name ] - command += [ self.name ] - return command - - -class Nero ( Command ): - - ForceGlobalOff = 0x00000001 - ForceGlobalOn = 0x00000002 - Use2Layers = 0x00000004 - Use3Layers = 0x00000008 - Use4Layers = 0x00000010 - Use5Layers = 0x00000020 - Use6Layers = 0x00000040 - - def __init__ ( self, netlist ): - Command.__init__( self ) - self._placement = None - self.addDependency( netlist ) - return - - @property - def toolName ( self ): return 'Nero' - - @property - def fileName ( self ): return self.name+'.'+self._extension - - @property - def placement ( self ): return self._placement - @placement.setter - def placement ( self, placement ): - self._placement = placement - self.addDependency( self._placement ) - - def setMbkEnv ( self ): - if Environment.isExt(self.extension,Environment.PhysicalExt): - self.OUT_PH = self.extension - else: - raise ErrorMessage( 1, 'Nero(): Invalid output layout file format/ext <%s>.' - % self.extension ) - - if Environment.isExt(self.getDependency(0).extension,Environment.StructuralExt): - self.IN_LO = self.getDependency(0).extension - else: - raise ErrorMessage( 1, 'Nero(): Input file format/ext must be structural, not <%s>.' - % self.getDependency(0).extension ) - - if Environment.isExt(self._placement.extension,Environment.PhysicalExt): - self.IN_PH = self._placement.extension - else: - raise ErrorMessage( 1, 'Nero(): Invalid input layout file format/ext <%s> for placement placement.' - % self._placement.extension ) - - return - - def asCommand ( self ): - command = [ 'nero', '-V' ] - if self.flags & Nero.ForceGlobalOff: command += [ '-L' ] - if self.flags & Nero.ForceGlobalOn: command += [ '-G' ] - if self.flags & Nero.Use2Layers: command += [ '-2' ] - if self.flags & Nero.Use3Layers: command += [ '-3' ] - if self.flags & Nero.Use4Layers: command += [ '-4' ] - if self.flags & Nero.Use5Layers: command += [ '-5' ] - if self.flags & Nero.Use6Layers: command += [ '-6' ] - if self._placement: command += [ '-p', self._placement.name ] - - command += [ self.getDependency(0).name ] - command += [ self.name ] - return command - - -class Cougar ( Command ): - - TransistorFlatten = 0x00000001 - CatalogFlatten = 0x00000002 - CapaToGround = 0x00000004 - RCToGround = 0x00000008 - - def __init__ ( self, layout ): - Command.__init__( self ) - self.addDependency( layout ) - return - - @property - def toolName ( self ): return 'Cougar' - - @property - def fileName ( self ): return self.name+'.'+self._extension - - def setMbkEnv ( self ): - if Environment.isExt(self.extension,Environment.StructuralExt): - self.OUT_LO = self.extension - else: - raise ErrorMessage( 1, 'Cougar(): Invalid output netlist file format/ext <%s>.' - % self.extension ) - - if Environment.isExt(self.getDependency(0).extension,Environment.PhysicalExt): - self.IN_PH = self.getDependency(0).extension - else: - raise ErrorMessage( 1, 'Cougar(): Input file format/ext must be physical, not <%s>.' - % self.getDependency(0).extension ) - return - - def asCommand ( self ): - command = [ 'cougar', '-v' ] - if self.flags & Cougar.TransistorFlatten: command += [ '-t' ] - if self.flags & Cougar.CatalogFlatten: command += [ '-f' ] - if self.flags & Cougar.CapaToGround: command += [ '-ac' ] - if self.flags & Cougar.RCToGround: command += [ '-ar' ] - - command += [ self.getDependency(0).name ] - command += [ self.name ] - return command - - -class Lvx ( StampCommand ): - - MergeSupplies = 0x00000001 - OrderConnectors = 0x00000002 - CheckUnassigneds = 0x00000004 - CatalogFlatten = 0x00000008 - - def __init__ ( self, netlist1, netlist2 ): - StampCommand.__init__( self ) - self.addDependency( netlist1 ) - self.addDependency( netlist2 ) - return - - @property - def toolName ( self ): return 'Lvx' - - def setMbkEnv ( self ): - if not Environment.isExt(self.getDependency(0).extension,Environment.StructuralExt): - raise ErrorMessage( 1, 'Lvx(): Input file 1 format/ext must be structural (netlist), not <%s>.' - % self.getDependency(0).extension ) - if not Environment.isExt(self.getDependency(1).extension,Environment.StructuralExt): - raise ErrorMessage( 1, 'Lvx(): Input file 2 format/ext must be structural (netlist), not <%s>.' - % self.getDependency(1).extension ) - return - - def asCommand ( self ): - command = [ 'lvx' ] - command += [ self.getDependency(0).extension ] - command += [ self.getDependency(1).extension ] - command += [ self.getDependency(0).name ] - command += [ self.getDependency(1).name ] - - if self.flags & Lvx.MergeSupplies: command += [ '-a' ] - if self.flags & Lvx.CheckUnassigneds: command += [ '-u' ] - if self.flags & Lvx.CatalogFlatten: command += [ '-f' ] - return command - - -class Druc ( StampCommand ): - - def __init__ ( self, layout ): - StampCommand.__init__( self ) - self.addDependency( layout ) - return - - @property - def toolName ( self ): return 'Druc' - - def setMbkEnv ( self ): - if not Environment.isExt(self.getDependency(0).extension,Environment.PhysicalExt): - raise ErrorMessage( 1, 'Druc(): Input file format/ext must be physical (layout), not <%s>.' - % self.getDependency(0).extension ) - return - - def asCommand ( self ): - command = [ 'druc', '-v' ] - command += [ self.getDependency(0).name ] - return command - - -class Tools ( object ): - - def __init__ ( self ): - self._sourceNodes = [] - self._toolNodes = [] - self._ruleNodes = [] - self._staticOrder = [] - return - - def _findNodes ( self ): - Node.findSelfSymbols() - - for node in Node.getAllNodes(): - isCommand = False - for commandType in Command.commandTypes: - if isinstance(node,commandType): - self._toolNodes.append( node ) - isCommand = True - break - - if not isCommand: - if isinstance(node,Source): self._sourceNodes.append( node ) - if isinstance(node,Rule ): self._ruleNodes.append( node ) - - - # Three level of stack from the user's script python module. - #callerGlobals = inspect.stack()[2][0].f_globals - #for symbol in callerGlobals.keys(): - # isCommand = False - # node = callerGlobals[symbol] - # for commandType in Command.commandTypes: - # if isinstance(node,commandType): - # node.setTarget( symbol ) - # self._toolNodes.append( node ) - # isCommand = True - # break - # - # if not isCommand \ - # and ( isinstance(node,Source) - # or isinstance(node,Rule )): - # node.setTarget( symbol ) - # self._sourceNodes.append( node ) - # - #for node in Node.getAllNodes(): - # if node.targetName: continue - # node.setDefaultTargetName() - # if not isinstance(node,Source): - # self._toolNodes.append( node ) - return - - def _sortNodes ( self ): - self._staticOrder = [] - - nodeStack = [] - for node in self._sourceNodes: - node._depth = 0 - nodeStack.append( node ) - - while nodeStack: - reacheds = 0 - for inode in range(len(nodeStack)): - if nodeStack[inode].allDepsReached(): - reacheds += 1 - node = nodeStack.pop( inode ) - self._staticOrder.append( node ) - for child in node.getChilds(): - if child.getDepth() < 0: nodeStack.append(child) - child.incDepsReached( node.getDepth()+1 ) - break - if not reacheds and nodeStack: - raise ErrorMessage( 1, 'Loop in dependency graph.' ) - return - - def _setMbkEnv ( self ): - for node in self._staticOrder: - node.setMbkEnv() - return - - @staticmethod - def run ( args=[] ): - tool = Tools() - tool._findNodes() - tool._sortNodes() - tool._setMbkEnv() - - doClean = False - for arg in args: - if arg == 'clean': doClean = True - else: - node = Node.lookup( arg ) - if node: node.setActive() - - if commandFlags & ShowCommand and not (commandFlags & ShowLog): - print "==========+===============================+============================================" - print " ACTION | TARGET/RULE | COMMAND" - print "==========+===============================+============================================" - - if doClean: - Node.allClean() - if commandFlags & ShowCommand and not (commandFlags & ShowLog): - print "----------+-------------------------------+--------------------------------------------" - - for node in tool._staticOrder: - #for dep in node.getDependencies(): - # print dep.name - # print dep.fileName - if not isinstance(node,Source) and not isinstance(node,Rule): - if node._run(): break - - if commandFlags & ShowCommand and not (commandFlags & ShowLog): - print "----------+-------------------------------+--------------------------------------------" - - return diff --git a/deprecated/cumulus/src/placeandroute.py b/deprecated/cumulus/src/placeandroute.py deleted file mode 100644 index 94b0cf58..00000000 --- a/deprecated/cumulus/src/placeandroute.py +++ /dev/null @@ -1,2415 +0,0 @@ - -import os -import re - -import Cfg -from Hurricane import * -from helpers.io import ErrorMessage -import CRL -#import Mauka - -#import Knik -#import Kite -#import Zephyr -#import Lightning -#import Zephiros - -#from Anemometer import * -#from Metisse import * - -#from Mistral import * -#from Nimbus import * - -from math import * - - -missingCORIOLIS_TOP = "Missing environment variable CORIOLIS_TOP" - -global POWER, OCCUPIED, FREE -POWER = 2 -OCCUPIED = 1 -FREE = 0 - -global PITCH, SLICE -PITCH = 5 -SLICE = 50 - -global RING_WIDTH -RING_WIDTH = 12 - -global RING_INTERVAL -RING_INTERVAL = 3 - -global standard_instances_masque - -global standard_instances_list -standard_instances_list = [] - -global pad_north, pad_south, pad_east, pad_west -pad_north = [] -pad_south = [] -pad_east = [] -pad_west = [] - -global nb_alims_verticales -nb_alims_verticales = 0 - -global nb_vdd_pins, nb_vss_pins -nb_vdd_pins = 0 -nb_vss_pins = 0 - -global ck_contact_list_to_create -ck_contact_list_to_create = [] - - -def getNetFromPlug ( plug ): - net = plug.getNet() - if net: return net - - masterNet = plug.getMasterNet() - if masterNet.getName() in [ 'vddi', 'vssi', 'vdde', 'vsse' ]: - cell = plug.getCell() - net = cell.getNet(masterNet.getName()) - - return net - -################## -## PlaceCentric ## -################## -def pyPlaceCentric ( cell, instance ) : - '''This function places an instance in the middle of the abutment box of a cell''' - - UpdateSession.open() - - if not instance : - raise ErrorMessage(2,"PlaceCentric: the instance does not exist.") - - w = cell.getAbutmentBox().getWidth() - h = cell.getAbutmentBox().getHeight() - - if ( w < instance.getAbutmentBox().getWidth() ) or ( h < instance.getAbutmentBox().getHeight() ) : - raise ErrorMessage(2,"PlaceCentric : the instance's size is greater than this model.") - - XCenter = cell.getAbutmentBox().getXCenter() - YCenter = cell.getAbutmentBox().getYCenter() - - New_Xmin = XCenter - instance.getAbutmentBox().getWidth() / 2 - New_Ymin = YCenter - instance.getAbutmentBox().getHeight() / 2 - - # One must place the cell on a pitch grid - New_Xmin = New_Xmin - ( New_Xmin % DbU_lambda(PITCH) ) - New_Ymin = New_Ymin - ( New_Ymin % DbU_lambda(PITCH) ) - - Tx = New_Xmin - instance.getAbutmentBox().getXMin() - Ty = New_Ymin - instance.getAbutmentBox().getYMin() - - instance.setTransformation ( Transformation ( Tx, Ty ).getTransformation ( instance.getTransformation() ) ) - instance.setPlacementStatus ( Instance.PlacementStatus.PLACED ) - - UpdateSession.close() - -####################### -## PlaceGlue ## -####################### -def pyPlaceGlue ( cell ) : - '''This function places the glue (unplaced leaf instances) in current cell. - The placement will be made in the region given by the core argument: - - if core is None, the placement region will be the cell abox. - - if core is a cell sub-instance, the placement region will be the sub-instance abox.''' - - mauka = Mauka.MaukaEngine.create ( cell ) - mauka.run () - temporarySave () - - -############# -## RouteCk ## -############# -def pyRouteCk ( cell, netCk ) : - '''This function route signel Ck to standard cells''' - - global pad_north, pad_south, pad_east, pad_west - - UpdateSession.open() - - # Error if Pads have not already been placed - if pad_north == [] : raise ErrorMessage(2,"RouteCk : Pads in the north haven't been placed.") - if pad_south == [] : raise ErrorMessage(2,"RouteCk : Pads in the south haven't been placed.") - if pad_east == [] : raise ErrorMessage(2,"RouteCk : Pads in the east haven't been placed.") - if pad_west == [] : raise ErrorMessage(2,"RouteCk : Pads in the west haven't been placed.") - - # pad_list contains all pads - pad_list = [] - pad_list.extend ( pad_north ) - pad_list.extend ( pad_south ) - pad_list.extend ( pad_east ) - pad_list.extend ( pad_west ) - - net_list = dict() - - for ins in pad_list : - # For each pad that is a clock pad -> adding corresponding net in net_list if not already existing - if isInternalClockPad ( ins ) or isExternalClockPad ( ins ): - clockPlug = None - for plug in ins.getPlugs(): - if plug.getNet() == netCk : - clockPlug = plug - break - - if clockPlug and not net_list.has_key ( str ( clockPlug.getNet().getName() ) ) : net_list[str ( clockPlug.getNet().getName() )] = ( clockPlug.getNet(), cell ) - - map ( createGrid, net_list.values() ) - - UpdateSession.close() - -###################### -## AlimVerticalRail ## -###################### -def pyAlimVerticalRail ( cell, xcoord ) : - '''x is in pitch, it is where the vertical alimentation call back are placed''' - - global PITCH, SLICE - global standard_instances_list, nb_alims_verticales, nb_lignes, standard_instances_masque - global nb_vdd_pins, nb_vss_pins - - UpdateSession.open() - - box = cell.getAbutmentBox() - - # Error message if wrong abutment box - if ( box.getXMin() == box.getXMax() ) or ( box.getYMin() == box.getYMax() ) : - message = "AlimVerticalRail : Can't place the rail vertical in the abutment box of model %s." %str(cell.getName()) \ - + " The abutment box doesn't exist !" \ - + " Maybe you should use DefAb function or ResizeAb function to define un box before the placement of Rail Vertical." - raise ErrorMessage(2,message) - - # Check the value of x - nb_col = cell.getAbutmentBox().getWidth() / DbU_lambda(PITCH) - if ( xcoord >= nb_col ) or ( xcoord < 0 ) : - print( 'This is it' ) - message = "AlimVerticalRail : Illegal argument x , x must be between %d and %d\n" % ( 0, nb_col ) - raise ErrorMessage(2,message) - - # To get the informations about the placement - reference = getStandardInstancesMasque ( cell ) - - if not reference : - message = "AlimVerticalRail : No instance is placed in the model " + str(cell.getName()) + ".\n" \ - + "Please place some instances before the placement of Rail Vertical.\n" - raise ErrorMessage(2,message) - - # Placement verification - #verifyPlacement ( cell ) # NON !! - # delete elements in standard_instances_list - del standard_instances_list[0:] - # get YMin of reference - Ymin = reference[1] - # get orientation code - orientation = reference[2] - - nb_alims_verticales += 1 - - # get the opposite of orientation ID=>MY MY=>ID - if orientation in [Transformation.Orientation.ID, Transformation.Orientation.MX] : - inv_orientation = Transformation.Orientation.MY - orientation = Transformation.Orientation.ID - elif orientation in [Transformation.Orientation.MY, Transformation.Orientation.R2] : - inv_orientation = Transformation.Orientation.ID - orientation = Transformation.Orientation.MY - else : - raise ErrorMessage(2,"AlimVerticalRail : Strawberry.") - -# print "Placement of vertical rail" -# print "Reference ", reference - - power_cell = CRL.AllianceFramework.get().getCell ( "powmid_x0", CRL.Catalog.State.Views ) - - Height_power = power_cell.getAbutmentBox().getHeight() - Width_power = power_cell.getAbutmentBox().getWidth() - - nb_slices = Height_power / DbU_lambda(SLICE) - nb_pitchs = Width_power / DbU_lambda(PITCH) - - # skim through column of index x - for i in range ( nb_lignes ) : - espace_enough = True - - # check the space left - for j in range ( nb_slices ) : - for k in range ( nb_pitchs ) : - if standard_instances_masque[i + j][xcoord + k] != FREE : - espace_enough = False - break - - if espace_enough : - # avoir le nombre de slices entre la reference - distance = Ymin / DbU_lambda(SLICE) - i - - if distance < 0 : distance = -distance - - name_inst = "powmid_%d_%d" % ( nb_alims_verticales , i ) - Powmid = create_inst ( "powmid_x0", name_inst, cell ) - x = xcoord * DbU_lambda(PITCH) - y = i * DbU_lambda(SLICE) - if distance % 2 : my_orientation = inv_orientation - else : my_orientation = orientation - place ( Powmid, int(x), int(y), my_orientation ) - - # place pins (connectors) in metal3 on top and bottom - metal3 = DataBase.getDB().getTechnology().getLayer( "METAL3" ) - - powerNet = None - for net in cell.getPowerNets(): - if powerNet: - raise ErrorMessage(2,"AlimVerticalRail : more than 1 Power Net found !") - powerNet = net - if not powerNet: - raise ErrorMessage(2,"AlimVerticalRail : no Power Net found !") - - groundNet = None - for net in cell.getGroundNets(): - if groundNet: - raise ErrorMessage(2,"AlimVerticalRail : more than 1 Ground Net found !") - groundNet = net - if not groundNet: - raise ErrorMessage(2,"AlimVerticalRail : no Ground Net found !") - - pin_height = 10 - pin_width = 10 - pin_x1 = xcoord * DbU_lambda(PITCH) + DbU_lambda(10) - pin_x2 = xcoord * DbU_lambda(PITCH) + DbU_lambda(25) - pin_y1 = ( nb_lignes * DbU_lambda(SLICE) ) - DbU_lambda(pin_height/4) - pin_y2 = 0 + DbU_lambda(pin_height/4) - - # Top - if standard_instances_masque[nb_lignes-1][xcoord] == FREE : - pin_name = str(powerNet.getName()) + "." + str(nb_vdd_pins) - pin = Pin.create ( powerNet, pin_name, 1, 2, metal3, pin_x1, pin_y1, DbU_lambda(pin_width), DbU_lambda(pin_height) ) - nb_vdd_pins += 1 - - pin_name = str(groundNet.getName()) + "." + str(nb_vss_pins) - pin = Pin.create ( groundNet, pin_name, 1, 2, metal3, pin_x2, pin_y1, DbU_lambda(pin_width), DbU_lambda(pin_height) ) - nb_vss_pins += 1 - - # Bottom - if standard_instances_masque[0][xcoord] == FREE : - pin_name = str(powerNet.getName()) + "." + str(nb_vdd_pins) - pin = Pin.create ( powerNet, pin_name, 2 , 2, metal3, pin_x1, pin_y2, DbU_lambda(pin_width), DbU_lambda(pin_height) ) - nb_vdd_pins += 1 - - pin_name = str(groundNet.getName()) + "." + str(nb_vss_pins) - pin = Pin.create ( groundNet, pin_name, 2 , 2, metal3, pin_x2, pin_y2, DbU_lambda(pin_width), DbU_lambda(pin_height) ) - nb_vss_pins += 1 - - UpdateSession.close() - -######################## -## AlimHorizontalRail ## -######################## -def pyAlimHorizontalRail ( cell, ycoord ) : - '''This function places the horizontal alimentation call back in Alu 4 - 1. the two pins in Alu 4 which name is VDD or VSS are placed - 2. the horizontal in Alu 4 is placed, and is locked on the two pins - y is in slice''' - - global PITCH, SLICE, RING_WIDTH - global standard_instances_list, nb_alims_verticales, nb_lignes, standard_instances_masque - global nb_vdd_pins, nb_vss_pins - - UpdateSession.open() - - box = cell.getAbutmentBox() - - # Error message if wrong abutment box - if ( box.getXMin() == box.getXMax() ) or ( box.getYMin() == box.getYMax() ) : - err = "\nAlimHorizontalRail : Can't place the rail horizontal in the abutment box of model " + str(cell.getName()) \ - + "\n The abutment box doesn't exist !" \ - + "\n Maybe you should use DefAb function or ResizeAb function to define un box before the placement of Rail Horizontal.\n" - raise ErrorMessage(2,err) - - # Check the value of y - if ( ycoord >= nb_lignes ) or ( ycoord < 0 ) : - err = "\nAlimHorizontalRail : Illegal argument y, y must be between %d and %d\n" % ( 0, nb_lignes ) - raise ErrorMessage(2,err) - - # To get the informations about the placement - reference = getStandardInstancesMasque ( cell ) - - if not reference : - err = "AlimHorizontalRail : No instance is placed in the model " + str(cell.getName()) + ".\n" - raise ErrorMessage(2,err) - - # get layers - metal4 = DataBase.getDB().getTechnology().getLayer ( "METAL4" ) - via1 = DataBase.getDB().getTechnology().getLayer ( "VIA12" ) - via2 = DataBase.getDB().getTechnology().getLayer ( "VIA23" ) - via3 = DataBase.getDB().getTechnology().getLayer ( "VIA34" ) - - # Know if it is vdd or vss - string = getVddVss ( cell, ycoord ) - - pin_width = DbU_lambda(RING_WIDTH) - pin_height = DbU_lambda(RING_WIDTH) - pin_x1 = 0 + ( pin_height / 4 ) - pin_x2 = cell.getAbutmentBox().getWidth() - ( pin_height / 4 ) - pin_y = ycoord * DbU_lambda(SLICE) - - # Create two pins - if string == "vdd" : - net = cell.getNet ( "vdd" ) - - pin_name = str(net.getName()) + "." + str(nb_vdd_pins) - pin1 = Pin.create ( net, pin_name, 4, 2, metal4, pin_x1, pin_y, pin_width, pin_height ) - nb_vdd_pins += 1 - - pin_name = str(net.getName()) + "." + str(nb_vdd_pins) - pin2 = Pin.create ( net, pin_name, 3, 2, metal4, pin_x2, pin_y, pin_width, pin_height ) - nb_vdd_pins += 1 - - else : - net = cell.getNet ( "vss" ) - - pin_name = str(net.getName()) + "." + str(nb_vss_pins) - pin1 = Pin.create ( net, pin_name, 4, 2, metal4, pin_x1, pin_y, pin_width, pin_height ) - nb_vss_pins += 1 - - pin_name = str(net.getName()) + "." + str(nb_vss_pins) - pin2 = Pin.create ( net, pin_name, 3, 2, metal4, pin_x2, pin_y, pin_width, pin_height ) - nb_vss_pins += 1 - - # Create horizontal rail - rail_horizontal = Horizontal.create ( pin1 , pin2 , metal4 , pin_y, pin_height, 0 , 0 ) - - power_hur_cell = CRL.AllianceFramework.get().getCell ( "powmid_x0", CRL.Catalog.State.Views ) - Width_power = power_hur_cell.getAbutmentBox().getWidth() - nb_pitchs = Width_power / DbU_lambda(PITCH) # avoir l'interval du cellule power - - # create contacts in via1 , via2 , et via3 - i = 0 - while i < nb_colonnes : - # if it is a power cell, make the via3, and pass the power cell - if standard_instances_masque[ycoord][i] == POWER : - contact_side = DbU_lambda(RING_WIDTH) - DbU_lambda(1.0) - - if string == "vdd" : contact3 = Contact.create ( rail_horizontal, via3, i*DbU_lambda(PITCH) + DbU_lambda(10), 0, contact_side, DbU_lambda(2) ) - else : contact3 = Contact.create ( rail_horizontal, via3, i*DbU_lambda(PITCH) + DbU_lambda(25), 0, contact_side, DbU_lambda(2) ) - i += nb_pitchs - - i+=1 - - UpdateSession.close() - -#################### -## AlimConnectors ## -#################### -def pyAlimConnectors ( cell ) : - '''Creates the METAL1 connectors on the east & west sides of the core''' - - global nb_lignes, nb_vdd_pins, nb_vss_pins - - UpdateSession.open() - - box = cell.getAbutmentBox() - - # Error message if wrong abutment box - if ( box.getXMin() == box.getXMax() ) or ( box.getYMin() == box.getYMax() ) : - err = "\nAlimConnectors : can't place connectors. The abutment box don't exist.\n" \ - + "The abutment box don't exist !\n" \ - + "Maybe you should use DefAb function or ResizeAb function to define un box before the placement of alim connectors.\n" - raise ErrorMessage(2,err) - - # avoir les infos actuelles de placement - getStandardInstancesMasque ( cell ) - - if not reference : - err = "\nAlimConnectors : no instance placed in the model " + str(cell.getName()) + "." \ - + "Please place some instances before the placement of alim connectors.\n" - raise ErrorMessage(2,err) - - metal1 = DataBase.getDB().getTechnology().getLayer("METAL1") - string = getVddVss ( cell, 0 ) - - if re.search ( "vdd", string ) : - inv_string = "vss" - nb_string_pins = nb_vdd_pins - nb_inv_pins = nb_vss_pins - else : - inv_string = "vdd" - nb_string_pins = nb_vss_pins - nb_inv_pins = nb_vdd_pins - - netPair = cell.getNet ( string ) - if not netPair: - raise ErrorMessage(2,"AlimConnectors : can't get net %s."%string) - - netImpair = cell.getNet ( inv_string ) - if not netImpair: - raise ErrorMessage(2,"AlimConnectors : can't get net %s.\n"%inv_string) - - for i in range ( nb_lignes + 1 ) : - pin_width = DbU_lambda(12) - pin_height = DbU_lambda(12) - pin_y = i * DbU_lambda(SLICE) - - if i == 0 : - pin_height = pin_height / 2 - pin_width = pin_width / 2 - pin_y = pin_y + ( pin_height / 2 ) - elif i == nb_lignes : - pin_height = pin_height / 2 - pin_width = pin_width / 2 - pin_y = pin_y - ( pin_height / 2 ) - - pin_x1 = 0 + ( pin_width / 2 ) - pin_x2 = cell.getAbutmentBox().getWidth() - ( pin_width / 2 ) - - # Ligne impaire - if i % 2 : - pin_name = str(netImpair.getName()) + "." + str(nb_inv_pins) - pin1 = Pin.create ( netImpair, pin_name, 4, 2, metal1, pin_x1, pin_y, pin_width, pin_height ) - nb_inv_pins += 1 - - pin_name = str(netImpair.getName()) + "." + str(nb_inv_pins) - pin2 = Pin.create ( netImpair, pin_name, 3, 2, metal1, pin_x2, pin_y, pin_width, pin_height ) - nb_inv_pins += 1 - Horizontal.create ( pin1, pin2, metal1, pin1.getY(), pin_height ) - # Ligne paire - else : - pin_name = str(netPair.getName()) + "." + str(nb_string_pins) - pin1 = Pin.create ( netPair, pin_name, 4, 2, metal1, pin_x1, pin_y, pin_width, pin_height ) - nb_string_pins += 1 - - pin_name = str(netPair.getName()) + "." + str(nb_string_pins) - pin2 = Pin.create ( netPair, pin_name, 3, 2, metal1, pin_x2, pin_y, pin_width, pin_height ) - nb_string_pins += 1 - Horizontal.create ( pin1, pin2, metal1, pin1.getY(), pin_height ) - - if re.search ( "vdd", string ) : - nb_vdd_pins = nb_string_pins - nb_vss_pins = nb_inv_pins - else : - nb_vss_pins = nb_string_pins - nb_vdd_pins = nb_inv_pins - - UpdateSession.close() - -####################### -## GlobalRoute ## -####################### -#def pyGlobalRoute ( cell ): -# """Perform global routing""" -# -# # Initialize Nimbus Grid (50x50 lambdas). -# Kite.setupNimbusGrid ( cell ) # ca a pas l'air de faire ce qu'il faut -# -# # la il faudrait rajouter un petit appel a cell->FlattenNets() pour que ce soit correct ! -# -# # Global routing. -# globalRouter = Knik.getKnik ( cell -# , 1 # congestion. -# , 2 # preCongestion. -# , False # benchMode. -# , True # useSegments. -# ) -# globalRouter.Route () -# globalRouter.Delete () - -####################### -## DetailRoute ## -####################### -#def pyDetailRoute ( cell ): -# """Perform detailed routing""" -# -# viewer = getCEditor ( cell ) -# -# TOOL_TOP = os.getenv ( "CORIOLIS_TOP" ) -# if not TOOL_TOP: -# raise missingCORIOLIS_TOP -# config = TOOL_TOP + "/share/etc/kite.conf.xml" -# -# Kite.setDemoMode ( True ) -# Kite.ConfigurationCreate ( config ) -# detailedRouter = Kite.Create ( cell, viewer ) -# detailedRouter.setGlobalThreshold ( 9*DbU_lambda(50.0) ) -# detailedRouter.setRipupLimit ( 10 ) -# detailedRouter.LoadGlobalRouting ( Kite.LOAD_GR_BY_NET ) -# if viewer: viewer.Refresh () -# -# detailedRouter.LayerAssign ( Kite.LAYER_ASSIGN_BY_TRUNK ) -# if viewer: viewer.Refresh () -# -# detailedRouter.ComputeNetConstraints () -# if viewer: viewer.Refresh () -# -# detailedRouter.ComputeNetOptimals () -# if viewer: viewer.Refresh () -# -# detailedRouter.RunNegociate () -# if viewer: viewer.Refresh () -# -# # Save detailed routing. -# detailedRouter.Delete () -# if viewer: viewer.Refresh () -# -# return - -#def pyTimingStaticAnalysis ( cell ): -# """Perfom timing static analysis""" -# -# TOOL_TOP = os.getenv ( "CORIOLIS_TOP") -# if not TOOL_TOP: -# raise missingCORIOLIS_TOP -# config = TOOL_TOP + "/share/cells/sxlib/sxlib_timing.lib" -# -# LibertyParse ( config ) -# -# lightning = Lightning.getLightning ( cell ) -# timingStaticAnalysis = Zephyr.getZephyr ( cell ) -# #zephiros = Zephiros.getZephiros ( cell ) -# -# timingStaticAnalysis.Update() -# #zephiros.PrintMaxDelay() -# -# return - - - -############## -## PadNorth ## -############## -def pyPadNorth ( cell, core, args ) : - '''This function places pads up north of the cell. It leaves an empty squarre of CARRE * CARRE, CARRE is defined in macro''' - - global pad_north - - # Sauvegarder la liste des plots - pad_north = args - - UpdateSession.open() - - # avoir le largeur de l espace au nord pour placer les pads - north_espace_width = cell.getAbutmentBox().getYMax() - core.getAbutmentBox().getYMax() - north_espace_longueur = cell.getAbutmentBox().getWidth() - (2 * getPadHeight ( cell ) ) # FIXME D2 - - # avoir le nombre de pads - nb_pads = len ( args ) - - # avoir le largeur total des pads - largeur = 0 - for ins in args : - if ins.getPlacementStatus() : - raise ErrorMessage(2,"PadNorth : the instance %s is already placed."%str(ins.getName())) - - if ins.getAbutmentBox().getHeight() >= north_espace_width : - raise ErrorMessage(2,"PadNorth : not enough space for all pads.") - - largeur += ins.getAbutmentBox().getWidth() - - if largeur > north_espace_longueur : - raise ErrorMessage(2,"PadNorth : not enough space for all pads.") - - # calculer l interval entre les pads - interval = ( north_espace_longueur - largeur ) / ( nb_pads + 1 ) - - # placer les pads - Xmin_cell = cell.getAbutmentBox().getXMin() - Ymin_cell = cell.getAbutmentBox().getYMin() - Height_cell = cell.getAbutmentBox().getHeight() - - x_init = Xmin_cell + getPadHeight ( cell ) + interval - - ##### Parcours des pads ##### - for ins in args : - pad_height = ins.getAbutmentBox().getHeight() - pad_width = ins.getAbutmentBox().getWidth() - - _y = Ymin_cell + Height_cell - pad_height # la position finale dans la cell - _x = x_init - - # ATTENTION LES PLOTS DOIVENT ETRE PLACES SUR UNE GRILLE DE 5 LAMBDAS !!!!!!!!!!!!!! - _x = _x - ( _x % DbU_lambda(PITCH) ) - - # ATTENTION ON NE PLACE PAS DES PLOTS D ALIM EN DEHORS DE LA COURONNE INTERNE - if isInternalGroundPad ( ins ) or isInternalPowerPad ( ins ) \ - or isExternalGroundPad ( ins ) or isExternalPowerPad ( ins ) : - cellAB = cell.getAbutmentBox() - coreAB = core.getAbutmentBox() - pad_height = getPadHeight ( cell ) - if _x <= ( ( cellAB.getXMin() + pad_height ) + coreAB.getXMin() ) / 2 \ - or _x >= ( ( cellAB.getXMax() - pad_height ) + coreAB.getXMax() ) / 2 : - raise ErrorMessage(2,"PadNorth : pad %s must be closer to the center.\n"%str(ins.getName())) - - # x calcule pour le pad suivant - x_init = _x + interval + pad_width - - # avoir x y - box = ins.getMasterCell().getAbutmentBox() - _difx = box.getXMin() - _dify = box.getYMin() - - ins.setTransformation ( Transformation ( _x - _difx - , _y - _dify - , Transformation.Orientation.ID - ) - ) - - ins.setPlacementStatus ( Instance.PlacementStatus.FIXED ) - - UpdateSession.close() - -############## -## PadSouth ## -############## -def pyPadSouth ( cell, core, args ) : - '''This function places pads down south of the cell. It leaves an empty squarre of CARRE * CARRE, CARRE is defined in macro''' - - global pad_south - - # Sauvegarder la liste des plots - pad_south = args - - UpdateSession.open() - - # avoir le largeur du espace disponible du nord pour placer les pads - south_espace_width = core.getAbutmentBox().getYMin() - cell.getAbutmentBox().getYMin() - south_espace_longueur = cell.getAbutmentBox().getWidth() - ( 2 * getPadHeight ( cell ) ) - - # avoir le nombre de pads - nb_pads = len ( args ) - - # avoir le largeur total des pads - largeur = 0 - for ins in args : - if ins.getPlacementStatus() : - raise ErrorMessage(2,"PadSouth : the instance %s is already placed."%str(ins.getName())) - - if ins.getAbutmentBox().getHeight() >= south_espace_width : - raise ErrorMessage(2,"PadSouth : not enough space for all pads.") - - largeur += ins.getAbutmentBox().getWidth() - - if largeur > south_espace_longueur : - raise ErrorMessage(2,"PadSouth : not enough space for all pads.") - - # calculer l'interval entre les pads - interval = ( south_espace_longueur - largeur ) / ( nb_pads + 1 ) - - # placer les pads - Xmin_cell = cell.getAbutmentBox().getXMin() - Ymin_cell = cell.getAbutmentBox().getYMin() - - x_init = Xmin_cell + getPadHeight ( cell ) + interval - - ##### Parcours des pads ##### - for ins in args : - pad_height = ins.getAbutmentBox().getHeight() - pad_width = ins.getAbutmentBox().getWidth() - - _y = Ymin_cell # la position finale dans la cell - _x = x_init - - # ATTENTION LES PLOTS DOIVENT ETRE PLACES SUR UNE GRILLE DE 5 LAMBDAS !!!!!!!!!!!!!! - _x = _x - ( _x % DbU_lambda(PITCH) ) - - # ATTENTION ON NE PLACE PAS DES PLOTS D ALIM EN DEHORS DE LA COURONNE INTERNE - if isInternalGroundPad ( ins ) or isInternalPowerPad ( ins ) \ - or isExternalGroundPad ( ins ) or isExternalPowerPad ( ins ) : - cellAB = cell.getAbutmentBox() - coreAB = core.getAbutmentBox() - pad_height = getPadHeight ( cell ) - if _x <= ( ( cellAB.getXMin() + pad_height ) + coreAB.getXMin() ) / 2 \ - or _x >= ( ( cellAB.getXMax() - pad_height ) + coreAB.getXMax() ) / 2 : - raise ErrorMessage(2,"PadSouth : pad %s must be closer to the center."%str(ins.getName())) - - # x calcule pour le pad suivant - x_init = _x + interval + pad_width - - # avoir x y apres orientation - box = ins.getMasterCell().getAbutmentBox() - _difx = Transformation ( 0, 0, Transformation.Orientation.MY ).getBox ( box ).getXMin() - _dify = Transformation ( 0, 0, Transformation.Orientation.MY ).getBox ( box ).getYMin() - - ins.setTransformation ( Transformation ( _x - _difx - , _y - _dify - , Transformation.Orientation.MY - ) - ) - - ins.setPlacementStatus ( Instance.PlacementStatus.FIXED ) - - UpdateSession.close() - -############# -## PadEast ## -############# -def pyPadEast ( cell, core, args ) : - '''This function places pads at the east of the cell. It leaves an empty squarre of CARRE * CARRE, CARRE is defined in macro''' - - global pad_east - - # Sauvegarder la liste des plots - pad_east = args - - UpdateSession.open() - - # avoir le largeur du espace disponible du nord pour placer les pads - east_espace_width = cell.getAbutmentBox().getXMax() - core.getAbutmentBox().getXMax() - east_espace_longueur = cell.getAbutmentBox().getHeight() - ( 2 * getPadHeight ( cell ) ) - - # avoir le nombre de pads - nb_pads = len ( args ) - - # avoir le largeur total des pads - largeur = 0 - for ins in args : - if ins.getPlacementStatus() : - raise ErrorMessage(2,"PadEast : the instance %s is already placed."%str(insGetName())) - - if ins.getAbutmentBox().getHeight() >= east_espace_width : - raise ErrorMessage(2,"PadEast : not enough space for pads.") - - largeur += ins.getAbutmentBox().getWidth() - - if largeur > east_espace_longueur : - raise ErrorMessage(2,"PadEast : not enough space for all pads.") - - # calculer l'interval entre les pads - interval = ( east_espace_longueur - largeur ) / ( nb_pads + 1 ) - - # placer les pads - Xmin_cell = cell.getAbutmentBox().getXMin() - Ymin_cell = cell.getAbutmentBox().getYMin() - Xmax_cell = cell.getAbutmentBox().getXMax() - - y_init = Ymin_cell + getPadHeight ( cell ) + interval - - ##### Parcours des pads ##### - for ins in args : - pad_height = ins.getAbutmentBox().getHeight() - pad_width = ins.getAbutmentBox().getWidth() - - Xmin_pad = ins.getMasterCell().getAbutmentBox().getXMin() - Ymin_pad = ins.getMasterCell().getAbutmentBox().getYMin() - - _x = Xmax_cell - pad_height # la position finale dans la cell - _y = y_init - - # ATTENTION LES PLOTS DOIVENT ETRE PLACES SUR UNE GRILLE DE 5 LAMBDAS !!!!!!!!!!!!!! - _y = _y - ( _y % DbU_lambda(PITCH) ) - - # ATTENTION ON NE PLACE PAS DES PLOTS D ALIM EN DEHORS DE LA COURONNE INTERNE - if isInternalGroundPad ( ins ) or isInternalPowerPad ( ins ) \ - or isExternalGroundPad ( ins ) or isExternalPowerPad ( ins ) : - cellAB = cell.getAbutmentBox() - coreAB = core.getAbutmentBox() - pad_height = getPadHeight ( cell ) - if _y <= ( ( cellAB.getYMin() + pad_height ) + coreAB.getYMin() ) / 2 \ - or _y >= ( ( cellAB.getYMax() - pad_height ) + coreAB.getYMax() ) / 2 : - raise ErrorMessage(2,"PadEast : pad %s must be closer to the center.\n"%str(ins.getName())) - - # y calcule pour le pad suivant - y_init = _y + interval + pad_width - - # avoir le x y apres orientation - box = ins.getMasterCell().getAbutmentBox() - _difx = Transformation ( 0, 0, 7 ).getBox ( box ).getXMin() - _dify = Transformation ( 0, 0, 7 ).getBox ( box ).getYMin() - - ins.setTransformation ( Transformation ( _x - _difx - , _y - _dify - , Transformation.Orientation.YR - ) - ) - - ins.setPlacementStatus ( Instance.PlacementStatus.FIXED ) - - UpdateSession.close() - -############# -## PadWest ## -############# -def pyPadWest ( cell, core, args ) : - '''This function places pads at the west of the cell. It leaves an empty squarre of CARRE * CARRE, CARRE is defined in macro''' - - global pad_west - - # Sauvegarder la liste des plots - pad_west = args - - UpdateSession.open() - - # avoir le largeur du espace disponible du nord pour placer les pads - west_espace_width = core.getAbutmentBox().getXMin() - cell.getAbutmentBox().getXMin() - west_espace_longueur = cell.getAbutmentBox().getHeight() - ( 2 * getPadHeight ( cell ) ) - - # avoir le nombre de pads - nb_pads = len ( args ) - - # avoir le largeur total des pads - largeur = 0 - for ins in args : - if ins.getPlacementStatus() : - raise ErrorMessage(2,"PadWest : the instance %s is already placed."%str(ins.getName())) - - if ins.getAbutmentBox().getHeight() >= west_espace_width : - raise ErrorMessage(2,"PadWest : not enough space for pads.") - - largeur += ins.getAbutmentBox().getWidth() - - if largeur > west_espace_longueur : - raise ErrorMessage(2,"PadWest : not enough space for pads.") - - # calculer l'interval entre les pads - interval = int ( ( west_espace_longueur - largeur ) / ( nb_pads + 1 ) ) - - # placer les pads - Xmin_cell = cell.getAbutmentBox().getXMin() - Ymin_cell = cell.getAbutmentBox().getYMin() - - y_init = Ymin_cell + getPadHeight ( cell ) + interval - - ##### Parcours des pads ##### - for ins in args : - pad_height = ins.getAbutmentBox().getHeight() - pad_width = ins.getAbutmentBox().getWidth() - - _x = Xmin_cell # la position finale dans la cell - _y = y_init - - # ATTENTION LES PLOTS DOIVENT ETRE PLACES SUR UNE GRILLE DE 5 LAMBDAS !!!!!!!!!!!!!! - _y = _y - ( _y % DbU_lambda(PITCH) ) - - # ATTENTION ON NE PLACE PAS DES PLOTS D ALIM EN DEHORS DE LA COURONNE INTERNE - if isInternalGroundPad ( ins ) or isInternalPowerPad ( ins ) \ - or isExternalGroundPad ( ins ) or isExternalPowerPad ( ins ) : - cellAB = cell.getAbutmentBox() - coreAB = core.getAbutmentBox() - pad_height = getPadHeight ( cell ) - - if _y <= ( ( cellAB.getYMin() + pad_height ) + coreAB.getYMin() ) / 2 \ - or _y >= ( ( cellAB.getYMax() - pad_height ) + coreAB.getYMax() ) / 2 : - raise ErrorMessage(2,"PadWest : pad %s must be closer to the center.\n"%str(ins.getName())) - - # y calcule pour le pad suivant - y_init = _y + interval + pad_width - - # avoir x y apres orientation - box = ins.getMasterCell().getAbutmentBox() - _difx = Transformation ( 0, 0, 1 ).getBox ( box ).getXMin() - _dify = Transformation ( 0, 0, 1 ).getBox ( box ).getYMin() - - ins.setTransformation ( Transformation ( _x - _difx - , _y - _dify - , Transformation.Orientation.R1 - ) - ) - - ins.setPlacementStatus ( Instance.PlacementStatus.FIXED ) - - UpdateSession.close() - -############### -## PowerRing ## -############### -def pyPowerRing ( cell, core, n ) : - '''This function places power rings around the core and around the plots - n is the number of rings (n vdd, n+1 vss) - , Distance between rings is defined by macro DbU_lambda ( RING_INTERVAL ) - Width of rings is defined by macro DbU_lambda ( RING_WIDTH )''' - - global pad_north, pad_south, pad_east, pad_west - global RING_INTERVAL, RING_WIDTH - - db = DataBase.getDB() - - topRoutingLayerName = Cfg.getParamString('katabatic.topRoutingLayer', 'METAL4').asString() - topRoutingLayer = db.getTechnology().getLayer( topRoutingLayerName ) - allowedDepth = CRL.AllianceFramework.get().getRoutingGauge().getLayerDepth( topRoutingLayer ) - - print( 'topRoutingLayer: <%s> depth:%d' % (topRoutingLayer.getName(), allowedDepth) ) - - UpdateSession.open() - - if pad_north == [] : raise ErrorMessage(2,"PowerRing : Pads in the north haven't been placed") - if pad_south == [] : raise ErrorMessage(2,"PowerRing : Pads in the south haven't been placed") - if pad_east == [] : raise ErrorMessage(2,"PowerRing : Pads in the east haven't been placed") - if pad_west == [] : raise ErrorMessage(2,"PowerRing : Pads in the west haven't been placed") - - ############################# - # PARAMETRE DU PLACEMENT ## - ############################# - - # le largeur du fil de routage - routage_segment_width = DbU_lambda(12) - - # la distance entre les deux centres des couronnes - decalage = DbU_lambda(RING_WIDTH) + DbU_lambda(RING_INTERVAL) - - # Recuperer les informations sur le core - core_width = core.getAbutmentBox().getWidth() - core_height = core.getAbutmentBox().getHeight() - core_Xmin = core.getAbutmentBox().getXMin() - core_Ymin = core.getAbutmentBox().getYMin() - core_Xmax = core.getAbutmentBox().getXMax() - core_Ymax = core.getAbutmentBox().getYMax() - mips_core = core.getMasterCell() - - # Recuperer la hauteur des plots - pad_height = getPadHeight ( cell ) - - # Recuperer les layers ( Vias , Alus ) - metal4 = db.getTechnology().getLayer ( "METAL4" ) - metal3 = db.getTechnology().getLayer ( "METAL3" ) - metal2 = db.getTechnology().getLayer ( "METAL2" ) - metal1 = db.getTechnology().getLayer ( "METAL1" ) - via1 = db.getTechnology().getLayer ( "VIA12" ) - via2 = db.getTechnology().getLayer ( "VIA23" ) - via3 = db.getTechnology().getLayer ( "VIA34" ) - - if (allowedDepth < 3): - hCoronaLayer = metal2 - vCoronaLayer = metal3 - cCoronaLayer = via2 - else: - hCoronaLayer = metal4 - vCoronaLayer = metal3 - cCoronaLayer = via3 - - # Recuperer les nets ( qui connectent les connectors du plot : vdde , vsse , vddi , vssi , ck ) - instance = cell.getInstance( pad_north[0].getName() ) - model = instance.getMasterCell() - vddp = instance.getPlug ( model.getNet("vdde") ).getNet() - vssp = instance.getPlug ( model.getNet("vsse") ).getNet() - vdd = instance.getPlug ( model.getNet("vddi") ).getNet() - vss = instance.getPlug ( model.getNet("vssi") ).getNet() - ck = instance.getPlug ( model.getNet("ck" ) ).getNet() - # If nets are globals, get them from the netlist. - if not vddp: vddp = cell.getNet('vdde') - if not vssp: vssp = cell.getNet('vsse') - if not vdd: vdd = cell.getNet('vddi') - if not vss: vss = cell.getNet('vssi') - if not ck: ck = cell.getNet('cki') - - # Prendre la hauteur, la longueur, Xmin et Ymin de ce modele - cell_height = cell.getAbutmentBox().getHeight() - cell_width = cell.getAbutmentBox().getWidth() - cell_Xmin = cell.getAbutmentBox().getXMin() - cell_Ymin = cell.getAbutmentBox().getYMin() - cell_Xmax = cell.getAbutmentBox().getXMax() - cell_Ymax = cell.getAbutmentBox().getYMax() - - # Verifier s'il y a assez de places pour les couronnes - if ( cell_height - core_height ) < ( cell_width - core_width ) : smaller = cell_height - core_height - else : smaller = cell_width - core_width - limit = DbU_lambda ( int ( DbU_getLambda ( smaller ) / 2 ) ) - pad_height - - if ( (2*n + 1) * DbU_lambda(RING_INTERVAL) + (2*n) * DbU_lambda(RING_WIDTH) ) >= limit : # 2*n + 1 spaces + 2*n width - raise ErrorMessage(2,"PowerRing : too many rings, not enough space") - - # la distance entre les couronnes et le core - marge = DbU_lambda ( int ( DbU_getLambda ( limit - (2*n + 1 ) * DbU_lambda(RING_INTERVAL) - (2*n) * DbU_lambda(RING_WIDTH) ) ) / 2 ) - - east_power = [] - west_power = [] - north_power = [] - south_power = [] - - searchVddVss ( cell, east_power, west_power, north_power, south_power ) - #affichePad ( cell ) - - # Creation des listes pad_north_pin_y_vss et pad_north_pin_vdd - pad_north_pin_x_vss = [] - pad_north_pin_x_vdd = [] - for pad_inst in pad_north : - if isInternalGroundPad ( pad_inst ) or isInternalPowerPad ( pad_inst ) \ - or isExternalGroundPad ( pad_inst ) or isExternalPowerPad ( pad_inst ): - transformation = pad_inst.getTransformation() - for element in NetExternalComponents.get ( pad_inst.getMasterCell().getNet("vssi") ): - if re.search ( "METAL2", str ( element.getLayer() ) ) \ - and ( ( element.getY() - element.getBoundingBox().getHalfHeight() ) < pad_inst.getMasterCell().getAbutmentBox().getYMin() ) : - pad_north_pin_x_vss.append ( [transformation.getX ( element.getX(), element.getY() ), element.getBoundingBox().getHalfWidth()] ) - - for element in NetExternalComponents.get ( pad_inst.getMasterCell().getNet("vddi") ): - if re.search ( "METAL2", str ( element.getLayer() ) ) \ - and ( ( element.getY() - element.getBoundingBox().getHalfHeight() ) < pad_inst.getMasterCell().getAbutmentBox().getYMin() ) : - pad_north_pin_x_vdd.append ( [transformation.getX ( element.getX(), element.getY() ), element.getBoundingBox().getHalfWidth()] ) - - - # Creation des listes pad_south_pin_y_vss et pad_south_pin_vdd - pad_south_pin_x_vss = [] - pad_south_pin_x_vdd = [] - for pad_inst in pad_south : - if isInternalGroundPad ( pad_inst ) or isInternalPowerPad ( pad_inst ) \ - or isExternalGroundPad ( pad_inst ) or isExternalPowerPad ( pad_inst ): - transformation = pad_inst.getTransformation() - for element in NetExternalComponents.get ( pad_inst.getMasterCell().getNet("vssi") ): - if re.search ( "METAL2", str ( element.getLayer() ) ) \ - and ( ( element.getY() - element.getBoundingBox().getHalfHeight() ) < pad_inst.getMasterCell().getAbutmentBox().getYMin() ) : - pad_south_pin_x_vss.append ( [transformation.getX ( element.getX(), element.getY() ), element.getBoundingBox().getHalfWidth()] ) - - for element in NetExternalComponents.get ( pad_inst.getMasterCell().getNet("vddi") ): - if re.search ( "METAL2", str ( element.getLayer() ) ) \ - and ( ( element.getY() - element.getBoundingBox().getHalfHeight() ) < pad_inst.getMasterCell().getAbutmentBox().getYMin() ) : - pad_south_pin_x_vdd.append ( [transformation.getX ( element.getX(), element.getY() ), element.getBoundingBox().getHalfWidth()] ) - - - # Creation des listes pad_east_pin_y_vss et pad_east_pin_vdd - pad_east_pin_y_vss = [] - pad_east_pin_y_vdd = [] - for pad_inst in pad_east : - if isInternalGroundPad ( pad_inst ) or isInternalPowerPad ( pad_inst ) \ - or isExternalGroundPad ( pad_inst ) or isExternalPowerPad ( pad_inst ): - transformation = pad_inst.getTransformation() - for element in NetExternalComponents.get ( pad_inst.getMasterCell().getNet("vssi") ): - if re.search ( "METAL2", str ( element.getLayer() ) ) \ - and ( ( element.getY() - element.getBoundingBox().getHalfHeight() ) < pad_inst.getMasterCell().getAbutmentBox().getYMin() ) : - pad_east_pin_y_vss.append ( [transformation.getY ( element.getX(), element.getY() ), element.getBoundingBox().getHalfHeight()] ) - - for element in NetExternalComponents.get ( pad_inst.getMasterCell().getNet("vddi") ): - if re.search ( "METAL2", str ( element.getLayer() ) ) \ - and ( ( element.getY() - element.getBoundingBox().getHalfHeight() ) < pad_inst.getMasterCell().getAbutmentBox().getYMin() ) : - pad_east_pin_y_vdd.append ( [transformation.getY ( element.getX(), element.getY() ), element.getBoundingBox().getHalfHeight()] ) - - # Creation des listes pad_west_pin_y_vss et pad_west_pin_vdd - pad_west_pin_y_vss = [] - pad_west_pin_y_vdd = [] - for pad_inst in pad_west : - if isInternalGroundPad ( pad_inst ) or isInternalPowerPad ( pad_inst ) \ - or isExternalGroundPad ( pad_inst ) or isExternalPowerPad ( pad_inst ): - transformation = pad_inst.getTransformation() - for element in NetExternalComponents.get ( pad_inst.getMasterCell().getNet("vssi") ): - if re.search ( "METAL2", str ( element.getLayer() ) ) \ - and ( ( element.getY() - element.getBoundingBox().getHalfHeight() ) < pad_inst.getMasterCell().getAbutmentBox().getYMin() ) : - pad_west_pin_y_vss.append ( [transformation.getY ( element.getX(), element.getY() ), element.getBoundingBox().getHalfHeight()] ) - - for element in NetExternalComponents.get ( pad_inst.getMasterCell().getNet("vddi") ): - if re.search ( "METAL2", str ( element.getLayer() ) ) \ - and ( ( element.getY() - element.getBoundingBox().getHalfHeight() ) < pad_inst.getMasterCell().getAbutmentBox().getYMin() ) : - pad_west_pin_y_vdd.append ( [transformation.getY ( element.getX(), element.getY() ), element.getBoundingBox().getHalfHeight()] ) - - ##################################### - ## PLACER LES COURONNES INTERNES ## - ##################################### - - # les listes pour sauvegarder les segments des couronnes des quatres coins - vertical_west_vss = [] - vertical_east_vss = [] - horizontal_south_vss = [] - horizontal_north_vss = [] - - vertical_west_vdd = [] - vertical_east_vdd = [] - horizontal_south_vdd = [] - horizontal_north_vdd = [] - - init_Xmin = core_Xmin - marge - DbU_lambda(RING_WIDTH) / 2 - init_Xmin = init_Xmin - ( init_Xmin % DbU_lambda(PITCH) ) - init_Ymin = core_Ymin - marge - DbU_lambda(RING_WIDTH) / 2 - init_Ymin = init_Ymin - ( init_Ymin % DbU_lambda(PITCH) ) - init_Xmax = core_Xmax + marge + DbU_lambda(RING_WIDTH) / 2 - init_Xmax = init_Xmax - ( init_Xmax % DbU_lambda(PITCH) ) - init_Ymax = core_Ymax + marge + DbU_lambda(RING_WIDTH) / 2 - init_Ymax = init_Ymax - ( init_Ymax % DbU_lambda(PITCH) ) - - contact_side = DbU_lambda(RING_WIDTH-1) - - - for i in range ( 0, 2*n+1, 2 ) : - contact1 = Contact.create ( vss, cCoronaLayer, init_Xmin - decalage*i, init_Ymin - decalage*i, contact_side, contact_side ) - contact2 = Contact.create ( vss, cCoronaLayer, init_Xmin - decalage*i, init_Ymax + decalage*i, contact_side, contact_side ) - contact3 = Contact.create ( vss, cCoronaLayer, init_Xmax + decalage*i, init_Ymax + decalage*i, contact_side, contact_side ) - contact4 = Contact.create ( vss, cCoronaLayer, init_Xmax + decalage*i, init_Ymin - decalage*i, contact_side, contact_side ) - - vertical_west_vss.append ( Vertical.create ( contact1, contact2, vCoronaLayer, init_Xmin - decalage*i, DbU_lambda(RING_WIDTH) ) ) - vertical_east_vss.append ( Vertical.create ( contact3, contact4, vCoronaLayer, init_Xmax + decalage*i, DbU_lambda(RING_WIDTH) ) ) - horizontal_south_vss.append ( Horizontal.create ( contact1, contact4, hCoronaLayer, init_Ymin - decalage*i, DbU_lambda(RING_WIDTH) ) ) - horizontal_north_vss.append ( Horizontal.create ( contact2, contact3, hCoronaLayer, init_Ymax + decalage*i, DbU_lambda(RING_WIDTH) ) ) - - if i != 2*n : - contact1 = Contact.create ( vdd, cCoronaLayer, init_Xmin - decalage* ( i + 1 ), init_Ymin - decalage*( i + 1 ) , contact_side, contact_side ) - contact2 = Contact.create ( vdd, cCoronaLayer, init_Xmin - decalage* ( i + 1 ), init_Ymax + decalage*( i + 1 ) , contact_side, contact_side ) - contact3 = Contact.create ( vdd, cCoronaLayer, init_Xmax + decalage* ( i + 1 ), init_Ymax + decalage*( i + 1 ) , contact_side, contact_side ) - contact4 = Contact.create ( vdd, cCoronaLayer, init_Xmax + decalage* ( i + 1 ), init_Ymin - decalage*( i + 1 ) , contact_side, contact_side ) - vertical_west_vdd.append ( Vertical.create ( contact1, contact2, vCoronaLayer, init_Xmin - decalage* ( i + 1 ), DbU_lambda(RING_WIDTH) ) ) - vertical_east_vdd.append ( Vertical.create ( contact3, contact4, vCoronaLayer, init_Xmax + decalage* ( i + 1 ), DbU_lambda(RING_WIDTH) ) ) - horizontal_south_vdd.append ( Horizontal.create ( contact1, contact4, hCoronaLayer, init_Ymin - decalage* ( i + 1 ), DbU_lambda(RING_WIDTH) ) ) - horizontal_north_vdd.append ( Horizontal.create ( contact2, contact3, hCoronaLayer, init_Ymax + decalage* ( i + 1 ), DbU_lambda(RING_WIDTH) ) ) - - # MACRO pour les directions d'access des pins - UNDEFINED = 0 - NORTH = 1 - SOUTH = 2 - EAST = 3 - WEST = 4 - - ############################################################## - ## Connecter les pins de vss aux couronnes de vss ## - ############################################################## - core_transformation = core.getTransformation() - - # parcourir les pins de vss - for element in mips_core.getNet("vss").getPins(): - element_layer_name = str ( element.getLayer().getName() ) # string, nom du layer - # avoir le x, y transforme - _x = core_transformation.getX ( element.getX(), element.getY() ) - _y = core_transformation.getY ( element.getX(), element.getY() ) - - # Creer un contact a la place du pin - if (allowedDepth > 2) and \ - re.search ( "METAL4", element_layer_name ) : old_contact = Contact.create ( vss, metal4, _x, _y , element.getHeight(), element.getHeight() ) - elif re.search ( "METAL1", element_layer_name ) : old_contact = Contact.create ( vss, metal1, _x, _y , element.getHeight(), element.getHeight() ) - elif re.search ( "METAL3", element_layer_name ) : old_contact = Contact.create ( vss, metal3, _x, _y , element.getHeight(), element.getHeight() ) - else : - raise ErrorMessage(2,"wrong layer of pin in the west of core : %s.\n" % element_layer_name) - - # Connection du cote de l'ouest - if element.getAccessDirection() == WEST : - # Parcourir tous les couronnes vss - halfHeight = element.getHeight() / 2 - lastVerti = n - for [yPin,pinHalfHeight] in pad_west_pin_y_vss + pad_west_pin_y_vdd : - if ( _y + halfHeight + DbU_lambda(3) >= yPin - pinHalfHeight and _y + halfHeight + DbU_lambda(3) <= yPin + pinHalfHeight ) \ - or ( _y - halfHeight - DbU_lambda(3) <= yPin + pinHalfHeight and _y - halfHeight - DbU_lambda(3) >= yPin - pinHalfHeight ): - lastVerti = n/2 + (n+1)%2 - - for i in range ( lastVerti + 1 ) : - contact_x = init_Xmin - ( decalage*2 )*i # x du contact a creer - contact_side = element.getHeight() - DbU_lambda(1.0) - - if (allowedDepth > 2) and re.search( "METAL4", element_layer_name ) : - contact = Contact.create ( vss, via3 , contact_x , _y , contact_side , contact_side ) - horizontal = Horizontal.create ( contact, old_contact , metal4 , _y , element.getHeight() ) - old_contact = contact - else : - contact_via1 = Contact.create ( vss, via1 , contact_x , _y , contact_side , contact_side ) - contact_via2 = Contact.create ( vss, via2 , contact_x , _y , contact_side , contact_side ) - horizontal = Horizontal.create ( contact_via1 , old_contact , metal1 , _y , element.getHeight() ) - old_contact = contact_via1 - - # Connection du cote de l'est - if element.getAccessDirection() == EAST : - # Parcourir tous les couronnes vss - halfHeight = element.getHeight() / 2 - lastVerti = n - for [yPin,pinHalfHeight] in pad_east_pin_y_vss + pad_east_pin_y_vdd : - if ( _y + halfHeight + DbU_lambda(3) >= yPin - pinHalfHeight and _y + halfHeight + DbU_lambda(3) <= yPin + pinHalfHeight ) \ - or ( _y - halfHeight - DbU_lambda(3) <= yPin + pinHalfHeight and _y - halfHeight - DbU_lambda(3) >= yPin - pinHalfHeight ): - lastVerti = n/2 + (n+1)%2 - - for i in range ( lastVerti + 1 ) : - contact_x = init_Xmax + ( decalage*2 )*i # x du contact a creer - contact_side = element.getHeight() - DbU_lambda(1.0) - - if (allowedDepth > 2) and re.search( "METAL4", element_layer_name ) : - contact = Contact.create ( vss, via3 , contact_x , _y , contact_side, contact_side ) - horizontal = Horizontal.create ( contact, old_contact , metal4 , _y , element.getHeight() ) - old_contact = contact - else : - contact_via1 = Contact.create ( vss, via1 , contact_x , _y , contact_side , contact_side ) - contact_via2 = Contact.create ( vss, via2 , contact_x , _y , contact_side , contact_side ) - horizontal = Horizontal.create ( contact_via1 , old_contact , metal1 , _y , element.getHeight() ) - old_contact = contact_via1 - - # Connection du cote du nord - if element.getAccessDirection() == NORTH : - # Parcourir tous les couronnes vss - halfWidth = element.getHeight() / 2 - lastVerti = n - for [xPin,pinHalfWidth] in pad_north_pin_x_vss + pad_north_pin_x_vdd : - if ( _x + halfWidth + DbU_lambda(3) >= xPin - pinHalfWidth and _x + halfWidth + DbU_lambda(3) <= xPin + pinHalfWidth ) \ - or ( _x - halfWidth - DbU_lambda(3) <= xPin + pinHalfWidth and _x - halfWidth - DbU_lambda(3) >= xPin - pinHalfWidth ): - lastVerti = n/2 + (n+1)%2 - - for i in range ( lastVerti + 1 ) : - contact_y = init_Ymax + ( decalage*2 )*i # y du contact a creer - - if re.search ( "METAL3", element_layer_name ) : - contact = Contact.create ( vss, via3, _x, contact_y, element.getHeight(), element.getHeight() ) - vertical = Vertical.create ( contact, old_contact, metal3, _x, DbU_lambda(RING_WIDTH) ) - old_contact = contact - else : - raise ErrorMessage(2,"wrong layer of pin in the west of core : %s.\n"% element_layer_name) - - # Connection du cote du sud - if element.getAccessDirection() == SOUTH : - # Parcourir tous les couronnes vss - halfWidth = element.getHeight() / 2 - lastVerti = n - for [xPin,pinHalfWidth] in pad_south_pin_x_vss + pad_south_pin_x_vdd : - if ( _x + halfWidth + DbU_lambda(3) >= xPin - pinHalfWidth and _x + halfWidth + DbU_lambda(3) <= xPin + pinHalfWidth ) \ - or ( _x - halfWidth - DbU_lambda(3) <= xPin + pinHalfWidth and _x - halfWidth - DbU_lambda(3) >= xPin - pinHalfWidth ): - lastVerti = n/2 + (n+1)%2 - - for i in range ( lastVerti+1 ) : - contact_y = init_Ymin - ( decalage*2 )*i # x du contact a creer - - if re.search ( "METAL3", element_layer_name ) : - contact = Contact.create ( vss, via3, _x, contact_y, element.getHeight(), element.getHeight() ) - vertical = Vertical.create ( contact, old_contact, metal3, _x, DbU_lambda(RING_WIDTH) ) - old_contact = contact - else : - raise ErrorMessage(2,"wrong layer of pin in the west of core : %s."%element_layer_name) - - # End of while - - ####################################################### - ### Connecter les pins de vdd aux couronnes de vdd ### - ####################################################### - core_transformation = core.getTransformation() - - # parcourir les pins de vdd - for element in mips_core.getNet("vdd").getPins(): - element_layer_name = str(element.getLayer().getName()) # string , nom du layer - # avoir x, y transforme - _x = core_transformation.getX ( element.getX(), element.getY() ) - _y = core_transformation.getY ( element.getX(), element.getY() ) - - # Creer un contact a la place du pin - if (allowedDepth > 2) and \ - re.search ( "METAL4", element_layer_name ) : old_contact = Contact.create ( vdd, metal4, _x, _y , element.getHeight(), element.getHeight() ) - elif re.search ( "METAL1", element_layer_name ) : old_contact = Contact.create ( vdd, metal1, _x, _y , element.getHeight(), element.getHeight() ) - elif re.search ( "METAL3", element_layer_name ) : old_contact = Contact.create ( vdd, metal3, _x, _y , element.getHeight(), element.getHeight() ) - else : - raise ErrorMessage(2,"wrong layer of pin in the west of core : %s."%element_layer_name) - - # Connection du cote de l'ouest - if element.getAccessDirection() == WEST : - # Parcourir tous les couronnes vdd - halfHeight = element.getHeight() / 2 - lastVerti = n - for [yPin,pinHalfHeight] in pad_west_pin_y_vss + pad_west_pin_y_vdd : - if ( _y + halfHeight + DbU_lambda(3) >= yPin - pinHalfHeight and _y + halfHeight + DbU_lambda(3) <= yPin + pinHalfHeight ) \ - or ( _y - halfHeight - DbU_lambda(3) <= yPin + pinHalfHeight and _y - halfHeight - DbU_lambda(3) >= yPin - pinHalfHeight ): - lastVerti = n/2 + (n+1)%2 - - for i in range ( lastVerti ) : - contact_x = init_Xmin - decalage - ( decalage*2 )*i # x du contact a creer - contact_side = element.getHeight() - DbU_lambda(1.0) - - if (allowedDepth > 2) and re.search( "METAL4", element_layer_name ) : - contact = Contact.create ( vdd, via3, contact_x, _y, contact_side, contact_side ) - horizontal = Horizontal.create ( contact, old_contact, metal4, _y, element.getHeight() ) - old_contact = contact - else : - contact_via1 = Contact.create ( vdd, via1, contact_x, _y, contact_side, contact_side ) - contact_via2 = Contact.create ( vdd, via2, contact_x, _y, contact_side, contact_side ) - horizontal = Horizontal.create ( contact_via1, old_contact, metal1, _y, element.getHeight() ) - old_contact = contact_via1 - - # Connection du cote de l'est - if element.getAccessDirection() == EAST : - # Parcourir tous les couronnes vdd - halfHeight = element.getHeight() / 2 - lastVerti = n - for [yPin,pinHalfHeight] in pad_east_pin_y_vss + pad_east_pin_y_vdd : - if ( _y + halfHeight + DbU_lambda(3) >= yPin - pinHalfHeight and _y + halfHeight + DbU_lambda(3) <= yPin + pinHalfHeight ) \ - or ( _y - halfHeight - DbU_lambda(3) <= yPin + pinHalfHeight and _y - halfHeight - DbU_lambda(3) >= yPin - pinHalfHeight ): - lastVerti = n/2 + (n+1)%2 - - for i in range ( lastVerti ) : - contact_x = init_Xmax + ( decalage*2 )*i + decalage # x du contact a creer - contact_side = element.getHeight() - DbU_lambda(1.0) - - if (allowedDepth > 2) and re.search( "METAL4", element_layer_name ) : - contact = Contact.create ( vdd, via3 , contact_x , _y , contact_side , contact_side ) - horizontal = Horizontal.create ( contact, old_contact , metal4 , _y , element.getHeight() ) - old_contact = contact - else : - contact_via1 = Contact.create ( vdd, via1, contact_x, _y, contact_side, contact_side ) - contact_via2 = Contact.create ( vdd, via2, contact_x, _y, contact_side, contact_side ) - horizontal = Horizontal.create ( contact_via1, old_contact, metal1, _y, element.getHeight() ) - old_contact = contact_via1 - - # Connection du cote du nord - if element.getAccessDirection() == NORTH : - # Parcourir tous les couronnes vdd - halfWidth = element.getHeight() / 2 - lastVerti = n - for [xPin,pinHalfWidth] in pad_north_pin_x_vss + pad_north_pin_x_vdd : - if ( _x + halfWidth + DbU_lambda(3) >= xPin - pinHalfWidth and _x + halfWidth + DbU_lambda(3) <= xPin + pinHalfWidth ) \ - or ( _x - halfWidth - DbU_lambda(3) <= xPin + pinHalfWidth and _x - halfWidth - DbU_lambda(3) >= xPin - pinHalfWidth ): - lastVerti = n/2 + (n+1)%2 - - for i in range ( lastVerti ) : - contact_y = init_Ymax + decalage + ( decalage*2 )*i # x du contact a creer - - if re.search ( "METAL3", element_layer_name ) : - contact = Contact.create ( vdd, via3, _x, contact_y, element.getHeight(), element.getHeight() ) - vertical = Vertical.create ( contact, old_contact, metal3, _x, DbU_lambda(RING_WIDTH) ) - old_contact = contact - else : - raise ErrorMessage(2,"wrong layer of pin in the west of core : %s."%element_layer_name) - - # Connection du cote du sud - if element.getAccessDirection() == SOUTH : - # Parcourir tous les couronnes vdd - halfWidth = element.getHeight() / 2 - lastVerti = n - for [xPin,pinHalfWidth] in pad_south_pin_x_vss + pad_south_pin_x_vdd : - if ( _x + halfWidth + DbU_lambda(3) >= xPin - pinHalfWidth and _x + halfWidth + DbU_lambda(3) <= xPin + pinHalfWidth ) \ - or ( _x - halfWidth - DbU_lambda(3) <= xPin + pinHalfWidth and _x - halfWidth - DbU_lambda(3) >= xPin - pinHalfWidth ): - lastVerti = n/2 + (n+1)%2 - - for i in range ( lastVerti ) : - contact_y = init_Ymin - decalage - ( decalage*2 )*i # x du contact a creer - - if re.search ( "METAL3", element_layer_name ) : - contact = Contact.create ( vdd, via3, _x, contact_y, element.getHeight(), element.getHeight() ) - vertical = Vertical.create ( contact, old_contact, metal3, _x, DbU_lambda(RING_WIDTH) ) - old_contact = contact - else : - raise ErrorMessage(2,"wrong layer of pin in the west of core : %s."%element_layer_name) - - # End of while - - # Attention au decalage de 1/2 de CMETAL - #LAMBDA = DbU_lambda ( 1 ) / 2 - LAMBDA = DbU_lambda ( 1 ) - - ############################################################### - # Connection entre couronnes internes et couronnes externes # - ############################################################### - for pad_inst in pad_east : - if isInternalPowerPad ( pad_inst ) or isExternalPowerPad ( pad_inst ) \ - or isInternalGroundPad ( pad_inst ) or isExternalGroundPad ( pad_inst ) : - - for element in NetExternalComponents.get ( pad_inst.getMasterCell().getNet("vssi") ): - layer = element.getLayer() - height = element.getBoundingBox().getHeight() - DbU_lambda(1.0) - - if re.search ( "METAL3", str ( layer ) ) \ - and ( ( element.getY() - ( height / 2 ) ) < pad_inst.getMasterCell().getAbutmentBox().getYMin() ) : - X = pad_inst.getTransformation().getX ( element.getX(), element.getY() ) - Y = pad_inst.getTransformation().getY ( element.getX(), element.getY() ) - - Contact.create ( vss, via2, X, Y, height, height ) - contactPad = Contact.create ( vss, via1, X, Y, height, height ) - Horizontal.create ( contactPad, vertical_east_vss[-1], metal1, Y, DbU_lambda ( RING_WIDTH ) ) - Contact.create ( vss, via1, vertical_east_vss[-1].getX(), Y, height, height ) - Contact.create ( vss, via2, vertical_east_vss[-1].getX(), Y, height, height ) - - for element in NetExternalComponents.get ( pad_inst.getMasterCell().getNet("vddi") ): - layer = element.getLayer() - height = element.getBoundingBox().getHeight() - DbU_lambda(1.0) - - if re.search ( "METAL3", str ( layer ) ) \ - and ( ( element.getY() - ( height / 2 ) ) < pad_inst.getMasterCell().getAbutmentBox().getYMin() ) : - X = pad_inst.getTransformation().getX ( element.getX(), element.getY() ) - Y = pad_inst.getTransformation().getY ( element.getX(), element.getY() ) - - #Contact ( vdd, via2, X, Y, height, height ) - contactPad = Contact.create ( vdd, via1, X, Y, height, height ) - Horizontal.create ( contactPad, vertical_east_vdd[-1], metal1, Y, DbU_lambda ( RING_WIDTH ) ) - Contact.create ( vdd, via1, vertical_east_vdd[-1].getX(), Y, height, height ) - Contact.create ( vdd, via2, vertical_east_vdd[-1].getX(), Y, height, height ) - - for pad_inst in pad_west : - if isInternalPowerPad ( pad_inst ) or isExternalPowerPad ( pad_inst ) \ - or isInternalGroundPad ( pad_inst ) or isExternalGroundPad ( pad_inst ) : - - for element in NetExternalComponents.get ( pad_inst.getMasterCell().getNet("vssi") ): - layer = element.getLayer() - height = element.getBoundingBox().getHeight() - DbU_lambda(1.0) - - if re.search ( "METAL3", str ( layer ) ) \ - and ( ( element.getY() - ( height / 2 ) ) < pad_inst.getMasterCell().getAbutmentBox().getYMin() ) : - X = pad_inst.getTransformation().getX ( element.getX(), element.getY() ) - Y = pad_inst.getTransformation().getY ( element.getX(), element.getY() ) - - #Contact ( vss, via2, X, Y, height, height ) - contactPad = Contact.create ( vss, via1, X, Y, height, height ) - Horizontal.create ( contactPad, vertical_west_vss[-1], metal1, Y, DbU_lambda ( RING_WIDTH ) ) - Contact.create ( vss, via1, vertical_west_vss[-1].getX(), Y, height, height ) - Contact.create ( vss, via2, vertical_west_vss[-1].getX(), Y, height, height ) - - for element in NetExternalComponents.get ( pad_inst.getMasterCell().getNet("vddi") ): - layer = element.getLayer() - height = element.getBoundingBox().getHeight() - DbU_lambda(1.0) - - if re.search ( "METAL3", str ( layer ) ) \ - and ( ( element.getY() - ( height / 2 ) ) < pad_inst.getMasterCell().getAbutmentBox().getYMin() ) : - X = pad_inst.getTransformation().getX ( element.getX(), element.getY() ) - Y = pad_inst.getTransformation().getY ( element.getX(), element.getY() ) - - #Contact ( vdd, via2, X, Y, height, height ) - contactPad = Contact.create ( vdd, via1, X, Y, height, height ) - Horizontal.create ( contactPad, vertical_west_vdd[-1], metal1, Y, DbU_lambda ( RING_WIDTH ) ) - Contact.create ( vdd, via1, vertical_west_vdd[-1].getX(), Y, height, height ) - Contact.create ( vdd, via2, vertical_west_vdd[-1].getX(), Y, height, height ) - - for pad_inst in pad_north : - if isInternalPowerPad ( pad_inst ) or isExternalPowerPad ( pad_inst ) \ - or isInternalGroundPad ( pad_inst ) or isExternalGroundPad ( pad_inst ) : - - for element in NetExternalComponents.get ( pad_inst.getMasterCell().getNet("vssi") ): - layer = element.getLayer() - height = element.getBoundingBox().getHeight() - DbU_lambda(1.0) - - if re.search ( "METAL3", str ( layer ) ) \ - and ( ( element.getY() - ( height / 2 ) ) < pad_inst.getMasterCell().getAbutmentBox().getYMin() ) : - X = pad_inst.getTransformation().getX ( element.getX(), element.getY() ) - Y = pad_inst.getTransformation().getY ( element.getX(), element.getY() ) - - Contact.create ( vss, via1, X, Y, height, height ) - #Contact.create ( vss, via2, X, Y, height, height ) - - contactPad = Contact.create ( vss, metal1, X, Y, height, height ) - Vertical.create ( contactPad, horizontal_north_vss[-1], metal1, X , DbU_lambda ( RING_WIDTH ) ) - Contact.create ( vss, via1, X, horizontal_north_vss[-1].getY(), height, height ) - if allowedDepth > 2: - Contact.create ( vss, via2, X, horizontal_north_vss[-1].getY(), height, height ) - Contact.create ( vss, via3, X, horizontal_north_vss[-1].getY(), height, height ) - - for element in NetExternalComponents.get ( pad_inst.getMasterCell().getNet("vddi") ): - layer = element.getLayer() - height = element.getBoundingBox().getHeight() - DbU_lambda(1.0) - - if re.search ( "METAL3", str ( layer ) ) \ - and ( ( element.getY() - ( height / 2 ) ) < pad_inst.getMasterCell().getAbutmentBox().getYMin() ) : - X = pad_inst.getTransformation().getX ( element.getX(), element.getY() ) - Y = pad_inst.getTransformation().getY ( element.getX(), element.getY() ) - - Contact.create ( vdd, via1, X, Y, height, height ) - #Contact.create ( vdd, via2, X, Y, height, height ) - - contactPad = Contact.create ( vdd, metal1, X, Y, height, height ) - Vertical.create ( contactPad, horizontal_north_vdd[-1], metal1, X, DbU_lambda ( RING_WIDTH ) ) - Contact.create ( vdd, via1, X, horizontal_north_vdd[-1].getY(), height, height ) - if allowedDepth > 2: - Contact.create ( vdd, via2, X, horizontal_north_vdd[-1].getY(), height, height ) - Contact.create ( vdd, via3, X, horizontal_north_vdd[-1].getY(), height, height ) - - for pad_inst in pad_south : - if isInternalPowerPad ( pad_inst ) or isExternalPowerPad ( pad_inst ) \ - or isInternalGroundPad ( pad_inst ) or isExternalGroundPad ( pad_inst ) : - - for element in NetExternalComponents.get ( pad_inst.getMasterCell().getNet("vssi") ): - layer = element.getLayer() - height = element.getBoundingBox().getHeight() - DbU_lambda(1.0) - - if re.search ( "METAL3", str ( layer ) ) \ - and ( ( element.getY() - ( height / 2 ) ) < pad_inst.getMasterCell().getAbutmentBox().getYMin() ) : - X = pad_inst.getTransformation().getX ( element.getX(), element.getY() ) - Y = pad_inst.getTransformation().getY ( element.getX(), element.getY() ) - - Contact.create ( vss, via1, X, Y, height, height ) - #Contact.create ( vss, via2, X, Y, height, height ) - - contactPad = Contact.create ( vss, metal1, X, Y, height, height ) - Vertical.create ( contactPad, horizontal_south_vss[-1], metal1, X , DbU_lambda ( RING_WIDTH ) ) - Contact.create ( vss, via1, X, horizontal_south_vss[-1].getY(), height, height ) - if allowedDepth > 2: - Contact.create ( vss, via2, X, horizontal_south_vss[-1].getY(), height, height ) - Contact.create ( vss, via3, X, horizontal_south_vss[-1].getY(), height, height ) - - for element in NetExternalComponents.get ( pad_inst.getMasterCell().getNet("vddi") ): - layer = element.getLayer() - height = element.getBoundingBox().getHeight() - DbU_lambda(1.0) - - if re.search ( "METAL3", str ( layer ) ) \ - and ( ( element.getY() - ( height / 2 ) ) < pad_inst.getMasterCell().getAbutmentBox().getYMin() ) : - X = pad_inst.getTransformation().getX ( element.getX(), element.getY() ) - Y = pad_inst.getTransformation().getY ( element.getX(), element.getY() ) - - Contact.create ( vdd, via1, X, Y, height, height ) - #Contact.create ( vdd, via2, X, Y, height, height ) - - contactPad = Contact.create ( vdd, metal1, X, Y, height, height ) - Vertical.create ( contactPad, horizontal_south_vdd[-1], metal1, X , DbU_lambda ( RING_WIDTH ) ) - Contact.create ( vdd, via1, X, horizontal_south_vdd[-1].getY(), height, height ) - if allowedDepth > 2: - Contact.create ( vdd, via2, X, horizontal_south_vdd[-1].getY(), height, height ) - Contact.create ( vdd, via3, X, horizontal_south_vdd[-1].getY(), height, height ) - - - ##################################### ########################### - ## PLACER LES COURONNES EXTERNES ## # 1 2 # - ##################################### # # - # # - # # - points_0 = [] # CHIP # - points_1 = [] # # - points_2 = [] # # - points_3 = [] # # - # # - # 0 3 # - ########################### - - instance = cell.getInstance ( pad_north[0].getName() ) - trans = instance.getTransformation() - - for net in instance.getMasterCell().getNets(): - if net.isSupply() or net.isClock() : - for component in NetExternalComponents.get(net): - plug = instance.getPlug ( net ) - NET = getNetFromPlug( plug ) - if ( not NET ) : raise ErrorMessage(2,"Error plug : %s must be connected" % str(plug.getName())) - - layer = getNonCLayer ( component.getLayer() ) - - # On applique la transformation au component, et on recupere les nouvelles coordonnees - Y = cell_Ymax + cell_Ymin - trans.getY ( component.getX(), component.getY() ) - - # On recupere la hauteur du component pour router sur la meme hauteur - RING_HEIGHT = component.getBoundingBox().getHeight() - - # On calcule les differents points aux angles pour chaque net - X_point = cell_Xmin + Y - Y_point = cell_Ymin + Y - contact = Contact.create ( NET, layer, X_point, Y_point, RING_HEIGHT, RING_HEIGHT ) - points_0.append ( dict ( [ ['X',X_point], ['Y',Y_point], ['N',NET], ['L',layer], ['R',RING_HEIGHT], ['C',contact] ] ) ) - - X_point = cell_Xmin + Y - Y_point = cell_Ymin + ( cell_Ymax - Y ) - contact = Contact.create ( NET, layer, X_point, Y_point, RING_HEIGHT, RING_HEIGHT ) - points_1.append ( dict ( [ ['X',X_point], ['Y',Y_point], ['N',NET], ['L',layer], ['R',RING_HEIGHT], ['C',contact] ] ) ) - - X_point = cell_Xmin + ( cell_Xmax - Y ) - Y_point = cell_Ymin + ( cell_Ymax - Y ) - contact = Contact.create ( NET, layer, X_point, Y_point, RING_HEIGHT, RING_HEIGHT ) - points_2.append ( dict ( [ ['X',X_point], ['Y',Y_point], ['N',NET], ['L',layer], ['R',RING_HEIGHT], ['C',contact] ] ) ) - - X_point = cell_Xmin + ( cell_Xmax - Y ) - Y_point = cell_Ymin + Y - contact = Contact.create ( NET, layer, X_point, Y_point, RING_HEIGHT, RING_HEIGHT ) - points_3.append ( dict ( [ ['X',X_point], ['Y',Y_point], ['N',NET], ['L',layer], ['R',RING_HEIGHT], ['C',contact] ] ) ) - # end of while - # end of while - - #print( "\n\n\n\npoints_0 : ", points_0 , "\n\npoints_1 : " ,points_1 , "\n\npoints_2 : " ,points_2 , "\n\npoints_3 : " , points_3 , "\n\n\n\n" ) - - # Placer au cote du nord - for ins_pad in pad_north : - Y_pad = DbU_lambda ( int ( DbU_getLambda ( ins_pad.getAbutmentBox().getYCenter() ) ) ) - X_pad = DbU_lambda ( int ( DbU_getLambda ( ins_pad.getAbutmentBox().getXCenter() ) ) ) - - if ins_pad == pad_north[0] : - for point in points_1 : - contact = Contact.create ( point['N'], point['L'], X_pad, point['Y'], point['R'], point['R'] ) - Horizontal.create ( point['C'], contact, point['L'], point['Y'], point['R'] ) - else : - for point in points_1 : - Horizontal.create ( point['N'], point['L'], point['Y'], point['R'], old_X_pad, X_pad ) - - if ins_pad == pad_north[-1] : - for point in points_2 : - contact = Contact.create ( point['N'], point['L'], X_pad, point['Y'], point['R'], point['R'] ) - Horizontal.create ( contact, point['C'], point['L'], point['Y'], point['R'] ) - - old_X_pad = X_pad - - # Placer au cote de l'est - for ins_pad in pad_east : - Y_pad = ins_pad.getAbutmentBox().getYCenter() - X_pad = ins_pad.getAbutmentBox().getXCenter() - - if ins_pad == pad_east[0] : - for point in points_3 : - contact = Contact.create ( point['N'], point['L'], point['X'], Y_pad, point['R'], point['R'] ) - Vertical.create ( point['C'], contact, point['L'], point['X'], point['R'] ) - else : - for point in points_3 : - Vertical.create ( point['N'], point['L'], point['X'], point['R'], old_Y_pad, Y_pad ) - - if ins_pad == pad_east[-1] : - for point in points_2 : - contact = Contact.create ( point['N'], point['L'], point['X'], Y_pad, point['R'], point['R'] ) - Vertical.create ( contact, point['C'], point['L'], point['X'], point['R'] ) - - old_Y_pad = Y_pad - - # Placer au cote du south - for ins_pad in pad_south : - Y_pad = ins_pad.getAbutmentBox().getYCenter() - X_pad = ins_pad.getAbutmentBox().getXCenter() - - if ins_pad == pad_south[0] : - for point in points_0 : - contact = Contact.create ( point['N'], point['L'], X_pad, point['Y'], point['R'], point['R'] ) - Horizontal.create ( point['C'], contact, point['L'], point['Y'], point['R'] ) - else : - for point in points_0 : - Horizontal.create ( point['N'], point['L'], point['Y'], point['R'], old_X_pad, X_pad ) - - if ins_pad == pad_south[-1] : - for point in points_3 : - contact = Contact.create ( point['N'], point['L'], X_pad, point['Y'], point['R'], point['R'] ) - Horizontal.create ( contact, point['C'], point['L'], point['Y'], point['R'] ) - - old_X_pad = X_pad - - # Placer au cote de l'ouest - for ins_pad in pad_west : - Y_pad = ins_pad.getAbutmentBox().getYCenter() - X_pad = ins_pad.getAbutmentBox().getXCenter() - - if ins_pad == pad_west[0] : - for point in points_0 : - contact = Contact.create ( point['N'], point['L'], point['X'], Y_pad, point['R'], point['R'] ) - Vertical.create ( point['C'], contact, point['L'], point['X'], point['R'] ) - else : - for point in points_0 : - Vertical.create ( point['N'], point['L'], point['X'], point['R'], old_Y_pad, Y_pad ) - - if ins_pad == pad_west[-1] : - for point in points_1 : - contact = Contact.create ( point['N'], point['L'], point['X'], Y_pad, point['R'], point['R'] ) - Vertical.create ( contact, point['C'], point['L'], point['X'], point['R'] ) - - old_Y_pad = Y_pad - - UpdateSession.close() - -####################################### -def create_inst ( model, name, cell ) : - - # Error : if the cell the instance has to be instanciated in does not exist - if not cell : - raise ErrorMessage(2,"Cannot create instance %s : the cell does not exist."%name) - - # Load model in the database - modelmastercell = CRL.AllianceFramework.get().getCell ( model, CRL.Catalog.State.Views ) - - # Error : if the model is not found in the libraries - if not modelmastercell : - raise ErrorMessage(2,"Cannot create instance %s : model %s does not exist in the database."%(name,model)) - - inst = Instance.create ( cell, name, modelmastercell ) - - # Connection - plugGround = inst.getPlug ( iter(modelmastercell.getGroundNets()).next() ) - plugGround.setNet ( iter(cell.getGroundNets()).next() ) - plugPower = inst.getPlug ( iter(modelmastercell.getPowerNets()).next() ) - plugPower.setNet ( iter(cell.getPowerNets()).next() ) - - return inst - -########################## -def place ( inst, x, y, orientation ) : - - # Error : if the hurricane instance does not exist - if not inst : - raise ErrorMessage(2,"Layout : The instance of %s has not been created."%str(inst.getName())) - - # Error : if the instance is already placed - if inst.getPlacementStatus() == Instance.PlacementStatus.FIXED : - raise ErrorMessage(2,"Placement : the instance %s is already placed."%str(inst.getName())) - - UpdateSession.open() - - ## A COMPLETER POUR FAIRE DES PLACE AVEC TOUTES LES SYMETRIES ## - if orientation == Transformation.Orientation.MY : - y += inst.getAbutmentBox().getHeight() - - inst.setTransformation ( Transformation ( x, y, orientation ) ) - inst.setPlacementStatus ( Instance.PlacementStatus.FIXED ) - - UpdateSession.close() - -######################################### -def getStandardInstancesMasque ( cell ) : - '''This function creates the mask of the standard cells''' - - global FREE, standard_instances_masque, nb_lignes, nb_colonnes, reference - - # The two dimensions of the mask - nb_lignes = cell.getAbutmentBox().getHeight() / DbU_lambda(SLICE) - nb_colonnes = cell.getAbutmentBox().getWidth() / DbU_lambda(PITCH) - - # Creation of a mask named standard_instances_masque - standard_instances_masque = [] - standard_instances_masque = [[FREE for j in range(nb_colonnes)] for i in range(nb_lignes)] - - # Cover of all the instances of this model and fill in of the mask - reference = getAllStandardInstances ( cell ) - - return reference - -###################################### -def getAllStandardInstances ( cell ) : - '''This function is used to get all the standard instances of a cell and to flatten all the standard cells''' - - global reference - - reference = [] - - for element in cell.getInstances(): - # FOR EACH PLACED or FIXED instance of the cell, we call getStandardInstances method - if element.getPlacementStatus() != Instance.PlacementStatus.UNPLACED : - reference = getStandardInstances ( cell, element, element.getTransformation(), cell.getName() ) - - return reference - -########################################################## -def getStandardInstances ( cell, inst, transformation, name_masterinst ) : - '''This function covers all the instances of the model , - it is also used to get all the transformations of the placed instances - it fills the standard_instances masque and the standard_instances_list ''' - - global POWER, OCCUPIED - global standard_instances_masque, reference - - # Si l'instance est PLACED ou FIXED - if inst.getPlacementStatus() != Instance.PlacementStatus.UNPLACED : - name = str ( inst.getMasterCell().getLibrary().getName() ) - - if inst.isLeaf() : - # new abutmentbox - newbox = transformation.getBox ( inst.getMasterCell().getAbutmentBox() ) - - Height = newbox.getHeight() - Width = newbox.getWidth() - Xmin = newbox.getXMin() - Ymin = newbox.getYMin() - - orientation = transformation.getOrientation() - - if reference == [] : reference[ 0:3 ] = [ Xmin, Ymin, orientation ] - - # on ajoute l'inst a la liste standard_instances_list - standard_instances_list.append ( ( Ymin, orientation, inst, str(name_masterinst) ) ) # add a tuple - - nb_slices = Height / DbU_lambda(SLICE) - nb_pitchs = Width / DbU_lambda(PITCH) - - # on remplit le masque - for i in range ( nb_slices ) : - for j in range ( nb_pitchs ) : - # on marque les cellules en POWER ou OCCUPIED FIXME : pourquoi ? - if re.search ( "powmid_x0", str ( inst.getMasterCell().getName() ) ) : - standard_instances_masque [ Ymin / DbU_lambda(SLICE) + i ][ Xmin / DbU_lambda(PITCH) + j ] = POWER - else : - standard_instances_masque [ Ymin / DbU_lambda(SLICE) + i ][ Xmin / DbU_lambda(PITCH) + j ] = OCCUPIED - - # Si la masterCell n'est pas terminale, on appelle la fonction recursivement sur ses instances - else : - for element in inst.getMasterCell().getInstances(): - getStandardInstances ( cell, element, transformation.getTransformation(element.getTransformation()), inst.getName() ) - - return reference - -########## -def verifyPlacement ( cell ) : - '''This function is used to check the placement of the standard cells''' - - global standard_instances_list - - # YMin of reference - YMin = standard_instances_list[0][0] - - # orientation code of reference - orientation = standard_instances_list[0][1] - - # cover all the other - for i in range ( 1, len ( standard_instances_list ) ) : - element = standard_instances_list[i] - element_YMin = element[0] - element_orientation = element[1] - - distance = element_YMin - YMin - - # Error : if the orientation is different from 0, 2, 4 ,6 - #if not element_orientation in [0,2,4,6] : - if element_orientation in [1,3,5,7] : - err = "Placement of cells : please check your file of layout with DRUC." -# err += "Error Detail :" + "\n" -# err += " instance " + str(element[2].getName()) + " of model " + str(element[2].getMasterCell().getName()) + "\n" -# err += " in cell " + str(element[2].getCell().getName()) + "\n" -# err += " incoherent with :" + "\n" -# err += " instance " + str(standard_instances_list[0][2].getName()) + "\n" -# err += " of model " + str(standard_instances_list[0][2].getMasterCell().getName()) + "\n" -# err += " in cell " + str(standard_instances_list[0][2].getCell().getName()) + "\n" -# err += " reference ymin is " + str(YMin) + " orientation " + str(orientation) + "\n" -# err += " element ymin is", element[0], "orientation", element_orientation + "\n" - raise ErrorMessage(2,err) - - if distance < 0 : distance = -distance - - nb_case = distance / DbU_lambda ( 50 ) - - # odd number - if nb_case % 2 : - if ( element_orientation - orientation ) in [4,-4] : - err = "Placement of cells : please check your file of layout with DRUC\n" -# err += "Error Detail :" + "\n" -# err += " instance " + str(element[2].getName()) + " of model " + str(element[2].getMasterCell().getName()) + "\n" -# err += " in cell " + str(element[2].getCell().getName()) + "\n" -# err += " incoherent with :" + "\n" -# err += " instance " + str(standard_instances_list[0][2].getName()) + "\n" -# err += " of model " + str(standard_instances_list[0][2].getMasterCell().getName()) + "\n" -# err += " in cell " + str(standard_instances_list[0][2].getCell().getName()) + "\n" -# err += " reference ymin is " + str(YMin) + " orientation " + orientation + "\n" -# err += " element ymin is " + element[0] + " orientation " + element_orientation + "\n" - raise ErrorMessage(2,err) - - # even number - else : - if ( element_orientation - orientation ) in [2,-2,6,-6] : - err = "Placement of cells : please check your file of layout with DRUC\n" -# err += "Error Detail :" -# err += " instance " + str(element[2].getName()) + " of model " + str(element[2].getMasterCell().getName()) + "\n" -# err += " in cell " + str(element[2].getCell().getName()) + "\n" -# err += " incoherent with :" + "\n" -# err += " instance " + str(standard_instances_list[0][2].getName()) + "\n" -# err += " of model " + str(standard_instances_list[0][2].getMasterCell().getName()) + "\n" -# err += " in cell " + str(standard_instances_list[0][2].getCell().getName()) + "\n" -# err += " reference ymin is " + str(YMin) + " orientation " + orientation + "\n" -# err += " element ymin is " + element[0] + " orientation " + element_orientation + "\n" - raise ErrorMessage(2,err) - -################################### -def temporarySave ( cell = None ) : - - UpdateSession.open() - - framework = CRL.AllianceFramework.get() - - if cell == None : - for cell in framework.getLibrary(0).getCells(): - if str ( cell.getName() ) != "__Scratch__" : - framework.saveCell ( cell, CRL.Catalog.State.Physical ) - else : - framework.saveCell ( cell, CRL.Catalog.State.Physical ) - - UpdateSession.close() - -########################### -def getVddVss ( cell, y ) : - '''This function returns a string 'vdd' or 'vss' according to the variance between y and the reference cell. y is in slices''' - - global reference - - if reference == [] : raise ErrorMessage(2,"getVddVss : Reference is not token.") - - # in order to know if it is vdd or vss - distance = y - int ( DbU_getLambda ( reference[1] ) ) / 50 - - if distance < 0 : distance = -distance - - orientation = reference[2] - - if orientation in [0,4] : - if distance % 2 : return "vdd" - else : return "vss" - elif orientation in [2,6] : - if distance % 2 : return "vss" - else : return "vdd" - else : - raise ErrorMessage(2,"get_vdd_vss : Illegal orientation of reference %s.\n"%orientation) - -########################### -def getPadHeight ( cell ) : - '''This function returns the pad height if there is at least one pad''' - - padFound = 0 - - for instance in cell.getInstances(): - if isPad ( instance ): - pad_height = instance.getMasterCell().getAbutmentBox().getHeight() - padFound = 1 - break - - if padFound : return pad_height - else : raise ErrorMessage(2,"getPadHeight : No pad found.") - -################### -def isPad ( ins ) : - '''This function returns 1 if the instance is a pad''' - - if re.search ( "p.*_px", str ( ins.getMasterCell().getName() ) ) \ - or re.search ( "p.*_sp", str ( ins.getMasterCell().getName() ) ): - return True - else: - return False - -################################ -def isInternalPowerPad ( ins ) : - '''This function returns 1 if pad is an internal power pad''' - if re.search ( "pvddi", str ( ins.getMasterCell().getName() ) ) : - return 1 - else: - return 0 - -################################ -def isExternalPowerPad ( ins ) : - '''This function returns 1 if pad is an external power pad''' - if re.search ( "pvdde", str ( ins.getMasterCell().getName() ) ) : - return 1 - else: - return 0 - -################################# -def isInternalGroundPad ( ins ) : - '''This function returns 1 if pad is an internal ground pad''' - if re.search ( "pvssi", str ( ins.getMasterCell().getName() ) ) : - return 1 - else: - return 0 - -################################# -def isExternalGroundPad ( ins ) : - '''This function returns 1 if pad is an external ground pad''' - if re.search ( "pvsse", str ( ins.getMasterCell().getName() ) ) : - return 1 - else: - return 0 - -################################ -def isInternalClockPad ( ins ) : - '''This function returns 1 if pad is an internal clock pad''' - if re.search ( "pvssick_", str ( ins.getMasterCell().getName() ) ) \ - or re.search ( "pvddick_", str ( ins.getMasterCell().getName() ) ) : - return 1 - else: - return 0 - -################################ -def isExternalClockPad ( ins ) : - '''This function returns 1 if pad is an external clock pad''' - if re.search ( "pvsseck_", str ( ins.getMasterCell().getName() ) ) \ - or re.search ( "pvddeck_", str ( ins.getMasterCell().getName() ) ) : - return 1 - else: - return 0 - -######################### -def affichePad ( cell ) : - global pad_north, pad_south, pad_east, pad_west - - print( "Pads in the north are :" ) - for pad in pad_north : print cell.getInstance ( pad.getName() ).getMasterCell().getName() - - print( "Pads in the south are :" ) - for pad in pad_south : print cell.getInstance ( pad.getName() ).getMasterCell().getName() - - print( "Pads in the east are :" ) - for pad in pad_east : print cell.getInstance ( pad.getName() ).getMasterCell().getName() - - print( "Pads in the west are :" ) - for pad in pad_west : print cell.getInstance ( pad.getName() ).getMasterCell().getName() - -############ -def searchVddVss ( cell, *args ) : - '''This function searches plots providing vdd and vss, and returns four lists''' - - global pad_north, pad_south, pad_east, pad_west - - # MACRO pour les directions d'access des pins - UNDEFINED = 0 - NORTH = 1 - SOUTH = 2 - EAST = 3 - WEST = 4 - - pad_list = [pad_east, pad_west, pad_north, pad_south] - - for i in range ( len ( args ) ) : - - for ins in pad_list[i] : - model = ins.getMasterCell() - transformation = ins.getTransformation() - - if isInternalPowerPad ( ins ) or isExternalPowerPad ( ins ) \ - or isInternalGroundPad ( ins ) or isExternalGroundPad ( ins ) : - # on connecte les pins vddi - for element in model.getNet("vddi").getPins(): - layer = element.getLayer() - - X = transformation.getX ( element.getX(), element.getY() ) - Y = transformation.getY ( element.getX(), element.getY() ) - - args[i].append ( dict ( [['N', "vdd"], ['L',layer], ['X',X], ['Y',Y], ['C',0]] ) ) - - # on connecte les pins vssi - for element in model.getNet("vssi").getPins(): - layer = element.getLayer() - - X = transformation.getX ( element.getX(), element.getY() ) - Y = transformation.getY ( element.getX(), element.getY() ) - - args[i].append ( dict ( [['N', "vss"], ['L',layer], ['X',X], ['Y', Y],['C',0]] ) ) - -######################## -def createGrid ( my_tuple ) : - - global ck_contact_list - global _Xmin, _Ymin, _Xmax, _Ymax - - net, cell = my_tuple - - def FindNearestPosition ( pos, poslist ) : - bestDistance = pos - poslist[0] - bestPos = poslist[0] - - for x in poslist[1:] : - distance = pos - x - if distance <= 0 : - distance *= -1 - if bestDistance > distance : return x - else : - if bestDistance > distance : - bestPos = x - bestDistance = pos - bestPos - return bestPos - - def CreateZ ( contact1, contact2 ) : - centerX = (contact1.getX() + contact2.getX() ) / 2 - centerX = centerX - (centerX % DbU_lambda(5)) - zContact1 = Contact.create ( net, via5, centerX, contact1.getY(), DbU_lambda(11), DbU_lambda(11) ) - zContact2 = Contact.create ( net, via5, centerX, contact2.getY(), DbU_lambda(11), DbU_lambda(11) ) - - Horizontal.create ( contact1, zContact1, metal6, contact1.getY(), DbU_lambda(12) ) - Vertical.create ( zContact1, zContact2, metal5, zContact1.getX(), DbU_lambda(12) ) - Horizontal.create ( zContact2, contact2, metal6, zContact2.getY(), DbU_lambda(12) ) - - def CreateN ( contact1, contact2 ) : - centerY = ( contact1.getY() + contact2.getY() ) / 2 - centerY = centerY - ( centerY % DbU_lambda(5) ) - nContact1 = Contact.create ( net, via5, contact1.getX(), centerY, DbU_lambda(11), DbU_lambda(11) ) - nContact2 = Contact.create ( net, via5, contact2.getX(), centerY, DbU_lambda(11), DbU_lambda(11) ) - - Vertical.create ( contact1, nContact1, metal5, contact1.getX(), DbU_lambda(12) ) - Horizontal.create ( nContact1, nContact2, metal6, nContact1.getY(), DbU_lambda(12) ) - Vertical.create ( nContact2, contact2, metal5, nContact2.getX(), DbU_lambda(12) ) - - def FindPositionForContact ( position, contactlist1, contactlist2 ) : - def PositionIsInTargetRange ( position, target ) : - return position >= ( target - DbU_lambda(10) ) and position <= ( target + DbU_lambda(10) ) - - if contactlist1 == [] and contactlist2 == [] : return position - - if contactlist1 != [] and contactlist2 != [] : - nearest1 = FindNearestPosition ( position, contactlist1 ) - nearest2 = FindNearestPosition ( position, contactlist2 ) - - if ( not PositionIsInTargetRange(position, nearest1) ) and ( not PositionIsInTargetRange(position, nearest2) ) : return position - - if PositionIsInTargetRange ( position, nearest1 ) : - if nearest2 > nearest1 : return position + DbU_lambda(12) - else : return position - DbU_lambda(12) - - if PositionIsInTargetRange ( position, nearest2 ) : - if nearest1 > nearest2 : return position + DbU_lambda(12) - else : return position - DbU_lambda(12) - - if contactlist1 != [] : contactlist = contactlist1 - else : contactlist = contactlist2 - - nearest = FindNearestPosition ( position, contactlist ) - - if PositionIsInTargetRange ( position, nearest ) : - if position > nearest : return position + DbU_lambda(12) - else : return position - DbU_lambda(12) - else : - return position - - #_Xmin = None - #_Ymin = None - #_Xmax = None - #_Ymax = None - coreBox = cell.getInstance('core').getAbutmentBox() - #print coreBox - _Xmin = coreBox.getXMin() - _Ymin = coreBox.getYMin() - _Xmax = coreBox.getXMax() - _Ymax = coreBox.getYMax() - ck_contact_list = [] - - getNetInstances ( cell, net, Transformation ( 0, 0, Transformation.Orientation.ID ) ) - - db = DataBase.getDB() - via1 = db.getTechnology().getLayer ( "VIA12" ) - via2 = db.getTechnology().getLayer ( "VIA23" ) - via3 = db.getTechnology().getLayer ( "VIA34" ) - via4 = db.getTechnology().getLayer ( "VIA45" ) - via5 = db.getTechnology().getLayer ( "VIA56" ) - metal5 = db.getTechnology().getLayer ( "METAL5" ) - metal6 = db.getTechnology().getLayer ( "METAL6" ) - - gridBoundingBox = Box() - - for contact in ck_contact_list : gridBoundingBox.merge ( contact[0], contact[1] ) - - #the Bounding Box is inflated in function of the VIA_5 rule - gridBoundingBox.inflate ( DbU_lambda(15) ) - - #Create the Bounding Box grid - NEContact = Contact.create ( net, via5, gridBoundingBox.getXMin(), gridBoundingBox.getYMax() , DbU_lambda(11), DbU_lambda(11) ) - NWContact = Contact.create ( net, via5, gridBoundingBox.getXMax(), gridBoundingBox.getYMax() , DbU_lambda(11), DbU_lambda(11) ) - SEContact = Contact.create ( net, via5, gridBoundingBox.getXMin(), gridBoundingBox.getYMin() , DbU_lambda(11), DbU_lambda(11) ) - SWContact = Contact.create ( net, via5, gridBoundingBox.getXMax(), gridBoundingBox.getYMin() , DbU_lambda(11), DbU_lambda(11) ) - northSegment = Segment ( NEContact, NWContact, metal6, DbU_lambda(12) ) - southSegment = Segment ( SEContact, SWContact, metal6, DbU_lambda(12) ) - eastSegment = Segment ( NEContact, SEContact, metal5, DbU_lambda(12) ) - westSegment = Segment ( NWContact, SWContact, metal5, DbU_lambda(12) ) - - northContacts = [] - southContacts = [] - eastContacts = [] - westContacts = [] - - #connect the pins to the grid - plugList = [] - #Fill a list with the plugs ... we are going to modify the underlying collection ;) - for plug in net.getPlugs(): - plugList.append ( plug ) - - for plug in plugList: - instance = plug.getInstance() - if isPad ( instance ) : - # Connect this plug to the grid ... - masterNet = plug.getMasterNet() - transformation = instance.getTransformation() - - for comp in NetExternalComponents.get(masterNet): - x = transformation.getX ( comp.getX(), comp.getY() ) - y = transformation.getY ( comp.getX(), comp.getY() ) - #layer = element.getLayer () - #if re.search ( "METAL2", str ( layer ) ) \ - # and ( ( element.getY() - element.getHalfHeight() ) < pad_inst.getMasterCell().getAbutmentBox().getYMin() ) : - - if x >= gridBoundingBox.getXMin() and x <= gridBoundingBox.getXMax() : - layer = metal5 - if y < gridBoundingBox.getYMin() : - if x == gridBoundingBox.getXMin() : - gridContact = NWContact - elif x == gridBoundingBox.getXMax() : - gridContact = NEContact - else : - gridContact = Contact.create(southSegment, via5, x, 0, DbU_lambda(11), DbU_lambda(11)) - southContacts.append(x) - - elif y > gridBoundingBox.getYMax() : - if x == gridBoundingBox.getXMin() : - gridContact = SWContact - elif x == gridBoundingBox.getXMax() : - gridBoundingBox = SEContact - else : - gridContact = Contact.create(northSegment, via5, x, 0, DbU_lambda(11), DbU_lambda(11)) - northContacts.append(x) - else : - raise ErrorMessage(2,"RouteCK : bad pad placement.") - - elif y >= gridBoundingBox.getYMin() and y <= gridBoundingBox.getYMax() : - layer = metal6 - if x < gridBoundingBox.getXMin() : - if y == gridBoundingBox.getYMin() : - gridContact = SWContact - elif y == gridBoundingBox.getYMax() : - gridContact = NWContact - else : - gridContact = Contact.create(eastSegment, via5, 0, y, DbU_lambda(11), DbU_lambda(11)) - eastContacts.append(y) - elif x > gridBoundingBox.getXMax() : - if y == gridBoundingBox.getYMin() : - gridContact = SEContact - elif y == gridBoundingBox.getYMax() : - gridContact = SWContact - else : - gridContact = Contact.create(westSegment, via5, 0, y, DbU_lambda(11), DbU_lambda(11)) - westContacts.append(y) - else : - raise ErrorMessage(2,"RouteCK : bad pad placement.") - - else : - message = [ "pyRouteCk: The pads <%s> must be in direct regard of the clock grid" % str(instance.getName()) - , "Clock grid is %s" % str(gridBoundingBox) - ] - raise ErrorMessage(2,message) - - compContact = Contact.create ( net, via5, x, y, DbU_lambda(11), DbU_lambda(11) ) - - Segment ( compContact, gridContact, layer , DbU_lambda(12) ) - - break # just one component ... - - - # create the internal grid 200x200 - nbVTracks = gridBoundingBox.getWidth() / DbU_lambda(200) - widthVTracks = gridBoundingBox.getWidth() / nbVTracks - nbHTracks = gridBoundingBox.getHeight() / DbU_lambda(200) - heightHTracks = gridBoundingBox.getHeight() / nbHTracks - via12Side = DbU.fromLambda(1.0) - via23Side = DbU.fromLambda(1.0) - via34Side = DbU.fromLambda(1.0) - via45Side = DbU.fromLambda(1.0) - via56Side = DbU.fromLambda(1.0) - - xList = [] - yList = [] - for i in range ( 1, nbVTracks ) : - x = gridBoundingBox.getXMin() + i * widthVTracks - x = x - (x % DbU_lambda(5)) - x = FindPositionForContact(x, northContacts, southContacts) - - contact1 = Contact.create ( southSegment, via5, x, 0, DbU_lambda(11), DbU_lambda(11)) - contact2 = Contact.create ( northSegment, via5, x, 0, DbU_lambda(11), DbU_lambda(11)) - - Segment ( contact1, contact2, metal5, DbU_lambda(12) ) - - xList.append ( x ) - - for i in range ( 1, nbHTracks ) : - y = gridBoundingBox.getYMin() + i * heightHTracks - y = y - ( y % DbU_lambda(5) ) - y = FindPositionForContact ( y, eastContacts, westContacts ) - - contact1 = Contact.create ( westSegment, via5, 0, y, DbU_lambda(11), DbU_lambda(11) ) - contact2 = Contact.create ( eastSegment, via5, 0, y, DbU_lambda(11), DbU_lambda(11) ) - - horizontal = Segment ( contact1, contact2, metal6, DbU_lambda(12) ) - - yList.append ( y ) - - for x in xList : Contact.create ( horizontal, via5, x, 0, DbU_lambda(11), DbU_lambda(11) ) - - # Connection to the grid - # Cette liste contient les contacts qui sont deja crees - ck_contact_list_created = [] - - # Now connect all the internal contacts to the grid - for contact in ck_contact_list : - xContact = contact[0] - yContact = contact[1] - plugContact = Contact.create ( net, via1 , xContact, yContact, via12Side, via12Side ) - #find the closest x,y on grid - xList.insert ( 0, gridBoundingBox.getXMin() ) - yList.insert ( 0, gridBoundingBox.getYMin() ) - xList.append ( gridBoundingBox.getXMax() ) - yList.append ( gridBoundingBox.getYMax() ) - - xTarget = FindNearestPosition ( xContact, xList ) - yTarget = FindNearestPosition ( yContact, yList ) - - xDistance = abs ( xTarget - xContact ) - yDistance = abs ( yTarget - yContact ) - - Contact.create(net, via2, xContact, yContact, via23Side, via23Side ) - Contact.create(net, via3, xContact, yContact, via34Side, via34Side ) - Contact.create(net, via4, xContact, yContact, via45Side, via45Side ) - - if xDistance != 0 or yDistance != 0 : - if ( xDistance <= yDistance + DbU_lambda(10) ): # test pour faire un horizontal - if xDistance != 0 : - if abs(xDistance) <= DbU_lambda(3) : - gridContact = Contact.create ( net, metal5, xTarget, yContact, via56Side, via56Side ) - layer = metal5 - else : - Contact.create ( net, via5, xContact, yContact, via56Side, via56Side ) - gridContact = Contact.create ( net, via5, xTarget, yContact, via56Side, via56Side ) - layer = metal6 - Horizontal.create( gridContact, plugContact, layer, gridContact.getY(), DbU_lambda(2) ) - else : - gridContact = Contact.create ( net, via5, xTarget, yContact, via56Side, via56Side ) - else: - if yDistance != 0 : - if abs(yDistance) <= DbU_lambda(3) : - layer = metal6 - gridContact = Contact.create ( net, metal6, xContact, yTarget, via56Side, via56Side ) - Contact.create ( net, via5, xContact, yContact, via56Side, via56Side ) - else : - gridContact = Contact.create ( net, via5, xContact, yTarget, via56Side, via56Side ) - layer = metal5 - Vertical.create ( gridContact, plugContact, layer, gridContact.getX(), DbU_lambda(2) ) - else : - gridContact = Contact.create ( net, via5, xContact, yTarget, via56Side, via56Side ) - - del _Xmin - del _Ymin - del _Xmax - del _Ymax - del ck_contact_list - -############################################ -def getNetInstances ( cell, net, transformation) : - '''This function is used to cover instances with standard model, which are connected to "net" - transformation is the transformation of the instance which model contains this net''' - - global ck_contact_list_to_create, ck_contact_list - global _Xmin, _Ymin, _Xmax, _Ymax - - for plug in net.getPlugs(): # parcourir les plugs de ce net - ins = plug.getInstance() - - # Si c est une instance de type leaf - if ins.isLeaf() : - if ins.getPlacementStatus() == Instance.PlacementStatus.UNPLACED : - raise ErrorMessage(2,"getNetInstances : instance %s is unplaced" % str(ins.getName())) - else : - if not isPad ( ins ) : - # get transformation final de cette instance - ins_transformation = transformation.getTransformation ( ins.getTransformation() ) - - nbSeg = 0 - for segment in plug.getMasterNet().getSegments(): - layer = segment.getLayer() - if NetExternalComponents.isExternal(segment) \ - and ( re.search ( "METAL1", layer.getName() ) \ - or re.search ( "METAL2", layer.getName() ) ): - # avoir x ,y de contact a placer - _x = ins_transformation.getX ( segment.getSourceX(), segment.getSourceY() ) - _y = ins_transformation.getY ( segment.getSourceX(), segment.getSourceY() ) - - #print ins, ":", segment, ",", nbSeg, ",", _x, ",", _y - nbSeg += 1 - ck_contact_list_to_create.append ( (_x, _y) ) - - ck_contact_list.append ( (_x, _y) ) - - newbox = ins_transformation.getBox ( ins.getMasterCell().getAbutmentBox() ) # get new box - Height = newbox.getHeight() - Width = newbox.getWidth() - Xmin = newbox.getXMin() - Ymin = newbox.getYMin() - Xmax = newbox.getXMax() - Ymax = newbox.getYMax() - #print " placer contact in ", _x, " ", _y , " in the net ", plug.getMasterNet().getName() , - #print " of instance ", plug.getInstance().getName() , " in ", Xmin , " ", Ymin , - #print " of model ", plug.getInstance().getMasterCell().getName(), "\n" - - # Positionner la grille - if ( Xmin < _Xmin ) or ( _Xmin == None ) : _Xmin = Xmin - if ( Ymin < _Ymin ) or ( _Ymin == None ) : _Ymin = Ymin - if ( Xmax > _Xmax ) or ( _Xmax == None ) : _Xmax = Xmax - if ( Ymax > _Ymax ) or ( _Ymax == None ) : _Ymax = Ymax - break - - if not nbSeg : - raise ErrorMessage(2,"getNetInstances : net %s in model %s does not have a segment\n" % ( str ( plug.getMasterNet().getName()), str(ins.getMasterCell().getName()) ) ) - - if ( not ck_contact_list ) : print "Error in function getNetInstances : no segment found" - - else : - if ins.getPlacementStatus() == Instance.PlacementStatus.UNPLACED : - raise ErrorMessage(2,"getNetInstances : instance %s is unplaced" % str(ins.getName())) - else : - getNetInstances ( cell, plug.getMasterNet(), transformation.getTransformation ( ins.getTransformation () )) - -############################ -def getNonCLayer ( layer ) : - '''This function returns the nonC layer corresponding to the one given as argument''' - - metal1 = DataBase.getDB ().getTechnology ().getLayer ( "METAL1" ) - metal2 = DataBase.getDB ().getTechnology ().getLayer ( "METAL2" ) - metal3 = DataBase.getDB ().getTechnology ().getLayer ( "METAL3" ) - metal4 = DataBase.getDB ().getTechnology ().getLayer ( "METAL4" ) - metal5 = DataBase.getDB ().getTechnology ().getLayer ( "METAL5" ) - metal6 = DataBase.getDB ().getTechnology ().getLayer ( "METAL6" ) - - if re.search ( "CMETAL1", str ( layer.getName() ) ) : return metal1 - if re.search ( "CMETAL2", str ( layer.getName() ) ) : return metal2 - if re.search ( "CMETAL3", str ( layer.getName() ) ) : return metal3 - if re.search ( "CMETAL4", str ( layer.getName() ) ) : return metal4 - if re.search ( "CMETAL5", str ( layer.getName() ) ) : return metal5 - if re.search ( "CMETAL6", str ( layer.getName() ) ) : return metal6 - - return layer - -###################################################### -def Segment ( component1, component2, layer, width ) : - '''This function creates a segment linking component1 and component2''' - - if component1.getX() == component2.getX() : return Vertical.create ( component1, component2, layer, component1.getX(), width ) - elif component1.getY() == component2.getY() : return Horizontal.create ( component1, component2, layer, component1.getY(), width ) - else: - raise ErrorMessage(2,"Segment : the components must be horizontaly or verticaly aligned.") diff --git a/deprecated/cumulus/src/plugins/block.py b/deprecated/cumulus/src/plugins/block.py deleted file mode 100644 index 8e04ba1a..00000000 --- a/deprecated/cumulus/src/plugins/block.py +++ /dev/null @@ -1,65 +0,0 @@ - -# This file is part of the Coriolis Software. -# Copyright (c) Sorbonne Université 2020-2021, All Rights Reserved -# -# +-----------------------------------------------------------------+ -# | C O R I O L I S | -# | C u m u l u s - P y t h o n T o o l s | -# | | -# | Author : Jean-Paul CHAPUT | -# | E-mail : Jean-Paul.Chaput@lip6.fr | -# | =============================================================== | -# | Python : "./plugins/block.py" | -# +-----------------------------------------------------------------+ - -""" -This script hook the Block plugin inside GCT/Unicorn. -""" - -import sys -import traceback -import helpers -from helpers.io import ErrorMessage -from helpers.io import WarningMessage -from helpers.overlay import UpdateSession -from helpers import trace -import plugins -from Hurricane import Breakpoint -from Hurricane import DbU -from Hurricane import Box -from Hurricane import Net -from Hurricane import Cell -from Hurricane import Instance -from Hurricane import Transformation -from plugins.alpha.block.block import Block - - -# -------------------------------------------------------------------- -# Plugin hook functions, unicornHook:menus, ScritMain:call - -def unicornHook ( **kw ): - kw['beforeAction'] = 'misc.alpha' - plugins.kwUnicornHook( 'misc.alpha.block' - , 'Block P&&R' - , 'Perform block-level placement' - , sys.modules[__name__].__file__ - , **kw - ) - return - - -def scriptMain ( **kw ): - """The mandatory function that Coriolis CGT/Unicorn will look for.""" - rvalue = True - try: - helpers.setTraceLevel( 550 ) - cell, editor = plugins.kwParseMain( **kw ) - block = Block.create( cell ) - if editor: block.setEditor( editor ) - rvalue = block.build() - except Exception as e: - helpers.io.catch( e ) - rvalue = False - sys.stdout.flush() - sys.stderr.flush() - return rvalue diff --git a/deprecated/cumulus/src/plugins/block/__init__.py b/deprecated/cumulus/src/plugins/block/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/deprecated/cumulus/src/plugins/block/vchannels.py b/deprecated/cumulus/src/plugins/block/vchannels.py deleted file mode 100644 index 5ebc3394..00000000 --- a/deprecated/cumulus/src/plugins/block/vchannels.py +++ /dev/null @@ -1,130 +0,0 @@ - -# This file is part of the Coriolis Software. -# Copyright (c) Sorbonne Université 2014-2021, All Rights Reserved -# -# +-----------------------------------------------------------------+ -# | C O R I O L I S | -# | C u m u l u s - P y t h o n T o o l s | -# | | -# | Author : Jean-Paul CHAPUT | -# | E-mail : Jean-Paul.Chaput@lip6.fr | -# | =============================================================== | -# | Python : "./plugins/chip/vchannels.py" | -# +-----------------------------------------------------------------+ - - -import sys -from Hurricane import DbU -from Hurricane import Point -from Hurricane import Transformation -from Hurricane import Box -from Hurricane import Interval -from Hurricane import Path -from Hurricane import Occurrence -from Hurricane import UpdateSession -from Hurricane import Net -from Hurricane import Contact -from Hurricane import Horizontal -from Hurricane import Vertical -from Hurricane import Query -import CRL -import helpers -from helpers import trace -from helpers.io import ErrorMessage -from helpers.io import WarningMessage -from helpers.io import vprint -from helpers import l, u, n -import plugins -import chip - - -class VChannels ( object ): - - def __init__ ( self, cell ): - self.gauge = chip.Configuration.GaugeConf() - self.cell = cell - self.vchannels = [ ] - - topAb = self.cell.getAbutmentBox() - topTransf = Transformation() - for occurrence in cell.getNonTerminalNetlistInstanceOccurrences(): - transf = occurrence.getPath().getTransformation() - if transf != topTransf: - raise ErrorMessage( 1, [ 'VChannels.__init__(): Transformation of non-terminal instances must be (0,0,ID),' - , 'instead of %s.' % str(transf) - , 'on %s' % str(occurrence) ] ) - - ab = occurrence.getEntity().getMasterCell().getAbutmentBox() - if ab != topAb: - raise ErrorMessage( 1, [ 'VChannels.__init__(): Abutment box of non-terminal instances must be equal to the top level %s.' % str(topAb) - , 'on %s' % str(occurrence) ] ) - return - - - def addChannelAt ( self, x, width ): - xMin = self.cell.getAbutmentBox().getXMin() - xMax = self.cell.getAbutmentBox().getXMax() - if x < xMin or x >= xMax: - print( ErrorMessage( 1, [ 'VChannels.addChannelAt(): Attempt to add a channel outside abutment box, ignored.' - , '({} must be included in [{}..{}]'.format( DbU.getValueString(x) - , DbU.getValueString(xMin) - , DbU.getValueString(xMax) ) ] )) - return False - - for i in range(len(self.vchannels)): - if self.vchannels[i][0] == x: - print( ErrorMessage( 1, 'VChannels.addChannelAt(): Attempt to add a channel twice at position {}, ignored.' \ - .format(DbU.getValueString(x)) )) - return False - if self.vchannels[i][0] > x: - self.vchannels.insert( i, (x,width) ) - return True - - self.vchannels.append( (x,width) ) - return True - - - def getDeltaWidth ( self ): - deltaWidth = 0 - for x,w in self.vchannels: deltaWidth += w - return deltaWidth - - - def expandChannels ( self ): - UpdateSession.open() - - dw = self.getDeltaWidth() - - ab = self.cell.getAbutmentBox() - ab.inflate( 0, 0, dw, 0 ) - self.cell.setAbutmentBox( ab ) - - for occurrence in self.cell.getNonTerminalNetlistInstanceOccurrences(): - masterCell = occurrence.getEntity().getMasterCell() - ab = masterCell.getAbutmentBox() - ab.inflate( 0, 0, dw, 0 ) - masterCell.setAbutmentBox( ab ) - - for occurrence in self.cell.getTerminalNetlistInstanceOccurrences(): - instance = occurrence.getEntity() - transf = occurrence.getPath().getTransformation() - instance.getTransformation().applyOn( transf ) - xcenter = transf.getTx() + instance.getMasterCell().getAbutmentBox().getXCenter() - - xshift = 0 - for x,w in self.vchannels: - if x < xcenter: xshift += w - else: break - - if xshift: - baseTransf = instance.getTransformation() - baseTransf = Transformation( baseTransf.getTx() + xshift - , baseTransf.getTy() - , baseTransf.getOrientation() ) - instance.setTransformation( baseTransf ) - - UpdateSession.close() - - spaceMargin = (float(dw) * 100.0) / float(ab.getWidth()) - vprint( 1, ' - V-Channels space margin: {}%%.'.format(spaceMargin) ) - return diff --git a/deprecated/cumulus/src/plugins/chip/__init__.py b/deprecated/cumulus/src/plugins/chip/__init__.py deleted file mode 100644 index f94ebb8b..00000000 --- a/deprecated/cumulus/src/plugins/chip/__init__.py +++ /dev/null @@ -1,51 +0,0 @@ - -# This file is part of the Coriolis Software. -# Copyright (c) Sorbonne Université 2014-2021, All Rights Reserved -# -# +-----------------------------------------------------------------+ -# | C O R I O L I S | -# | C u m u l u s - P y t h o n T o o l s | -# | | -# | Author : Jean-Paul CHAPUT | -# | E-mail : Jean-Paul.Chaput@lip6.fr | -# | =============================================================== | -# | Python : "./plugins/chip/__init__.py" | -# +-----------------------------------------------------------------+ - - -from helpers.io import WarningMessage - - -# Common constants used through all modules. - -# For Corona's sides. -North = 0x0001 -South = 0x0002 -East = 0x0004 -West = 0x0008 - -# For Corona's corners. -SouthWest = South|West -SouthEast = South|East -NorthWest = North|West -NorthEast = North|East - -# For rounding functions. -Superior = 0x0010 -Inferior = 0x0020 -Inwards = 0x0040 -OnHorizontalPitch = 0x0080 -OnVerticalPitch = 0x0100 - - -def importConstants ( symbols ): - if not isinstance(symbols,dict): - print( WarningMessage( 'plugins.chip.__init__.importConstants(), argument is not a symbol table.' )) - return - - for symbol in globals().items(): - if isinstance(symbol[1],int): - if not symbol[0] in symbols: - symbols[ symbol[0] ] = symbol[1] - - return diff --git a/deprecated/cumulus/src/plugins/chip/blockcorona.py b/deprecated/cumulus/src/plugins/chip/blockcorona.py deleted file mode 100644 index 535b9b89..00000000 --- a/deprecated/cumulus/src/plugins/chip/blockcorona.py +++ /dev/null @@ -1,632 +0,0 @@ - -# This file is part of the Coriolis Software. -# Copyright (c) Sorbonne Université 2014-2021, All Rights Reserved -# -# +-----------------------------------------------------------------+ -# | C O R I O L I S | -# | C u m u l u s - P y t h o n T o o l s | -# | | -# | Author : Jean-Paul CHAPUT | -# | E-mail : Jean-Paul.Chaput@lip6.fr | -# | =============================================================== | -# | Python : "./plugins/chip/blockcorona.py" | -# +-----------------------------------------------------------------+ - - -import bisect -from operator import methodcaller -import Cfg -from Hurricane import DbU -from Hurricane import Point -from Hurricane import Interval -from Hurricane import Box -from Hurricane import Transformation -from Hurricane import Path -from Hurricane import Occurrence -from Hurricane import UpdateSession -from Hurricane import Net -from Hurricane import Contact -from Hurricane import Horizontal -from Hurricane import Vertical -from Hurricane import Pad -import CRL -from CRL import RoutingLayerGauge -from helpers import trace -from helpers.io import ErrorMessage -from helpers.io import WarningMessage -import plugins -from plugins import StackedVia -import plugins.chip - - -plugins.chip.importConstants( globals() ) - - -class IntervalSet ( object ): - - def __init__ ( self ): - self.chunks = [] - return - - def merge ( self, min, max ): - toMerge = Interval( min, max ) - imerge = len(self.chunks) - length = len(self.chunks) - i = 0 - - while i < length: - if imerge >= length: - if toMerge.getVMax() < self.chunks[i].getVMin(): - self.chunks.insert( i, toMerge ) - length += 1 - imerge = 0 - break - if toMerge.intersect(self.chunks[i]): - imerge = i - self.chunks[imerge].merge( toMerge ) - else: - if toMerge.getVMax() >= self.chunks[i].getVMin(): - self.chunks[imerge].merge( self.chunks[i] ) - del self.chunks[ i ] - length -= 1 - continue - else: - break - i += 1 - - if imerge >= length: - self.chunks.insert( length, toMerge ) - return - - -class Rail ( object ): - - def __init__ ( self, side, order, axis ): - self.side = side - self.order = order - self.axis = axis - self.vias = { } # Key:pos Element:[pos,railContact,blockContact] - return - - @property - def net ( self ): return self.side.getRailNet(self.order) - - -class HorizontalRail ( Rail ): - - def __init__ ( self, side, order, axis ): - Rail.__init__( self, side, order, axis ) - return - - def connect ( self, contact ): - contactBb = contact.getBoundingBox() - if contactBb.getXMin() < self.side.innerBb.getXMin() \ - or contactBb.getXMax() > self.side.innerBb.getXMax(): - raise ErrorMessage( 1, [ '%s is outside rail/corona X range,' % str(contact) - , 'power pad is likely to be to far off west or east.' - , '(core:%s)' % str(self.side.innerBb) ] ) - - #print( ' HorizontalRail.connect() net:{} contact:{}'.format(self.net.getName(),contact) ) - #if self.net != contact.getNet(): return False - if contact.getX() in self.vias: return False - - keys = list( self.vias.keys() ) - keys.sort() - insertIndex = bisect.bisect_left( keys, contact.getX() ) - - if len(keys) > 0: - if insertIndex < len(keys): - insertPosition = keys[ insertIndex ] - if contactBb.getXMax() >= self.vias[insertPosition][2].getBoundingBox().getXMin(): - #print( 'Reject contact {} intersect NEXT'.format(contact) ) - return False - if insertIndex > 0: - if self.vias[keys[insertIndex-1]][2].getBoundingBox().getXMax() >= contactBb.getXMin(): - #print( 'Reject contact {} intersect PREVIOUS'.format(contact) ) - return False - - self.vias[ contact.getX() ] = [ contact.getX() - , StackedVia( self.net - , self.side.getLayerDepth(self.side.getHLayer()) - , contact.getX() - , self.axis - , contact.getWidth() - DbU.fromLambda(1.0) - , self.side.hRailWidth - DbU.fromLambda(1.0) - ) - , contact ] - trace( 550, '\tADD "%s" contact "%s" @ [%s %s]\n' - % ( contact.getNet().getName() - , contact.getLayer().getName() - , DbU.getValueString(contact.getX()) - , DbU.getValueString(self.axis)) ) - self.vias[ contact.getX() ][1].mergeDepth( self.side.getLayerDepth(contact.getLayer()) ) - return True - - def doLayout ( self ): - #print( 'HorizontalRail[{}] @{}'.format(self.order,DbU.toLambda(self.axis)) ) - - railVias = [ self.side.corner0(self.order) - , self.side.corner1(self.order) ] - - for via in self.vias.values(): - if via[1].getNet() != via[2].getNet(): continue - - via[1].mergeDepth( self.side.getLayerDepth(self.side.getVLayer()) ) - via[1].doLayout() - #print( ' Connect:', via[2], via[1].getVia( via[2].getLayer() )) - Vertical.create( via[1].getVia( via[2].getLayer() ) - , via[2] - , via[2].getLayer() - , via[2].getX() - , via[2].getWidth() - ) - #print( via[1]._vias, '[{} {}]' % ( via[1]._bottomDepth, via[1]._topDepth )) - #print( via[1], self.side.getVLayer(), via[1].getVia( self.side.getVLayer() )) - railVias.append( via[1].getVia( self.side.getVLayer()) ) - - for i in range(1,len(railVias)): - Horizontal.create( railVias[i-1] - , railVias[i] - , self.side.getHLayer() - , self.axis - , self.side.hRailWidth - ) - return - - -class VerticalRail ( Rail ): - - def __init__ ( self, side, order, axis ): - Rail.__init__( self, side, order, axis ) - return - - def doLayout ( self ): - #print( 'VerticalRail[{}] @{}'.format(self.order,DbU.toLambda(self.axis))) - - railVias = [ self.side.corner0(self.order) - , self.side.corner1(self.order) ] - - for via in self.vias.values(): - if via[1].getNet() != via[2].getNet(): continue - - via[1].doLayout() - Horizontal.create( via[1].getVia( via[2].getLayer() ) - , via[2] - , via[2].getLayer() - , via[2].getY() - , via[2].getHeight() - ) - railVias.append( via[1].getVia(self.side.getVLayer()) ) - - railVias.sort( key=methodcaller('getY') ) - - for i in range(1,len(railVias)): - Vertical.create( railVias[i-1] - , railVias[i] - , self.side.getVLayer() - , self.axis - , self.side.vRailWidth - ) - - #routingGauge = CRL.AllianceFramework.get().getRoutingGauge() - #for depth in range(self.side.verticalDepth-2,self.vias.values()[0][1]._bottomDepth,-2): - # blockageLayer = routingGauge.getRoutingLayer(depth).getBlockageLayer() - # pitch = routingGauge.getLayerPitch(depth) - # - # for i in range(1,len(railVias)): - # Vertical.create( self.side.blockageNet - # , blockageLayer - # , self.axis - # , self.side.vRailWidth + 2*pitch - # , railVias[i-1].getBoundingBox().getYMax() + pitch - # , railVias[i ].getBoundingBox().getYMin() - pitch - # ) - - return - - def connect ( self, contact ): - contactBb = contact.getBoundingBox() - if contactBb.getYMin() < self.side.innerBb.getYMin() \ - or contactBb.getYMax() > self.side.innerBb.getYMax(): - raise ErrorMessage( 1, [ '%s is outside rail/corona Y range' % str(contact) - , 'power pad is likely to be to far off north or south.' - , '(core:%s)' % str(self.side.innerBb) ] ) - - #if self.net != contact.getNet(): return False - if contact.getY() in self.vias: return False - - trace( 550, ',+', '\tVerticalRail.connect() [%s] @%d\n' % (self.order,DbU.toLambda(self.axis)) ) - trace( 550, contact ) - - keys = list( self.vias.keys() ) - keys.sort() - insertIndex = bisect.bisect_left( keys, contact.getY() ) - trace( 550, ',+', '\tkeys:' ) - for key in keys: - trace( 550, ' %d' % DbU.toLambda(key) ) - trace( 550, '\n' ) - - if len(keys) > 0: - if insertIndex < len(keys): - insertPosition = keys[ insertIndex ] - trace( 550, '\tinsertIndex:%d' % insertIndex ) - trace( 550, '\tCheck NEXT contactBb:%s via:%s\n' \ - % ( contactBb - , self.vias[insertPosition][2].getBoundingBox()) ) - if contactBb.getYMax() >= self.vias[insertPosition][2].getBoundingBox().getYMin(): - trace( 550, ',--', '\tReject %s intersect NEXT\n' % contact ) - return False - if insertIndex > 0: - trace( 550, '\tcheck PREVIOUS contactBb:%s via:%s\n' \ - % ( contactBb - , self.vias[keys[insertIndex-1]][2].getBoundingBox()) ) - if self.vias[keys[insertIndex-1]][2].getBoundingBox().getYMax() >= contactBb.getYMin(): - trace( 550, ',--', '\tReject %s intersect PREVIOUS\n' % contact ) - return False - - self.vias[ contact.getY() ] = [ contact.getY() - , StackedVia( self.net - , self.side.getLayerDepth(self.side.getVLayer()) - , self.axis - , contact.getY() - , self.side.vRailWidth - DbU.fromLambda(1.0) - , contact.getHeight() - DbU.fromLambda(1.0) - ) - , contact ] - trace(550, ',--' '\tADD %s\n' % contact ) - self.vias[ contact.getY() ][1].mergeDepth( self.side.getLayerDepth(contact.getLayer()) ) - return True - - -class Side ( object ): - - def __init__ ( self, corona ): - self.corona = corona - return - - @property - def railsNb ( self ): return self.corona.railsNb - @property - def innerBb ( self ): return self.corona.innerBb - @property - def hRailWidth ( self ): return self.corona.hRailWidth - @property - def hRailSpace ( self ): return self.corona.hRailSpace - @property - def vRailWidth ( self ): return self.corona.vRailWidth - @property - def vRailSpace ( self ): return self.corona.vRailSpace - @property - def corners ( self ): return self.corona.corners - @property - def horizontalDepth ( self ): return self.corona.horizontalDepth - @property - def verticalDepth ( self ): return self.corona.verticalDepth - @property - def blockageNet ( self ): return self.corona.blockageNet - - def getLayerDepth ( self, metal ): return self.corona.getLayerDepth(metal) - def getRail ( self, i ): return self.rails[i] - def getRailNet ( self, i ): return self.corona.getRailNet(i) - def getHLayer ( self ): return self.corona.getHLayer() - def getVLayer ( self ): return self.corona.getVLayer() - - def getRailAxis ( self, i ): - raise ErrorMessage( 1, 'Side.getRailAxis(): Must never be called on base class.' ) - - def getInnerRail ( self, i ): - if i >= len(self.rails): - raise ErrorMessage( 1, 'Side.getInnerRail(): no rail %d (only: %d).' % (i,len(self.rails)) ) - return self.rails[i] - - def getOuterRail ( self, i ): - if i >= len(self.rails): - raise ErrorMessage( 1, 'Side.getOuterRail(): no rail %d (only: %d).' % (i,len(self.rails)) ) - return self.rails[-(i+1)] - - def connect ( self, blockSide ): - for terminal in blockSide.terminals: - for rail in self.rails: - rail.connect( terminal[1] ) - return - - def connectPads ( self, padSide ): - for contact in padSide.pins: - if not contact.getNet().isSupply() and not contact.getNet().isClock(): continue - #print( ' Connect to [-{}] @{}'.format(0, DbU.toLambda(self.getOuterRail(0).axis))) - self.getOuterRail( 0 ).connect( contact ) - - halfRails = (len(self.rails)-1)//2 - trace( 550, 'halfRails:%i' % halfRails ) - for contact in padSide.pins: - if not contact.getNet().isSupply() and not contact.getNet().isClock(): continue - trace( 550, ',+', '\tConnect pad contact %s\n' % contact ) - for i in range(halfRails): - trace( 550, '\tConnect to [-%i] @%d\n' % (i+1, DbU.toLambda(self.getOuterRail(i+1).axis)) ) - self.getOuterRail(i+1).connect( contact ) - trace( 550, '-' ) - return - - def doLayout ( self ): - for rail in self.rails: rail.doLayout() - return - - -class HorizontalSide ( Side ): - - def __init__ ( self, corona ): - Side.__init__( self, corona ) - - self.rails = [] - for i in range(self.railsNb): - self.rails.append( HorizontalRail(self,i,self.getRailAxis(i)) ) - #print( ' Rail [{}] @{}'.format(i,DbU.toLambda(self._rails[-1].axis))) - return - - -class SouthSide ( HorizontalSide ): - - def __init__ ( self, corona ): - HorizontalSide.__init__( self, corona ) - return - - def getRailAxis ( self, i ): - return self.innerBb.getYMin() - self.hRailWidth//2 - self.hRailSpace \ - - i*(self.hRailWidth + self.hRailSpace) - - def corner0 ( self, i ): return self.corners[SouthWest][i] - def corner1 ( self, i ): return self.corners[SouthEast][i] - - -class NorthSide ( HorizontalSide ): - - def __init__ ( self, corona ): - HorizontalSide.__init__( self, corona ) - return - - def getRailAxis ( self, i ): - return self.innerBb.getYMax() + self.hRailWidth//2 + self.hRailSpace \ - + i*(self.hRailWidth + self.hRailSpace) - - def corner0 ( self, i ): return self.corners[NorthWest][i] - def corner1 ( self, i ): return self.corners[NorthEast][i] - - -class VerticalSide ( Side ): - - def __init__ ( self, corona ): - Side.__init__( self, corona ) - - self.rails = [] - for i in range(self.railsNb): - self.rails.append( VerticalRail(self,i,self.getRailAxis(i)) ) - return - - def addBlockages ( self, sideXMin, sideXMax ): - spans = IntervalSet() - for rail in self.rails: - for via in rail.vias.values(): - if via[1].getNet() != via[2].getNet(): continue - - spans.merge( via[1]._y - via[1]._height//2, via[1]._y + via[1]._height//2 ) - - routingGauge = self.corona.routingGauge - if len(self.getInnerRail(0).vias): - for depth in range(next(iter(self.getInnerRail(0).vias.values()))[1].bottomDepth - ,next(iter(self.getInnerRail(0).vias.values()))[1].topDepth ): - blockageLayer = routingGauge.getRoutingLayer(depth).getBlockageLayer() - pitch = routingGauge.getLayerPitch(depth) - - for chunk in spans.chunks: - Horizontal.create( self.blockageNet - , blockageLayer - , (chunk.getVMax() + chunk.getVMin())//2 - , chunk.getVMax() - chunk.getVMin() + pitch*2 - , sideXMin - , sideXMax - ) - - depth -= 2 - if depth > 0: - blockageLayer = routingGauge.getRoutingLayer(depth).getBlockageLayer() - pitch = routingGauge.getLayerPitch(depth) - - for chunk in spans.chunks: - Horizontal.create( self.blockageNet - , blockageLayer - , (chunk.getVMax() + chunk.getVMin())//2 - , chunk.getVMax() - chunk.getVMin() + pitch*2 - , sideXMin - , sideXMax - ) - return - - -class WestSide ( VerticalSide ): - - def __init__ ( self, corona ): - VerticalSide.__init__( self, corona ) - return - - def getRailAxis ( self, i ): - return self.innerBb.getXMin() - self.vRailWidth//2 - self.vRailSpace \ - - i*(self.vRailWidth + self.vRailSpace) - - def corner0 ( self, i ): return self.corners[SouthWest][i] - def corner1 ( self, i ): return self.corners[NorthWest ][i] - - def addBlockages ( self ): - sideXMin = self.getOuterRail(0).axis - self.vRailWidth - sideXMax = self.getInnerRail(0).axis + self.vRailWidth - VerticalSide.addBlockages( self, sideXMin, sideXMax ) - return - - -class EastSide ( VerticalSide ): - - def __init__ ( self, corona ): - VerticalSide.__init__( self, corona ) - return - - def getRailAxis ( self, i ): - return self.innerBb.getXMax() + self.vRailWidth//2 + self.vRailSpace \ - + i*(self.vRailWidth + self.vRailSpace) - - def corner0 ( self, i ): return self.corners[SouthEast][i] - def corner1 ( self, i ): return self.corners[NorthEast ][i] - - def addBlockages ( self ): - sideXMin = self.getInnerRail(0).axis - self.vRailWidth - sideXMax = self.getOuterRail(0).axis + self.vRailWidth - VerticalSide.addBlockages( self, sideXMin, sideXMax ) - return - - -class Corona ( object ): - - def __init__ ( self, block ): - self.block = block - self.railsNb = Cfg.getParamInt('chip.block.rails.count' ).asInt() - self.hRailWidth = Cfg.getParamInt('chip.block.rails.hWidth' ).asInt() - self.vRailWidth = Cfg.getParamInt('chip.block.rails.vWidth' ).asInt() - self.hRailSpace = Cfg.getParamInt('chip.block.rails.hSpacing').asInt() - self.vRailSpace = Cfg.getParamInt('chip.block.rails.vSpacing').asInt() - - self.innerBb = self.block.bb - self.block.path.getTransformation().applyOn( self.innerBb ) - self.innerBb.inflate( self.hRailSpace//2, self.vRailSpace//2 ) - - if not self.conf.useClockTree: self.railsNb -= 1 - - self.southSide = SouthSide( self ) - self.northSide = NorthSide( self ) - self.westSide = WestSide ( self ) - self.eastSide = EastSide ( self ) - - return - - @property - def conf ( self ): return self.block.conf - @property - def routingGauge ( self ): return self.conf.gaugeConf.routingGauge - @property - def topLayerDepth ( self ): return self.conf.gaugeConf.topLayerDepth - @property - def horizontalDepth ( self ): return self.conf.gaugeConf.horizontalDepth - @property - def verticalDepth ( self ): return self.conf.gaugeConf.verticalDepth - @property - def blockageNet ( self ): return self.conf.blockageNet - - def getLayerDepth ( self, metal ): - return self.conf.gaugeConf.routingGauge.getLayerDepth( metal ) - - def getRailNet ( self, i ): - if self.conf.useClockTree and i == self.railsNb-1: return self.conf.coronaCk - if i % 2: return self.conf.coronaVss - return self.conf.coronaVdd - - def getHLayer ( self ): - return self.routingGauge.getLayerGauge( self.horizontalDepth ).getLayer() - - def getVLayer ( self ): - return self.routingGauge.getLayerGauge( self.verticalDepth ).getLayer() - - def connectBlock ( self ): - for plane in self.block.planes.values(): - for side in plane.sides.values(): - self.southSide.connect( side[South] ) - self.northSide.connect( side[North] ) - self.westSide .connect( side[West ] ) - self.eastSide .connect( side[East ] ) - return - - def connectPads ( self, padsCorona ): - self.southSide.connectPads( padsCorona.southSide ) - self.northSide.connectPads( padsCorona.northSide ) - self.eastSide .connectPads( padsCorona.eastSide ) - self.westSide .connectPads( padsCorona.westSide ) - return - - def doLayout ( self ): - self.corners = { SouthWest : [] - , SouthEast : [] - , NorthWest : [] - , NorthEast : [] - } - - contactDepth = self.horizontalDepth - if self.horizontalDepth > self.verticalDepth: - contactDepth = self.verticalDepth - - UpdateSession.open() - blBox = Box() - brBox = Box() - tlBox = Box() - trBox = Box() - - for i in range(self.railsNb): - xBL = self.westSide .getRail(i).axis - yBL = self.southSide.getRail(i).axis - xTR = self.eastSide .getRail(i).axis - yTR = self.northSide.getRail(i).axis - net = self.getRailNet( i ) - - blBox.merge( xBL, yBL ) - brBox.merge( xTR, yBL ) - tlBox.merge( xBL, yTR ) - trBox.merge( xTR, yTR ) - - self.routingGauge.getContactLayer(contactDepth) - self.corners[SouthWest].append( - Contact.create( net - , self.routingGauge.getContactLayer(contactDepth) - , xBL, yBL - , self.hRailWidth - , self.vRailWidth - ) ) - self.corners[NorthWest].append( - Contact.create( net - , self.routingGauge.getContactLayer(contactDepth) - , xBL, yTR - , self.hRailWidth - , self.vRailWidth - ) ) - self.corners[SouthEast].append( - Contact.create( net - , self.routingGauge.getContactLayer(contactDepth) - , xTR, yBL - , self.hRailWidth - , self.vRailWidth - ) ) - self.corners[NorthEast].append( - Contact.create( net - , self.routingGauge.getContactLayer(contactDepth) - , xTR, yTR - , self.hRailWidth - , self.vRailWidth - ) ) - - self.southSide.doLayout() - self.northSide.doLayout() - self.westSide .doLayout() - self.eastSide .doLayout() - - self.westSide.addBlockages() - self.eastSide.addBlockages() - - blBox.inflate( self.hRailWidth, self.vRailWidth ) - brBox.inflate( self.hRailWidth, self.vRailWidth ) - tlBox.inflate( self.hRailWidth, self.vRailWidth ) - trBox.inflate( self.hRailWidth, self.vRailWidth ) - - for depth in range( 1, self.conf.gaugeConf.topLayerDepth + 1 ): - blockageLayer = self.routingGauge.getRoutingLayer(depth).getBlockageLayer() - - Pad.create( self.blockageNet, blockageLayer, blBox ) - Pad.create( self.blockageNet, blockageLayer, brBox ) - Pad.create( self.blockageNet, blockageLayer, tlBox ) - Pad.create( self.blockageNet, blockageLayer, trBox ) - - UpdateSession.close() - return diff --git a/deprecated/cumulus/src/plugins/chip/blockpower.py b/deprecated/cumulus/src/plugins/chip/blockpower.py deleted file mode 100644 index 3b82e327..00000000 --- a/deprecated/cumulus/src/plugins/chip/blockpower.py +++ /dev/null @@ -1,282 +0,0 @@ - -# This file is part of the Coriolis Software. -# Copyright (c) Sorbonne Université 2014-2021, All Rights Reserved -# -# +-----------------------------------------------------------------+ -# | C O R I O L I S | -# | C u m u l u s - P y t h o n T o o l s | -# | | -# | Author : Jean-Paul CHAPUT | -# | E-mail : Jean-Paul.Chaput@lip6.fr | -# | =============================================================== | -# | Python : "./plugins/chip/blockpower.py" | -# +-----------------------------------------------------------------+ - - -import sys -from Hurricane import DbU, Point, Transformation, Box, Interval, \ - Path, Occurrence, UpdateSession, Net, \ - Contact, Horizontal, Vertical, Query -import CRL -import helpers -from helpers import trace -from helpers.io import ErrorMessage, WarningMessage -import plugins -import plugins.chip - -plugins.chip.importConstants( globals() ) - - -class Side ( object ): - - def __init__ ( self, block, side, net, metal ): - self.block = block - self.side = side - self.net = net - self.metal = metal - self.deltaWidth = metal.getExtentionWidth()*2 - self.terminals = [ ] - return - - def addTerminal ( self, position, width ): - toMerge = Interval( position-width//2, position+width//2 ) - - length = len(self.terminals) - imerge = length - ichunk = 0 - - while ichunk < length: - if imerge == length: - if toMerge.getVMax() < self.terminals[ichunk][0].getVMin(): - self.terminals.insert( ichunk, [ toMerge, None ] ) - imerge = ichunk - length += 1 - break - - if toMerge.intersect(self.terminals[ichunk][0]): - imerge = ichunk - self.terminals[ichunk][0].merge( toMerge ) - else: - if toMerge.getVMax() >= self.terminals[ichunk][0].getVMin(): - self.terminals[imerge][0].merge( self.terminals[ichunk][0] ) - del self.terminals[ichunk] - length -= 1 - continue - else: - break - ichunk += 1 - - if ichunk == length: - self.terminals.append( [ toMerge, None ] ) - - return - - def doLayout ( self ): - if self.side == West: - width = 0 - x = self.block.bb.getXMin() - elif self.side == East: - width = 0 - x = self.block.bb.getXMax() - elif self.side == South: - height = 0 - y = self.block.bb.getYMin() - elif self.side == North: - height = 0 - y = self.block.bb.getYMax() - - minWidth = DbU.fromLambda( 6.0 ) - for terminal in self.terminals: - if self.side == West or self.side == East: - center = Point( x, terminal[0].getCenter() ) - height = terminal[0].getSize() - self.deltaWidth - if height < minWidth: height = minWidth - elif self.side == North or self.side == South: - center = Point( terminal[0].getCenter(), y ) - width = terminal[0].getSize() - self.deltaWidth - if width < minWidth: width = minWidth - - self.block.path.getTransformation().applyOn( center ) - - contact = Contact.create( self.net, self.metal, center.getX(), center.getY(), width, height ) - terminal[ 1 ] = contact - return - - -class Plane ( object ): - - Horizontal = 1 - Vertical = 2 - - def __init__ ( self, block, metal ): - self.block = block - self.metal = metal - self.sides = { } - return - - def addTerminal ( self, net, direction, bb ): - if not net in self.sides: - self.sides[ net ] = { North : Side(self.block,North,net,self.metal) - , South : Side(self.block,South,net,self.metal) - , East : Side(self.block,East ,net,self.metal) - , West : Side(self.block,West ,net,self.metal) - } - sides = self.sides[ net ] - trace( 550, '\tPlane.addTerminal() net={} bb={} direction={}\n' \ - .format( net.getName(), bb, direction )) - - if direction == Plane.Horizontal: - if bb.getXMin() <= self.block.bb.getXMin(): - sides[West].addTerminal( bb.getCenter().getY(), bb.getHeight() ) - if bb.getXMax() >= self.block.bb.getXMax(): - sides[East].addTerminal( bb.getCenter().getY(), bb.getHeight() ) - - if direction == Plane.Vertical: - if bb.getYMin() <= self.block.bb.getYMin(): - sides[South].addTerminal( bb.getCenter().getX(), bb.getWidth() ) - if bb.getYMax() >= self.block.bb.getYMax(): - sides[North].addTerminal( bb.getCenter().getX(), bb.getWidth() ) - return - - def doLayout ( self ): - for sidesOfNet in self.sides.values(): - for side in sidesOfNet.values(): - side.doLayout() - return - - - -class GoCb ( object ): - - def __init__ ( self, block ): - self.block = block - return - - def __call__ ( self, query, go ): - direction = None - if isinstance(go,Horizontal): direction = Plane.Horizontal - if isinstance(go,Vertical): direction = Plane.Vertical - if not direction: return - - rootNet = None - if go.getNet().getType() == int(Net.Type.POWER): rootNet = self.block.conf.coronaVdd - if go.getNet().getType() == int(Net.Type.GROUND): rootNet = self.block.conf.coronaVss - if not rootNet: return - - if self.block.activePlane: - bb = go.getBoundingBox( self.block.activePlane.metal.getBasicLayer() ) - query.getPath().getTransformation().applyOn( bb ) - self.block.activePlane.addTerminal( rootNet, direction, bb ) - else: - print( WarningMessage( 'BlockPower.GoCb() callback called without an active plane.' )) - return - - -class Block ( object ): - - def __init__ ( self, conf ): - self.conf = conf - self.path = Path( self.conf.icore ) - self.block = self.path.getTailInstance().getMasterCell() - self.bb = self.block.getAbutmentBox() - self.planes = { } - self.activePlane = None - - for layerGauge in self.conf.gaugeConf.routingGauge.getLayerGauges(): - self.planes[ layerGauge.getLayer().getName() ] = Plane( self, layerGauge.getLayer() ) - - return - - - def connectPower ( self ): - if not self.conf.coronaVdd or not self.conf.coronaVss: - raise ErrorMessage( 1, 'Cannot build block power terminals as core vdd and/or vss are not known.' ) - return - - goCb = GoCb( self ) - query = Query() - query.setGoCallback( goCb ) - query.setCell( self.block ) - query.setArea( self.block.getAbutmentBox() ) - query.setFilter( Query.DoComponents|Query.DoTerminalCells ) - - for layerGauge in self.conf.gaugeConf.routingGauge.getLayerGauges(): - self.activePlane = self.planes[ layerGauge.getLayer().getName() ] - query.setBasicLayer( layerGauge.getLayer().getBasicLayer() ) - query.doQuery() - self.activePlane = None - return - - - def connectClock ( self ): - if not self.conf.useClockTree: - print( WarningMessage( "Clock tree generation has been disabled ('chip.clockTree':False)." )) - return - - if not self.conf.coronaCk: - raise ErrorMessage( 1, 'Cannot build clock terminal as ck is not known.' ) - return - - blockCk = None - for plug in self.path.getTailInstance().getPlugs(): - if plug.getNet() == self.conf.coronaCk: - blockCk = plug.getMasterNet() - - if not blockCk: - raise ErrorMessage( 1, 'Block "%s" has no net connected to the clock "%s".' - % (self.path.getTailInstance().getName(),self.ck.getName()) ) - return - - htPlugs = [] - ffPlugs = [] - for plug in blockCk.getPlugs(): - if plug.getInstance().getName() == 'ck_htree': - htPlugs.append( plug ) - else: - if plug.getInstance().getMasterCell().isTerminal(): - ffPlugs.append( plug ) - - if len(ffPlugs) > 0: - message = 'Clock <%s> of block <%s> is not organized as a H-Tree.' \ - % (blockCk.getName(),self.path.getTailInstance().getName()) - raise ErrorMessage( 1, message ) - return - - if len(htPlugs) > 1: - message = 'Block <%s> has not exactly one H-Tree connecteds to the clock <%s>:' \ - % (self.path.getTailInstance().getName(),blockCk.getName()) - for plug in htPlugs: - message += '\n - %s' % plug - raise ErrorMessage( 1, message ) - return - - UpdateSession.open() - bufferRp = self.conf.rpAccessByOccurrence( Occurrence(htPlugs[0], self.path), self.conf.coronaCk ) - blockAb = self.block.getAbutmentBox() - self.path.getTransformation().applyOn( blockAb ) - layerGauge = self.conf.routingGauge.getLayerGauge(self.conf.verticalDepth) - - contact = Contact.create( self.conf.coronaCk - , self.conf.routingGauge.getRoutingLayer(self.conf.verticalDepth) - , bufferRp.getX() - , blockAb.getYMax() - , layerGauge.getViaWidth() - , layerGauge.getViaWidth() - ) - segment = self.conf.createVertical( bufferRp, contact, bufferRp.getX() ) - - self.activePlane = self.planes[ layerGauge.getLayer().getName() ] - bb = segment.getBoundingBox( self.activePlane.metal.getBasicLayer() ) - self.path.getTransformation().getInvert().applyOn( bb ) - self.activePlane.addTerminal( self.conf.coronaCk, Plane.Vertical, bb ) - - UpdateSession.close() - - return - - def doLayout ( self ): - UpdateSession.open() - for plane in self.planes.values(): - plane.doLayout() - UpdateSession.close() - return diff --git a/deprecated/cumulus/src/plugins/chip/chip.py b/deprecated/cumulus/src/plugins/chip/chip.py deleted file mode 100644 index c1f68bfb..00000000 --- a/deprecated/cumulus/src/plugins/chip/chip.py +++ /dev/null @@ -1,240 +0,0 @@ - -# This file is part of the Coriolis Software. -# Copyright (c) Sorbonne Université 2014-2021, All Rights Reserved -# -# +-----------------------------------------------------------------+ -# | C O R I O L I S | -# | C u m u l u s - P y t h o n T o o l s | -# | | -# | Author : Jean-Paul CHAPUT | -# | E-mail : Jean-Paul.Chaput@lip6.fr | -# | =============================================================== | -# | Python : "./plugins/chip/chip.py" | -# +-----------------------------------------------------------------+ - - -import sys -import traceback -import os.path -import optparse -import math -import cProfile -import pstats -import Cfg -import Hurricane -from Hurricane import DataBase -from Hurricane import DbU -from Hurricane import Point -from Hurricane import Transformation -from Hurricane import Box -from Hurricane import Path -from Hurricane import Occurrence -from Hurricane import UpdateSession -from Hurricane import Breakpoint -from Hurricane import Net -from Hurricane import RoutingPad -from Hurricane import Contact -from Hurricane import Horizontal -from Hurricane import Vertical -from Hurricane import Instance -from Hurricane import HyperNet -from Hurricane import Query -import Viewer -import CRL -from CRL import RoutingLayerGauge -import helpers -from helpers.io import ErrorMessage -from helpers.io import WarningMessage -import Etesian -import Anabatic -import Katana -import Unicorn -import plugins -import plugins.cts.clocktree -import plugins.chip -import plugins.chip.padscorona -import plugins.chip.blockpower -import plugins.chip.blockcorona - - -# -------------------------------------------------------------------- -# PlaceRoute class - - -class PlaceRoute ( object ): - - def __init__ ( self, conf ): - self.conf = conf - self.validated = True - return - - - def _refresh ( self ): - if self.conf.viewer: self.conf.viewer.fit() - return - - - def validate ( self ): - self.validated = True - if len(self.conf.cores) < 1: self.validated = False - - coreAb = self.conf.core.getAbutmentBox() - if (not coreAb.isEmpty()): - if coreAb.getWidth () <= self.conf.coreSize.getWidth() \ - and coreAb.getHeight() <= self.conf.coreSize.getHeight(): - self.conf.coreSize = coreAb - else: - raise ErrorMessage( 1, [ 'Core %s already have an abutment box, bigger than the requested one:' - % self.conf.cores[0].getName() - , " Cell abutment box: %s" % str(coreAb) - , " Maximum abutment box: %s" % str(self.conf.coreSize) ] ) - self.validated = False - - return self.validated - - - def doCoronaFloorplan ( self ): - if not self.validated: - raise ErrorMessage( 1, 'chip.doCoronaFloorplan(): Chip is not valid, aborting.' ) - return - - self.railsNb = Cfg.getParamInt('chip.block.rails.count' ).asInt() - self.hRailWidth = Cfg.getParamInt('chip.block.rails.hWidth' ).asInt() - self.vRailWidth = Cfg.getParamInt('chip.block.rails.vWidth' ).asInt() - self.hRailSpace = Cfg.getParamInt('chip.block.rails.hSpacing').asInt() - self.vRailSpace = Cfg.getParamInt('chip.block.rails.vSpacing').asInt() - - if not self.conf.useClockTree: self.railsNb -= 1 - - innerBb = Box( self.conf.coreSize ) - innerBb.inflate( self.railsNb * self.vRailWidth + (self.railsNb+1) * self.vRailSpace - , self.railsNb * self.hRailWidth + (self.railsNb+1) * self.hRailSpace ) - - coronaAb = self.conf.corona.getAbutmentBox() - if innerBb.getWidth() > coronaAb.getWidth(): - raise ErrorMessage( 1, 'Core is too wide to fit into the corona, needs %s but only has %s.' - % ( DbU.getValueString(innerBb .getWidth()) - , DbU.getValueString(coronaAb.getWidth()) ) ) - - if innerBb.getHeight() > coronaAb.getHeight(): - raise ErrorMessage( 1, 'Core is too tall to fit into the corona, needs %s but only has %s.' - % ( DbU.getValueString(innerBb .getHeight()) - , DbU.getValueString(coronaAb.getHeight()) ) ) - - UpdateSession.open() - self.conf.core.setAbutmentBox( self.conf.coreSize ) - x = (coronaAb.getWidth () - self.conf.coreSize.getWidth ()) // 2 - y = (coronaAb.getHeight() - self.conf.coreSize.getHeight()) // 2 - x = x - (x % self.conf.getSliceHeight()) - y = y - (y % self.conf.getSliceHeight()) - self.conf.icore.setTransformation ( Transformation(x,y,Transformation.Orientation.ID) ) - self.conf.icore.setPlacementStatus( Instance.PlacementStatus.FIXED ) - UpdateSession.close() - return - - - def doCorePlacement ( self ): - if not self.validated: - raise ErrorMessage( 1, 'chip.doCorePlacement(): Chip is not valid, aborting.' ) - return - - coreCell = self.conf.core - - checkUnplaced = plugins.CheckUnplaced( coreCell, plugins.NoFlags ) - if not checkUnplaced.check(): return - - coreCk = None - if self.conf.coronaCk: - for plug in self.conf.coronaCk.getPlugs(): - if plug.getInstance() == self.conf.icore: - coreCk = plug.getMasterNet() - if not coreCk: - print( WarningMessage( 'Core "{}" is not connected to chip clock.'.format(self.conf.icore.getName()) )) - - if self.conf.useClockTree and coreCk: - ht = plugins.cts.clocktree.HTree.create( self.conf, coreCell, coreCk, coreCell.getAbutmentBox() ) - ht.addCloned( self.conf.cell ) - ht.addCloned( self.conf.corona ) - etesian = Etesian.EtesianEngine.create( self.conf.corona ) - etesian.setBlock( self.conf.icore ) - etesian.setViewer( self.conf.viewer ) - etesian.place() - etesian.toHurricane() - etesian.flattenPower() - etesian.destroy() - - ht.connectLeaf() - ht.route() - ht.save( self.conf.cell ) - else: - etesian = Etesian.EtesianEngine.create( self.conf.corona ) - etesian.setBlock( self.conf.icore ) - etesian.place() - etesian.toHurricane() - etesian.flattenPower() - etesian.destroy() - return - - - def doChipPlacement ( self ): - if not self.validated: - raise ErrorMessage( 1, 'chip.doChipPlacement(): Chip is not valid, aborting.' ) - return - - padsCorona = plugins.chip.padscorona.Corona( self.conf ) - self.validated = padsCorona.validate() - if not self.validated: return False - - padsCorona.doLayout() - self.validate() - self.doCoronaFloorplan() - self._refresh() - - self.doCorePlacement() - self._refresh() - - coreBlock = plugins.chip.blockpower.Block( self.conf ) - coreBlock.connectPower() - coreBlock.connectClock() - coreBlock.doLayout() - self._refresh() - - coreCorona = plugins.chip.blockcorona.Corona( coreBlock ) - coreCorona.connectPads ( padsCorona ) - coreCorona.connectBlock() - coreCorona.doLayout() - self._refresh() - - return - - - def doChipRouting ( self ): - if not self.validated: - raise ErrorMessage( 1, 'chip.doChipRouting(): Chip is not valid, aborting.' ) - return - - self.conf.corona.setName( self.conf.corona.getName()+"_r" ) - katana = Katana.KatanaEngine.create( self.conf.corona ) - #katana.printConfiguration () - katana.digitalInit () - #katana.runNegociatePreRouted() - katana.runGlobalRouter ( Katana.Flags.NoFlags ) - katana.loadGlobalRouting ( Anabatic.EngineLoadGrByNet ) - katana.layerAssign ( Anabatic.EngineNoNetLayerAssign ) - katana.runNegociate ( Katana.Flags.NoFlags ) - success = katana.getSuccessState() - katana.finalizeLayout() - katana.destroy() - - return - - - def save ( self ): - if not self.validated: - raise ErrorMessage( 1, 'chip.save(): Chip is not valid, aborting.' ) - return - - af = CRL.AllianceFramework.get() - af.saveCell( self.conf.cell , CRL.Catalog.State.Views ) - af.saveCell( self.conf.corona, CRL.Catalog.State.Views ) - return diff --git a/deprecated/cumulus/src/plugins/chip/configuration.py b/deprecated/cumulus/src/plugins/chip/configuration.py deleted file mode 100644 index 851f12a0..00000000 --- a/deprecated/cumulus/src/plugins/chip/configuration.py +++ /dev/null @@ -1,1303 +0,0 @@ - -# This file is part of the Coriolis Software. -# Copyright (c) Sorbonne Université 2014-2021, All Rights Reserved -# -# +-----------------------------------------------------------------+ -# | C O R I O L I S | -# | C u m u l u s - P y t h o n T o o l s | -# | | -# | Author : Jean-Paul CHAPUT | -# | E-mail : Jean-Paul.Chaput@lip6.fr | -# | =============================================================== | -# | Python : "./plugins/chip/configuration.py" | -# +-----------------------------------------------------------------+ - - -import sys -import os.path -import Cfg -from Hurricane import Breakpoint -from Hurricane import DbU -from Hurricane import Box -from Hurricane import Transformation -from Hurricane import Box -from Hurricane import Path -from Hurricane import Layer -from Hurricane import Occurrence -from Hurricane import Net -from Hurricane import RoutingPad -from Hurricane import Horizontal -from Hurricane import Vertical -from Hurricane import Contact -from Hurricane import Pin -from Hurricane import Plug -from Hurricane import Instance -import CRL -from CRL import RoutingLayerGauge -from helpers import trace -from helpers.io import ErrorMessage -from helpers.io import WarningMessage -from helpers.io import catch -from plugins import getParameter -import plugins.chip - - -plugins.chip.importConstants( globals() ) - - -def breakpoint ( editor, level, message ): - if editor: - editor.fit() - editor.refresh() - Breakpoint.stop( level, message ) - return - - -def getPlugByName ( instance, netName ): - masterCell = instance.getMasterCell() - masterNet = masterCell.getNet( netName ) - if masterNet: - return instance.getPlug( masterNet ) - return None - - -def getPlugByNet ( instance, net ): - for plug in net.getPlugs(): - if plug.getInstance() == instance: - return plug - return None - - -def getRpBb ( instance, netName ): - bb = Box() - for net in instance.getMasterCell().getNets(): - if net.isExternal() and net.getName() == netName: - for component in net.getExternalComponents(): - if isinstance(component,Vertical): - bb = component.getBoundingBox() - instance.getTransformation().applyOn( bb ) - return bb - - -def showNet ( cell, netName ): - net = cell.getNet(netName) - if not net: - print( ErrorMessage( 3, 'Cell {} doesn\'t have net {}'.format(cell.getName(),netName) )) - return - - print( 'Components of', netName ) - for component in net.getComponents(): - print( '| ', component, component.getBoundingBox() ) - return - - -def destroyNetComponents ( net ): - # 1. We cannot iterate over a Hurricane Collection if we are deleting - # some of it's elements at the same time (could be improved as it - # is an intrusive map. - # 2. Lazy programming: as we don't know the destruction order, some - # components can be deleted by (previous) others so we can endup - # on dangling Python proxy which send an exception that we catch. - # 3. Plugs are not destroyed (they cannot as they are part of the - # Instance). They stay connected to the net. - toDestroy = [] - for component in net.getComponents(): - if not isinstance(component,Plug): - toDestroy.append( component ) - for component in toDestroy: - try: - component.destroy() - except: - pass - return - - -# ------------------------------------------------------------------- -# Class : "IoPadConf". - -class IoPadConf ( object ): - # self._datas is a table of 6 elements, the five first coming from - # the configuration itself. Direction are taken from the core point - # of view. - # - # Meaning of the table element's: - # - # +---------+-----------------------------------------------------------+ - # | Index | Type | - # +=========+===========================================================+ - # | 0 | Pad instance name | - # +---------+-----------------------------------------------------------+ - # | 1 | Pad connected signal name. | - # | | The name of the external signal at chip level | - # +---------+-----------------------------------------------------------+ - # | 2 | The name of the signal going *from* the pad to the core. | - # | | OUT direction in the core | - # +---------+-----------------------------------------------------------+ - # | 3 | The name of the signal going *to* the pad from the core. | - # | | IN direction in core | - # +---------+-----------------------------------------------------------+ - # | 4 | The enable signal, coming from the core | - # +---------+-----------------------------------------------------------+ - # | 5 | The IoPad associated object. It is set to None initially | - # +---------+-----------------------------------------------------------+ - - def __init__ ( self, datas ): - if not isinstance(datas,list): - raise ErrorMessage( 1, [ 'IoPadConf.__init__(): The "datas" parameter is not a list.' - , str(datas) ] ) - if len(datas) < 3 and len(datas) > 5: - raise ErrorMessage( 1, [ 'IoPadConf.__init__(): The "datas" list must have between 3 to 5 elements.' - , str(datas) ] ) - - self._datas = datas - self._datas.append( None ) - return - - @property - def padInstanceName ( self ): return self._datas[0] - - @property - def padNetName ( self ): return self._datas[1] - - @property - def fromCoreNet ( self ): return self._datas[2] - - @property - def toCoreNet ( self ): return self._datas[3] - - @property - def enableNet ( self ): return self._datas[-2] - - @property - def nets ( self ): return self._datas[2:-1] - - @property - def udata ( self ): return self._datas[-1] - - @udata.setter - def udata ( self, data ): self._datas[-1] = data - - def isTristate ( self ): return len(self._datas) == 5 - def isBidir ( self ): return len(self._datas) == 6 - - def __repr__ ( self ): - s = ' self.verticalDepth: depth -= 1 - - trace( 550, '\t%s, horizontalDepth:%d, gaugeDepth:%d\n' - % (self.routingGauge,self.horizontalDepth,self.routingGauge.getDepth())) - return Contact.create( net - , self.routingGauge.getContactLayer(depth) - , x, y - , self.routingGauge.getLayerGauge(depth).getViaWidth() - , self.routingGauge.getLayerGauge(depth).getViaWidth() - ) - - def _getNearestHorizontalTrack ( self, bb, y, flags ): - if flags & GaugeConf.DeepDepth: depth = self.horizontalDeepDepth - else: depth = self.horizontalDepth - - index = self.routingGauge.getLayerGauge(depth).getTrackIndex( bb.getYMin(), bb.getYMax(), y, RoutingLayerGauge.Nearest ) - return self.routingGauge.getLayerGauge(depth).getTrackPosition( bb.getYMin(), index ) - - def _getNearestVerticalTrack ( self, bb, x, flags ): - if flags & GaugeConf.DeepDepth: depth = self.verticalDeepDepth - else: depth = self.verticalDepth - - index = self.routingGauge.getLayerGauge(depth).getTrackIndex( bb.getXMin(), bb.getXMax(), x, RoutingLayerGauge.Nearest ) - return self.routingGauge.getLayerGauge(depth).getTrackPosition( bb.getXMin(), index ) - - def _createHorizontal ( self, source, target, y, flags ): - if flags & GaugeConf.DeepDepth: depth = self.horizontalDeepDepth - else: depth = self.horizontalDepth - - layer = self.routingGauge.getRoutingLayer(depth) - - if flags & GaugeConf.UseContactWidth: width = source.getBoundingBox(layer.getBasicLayer()).getHeight() - else: width = self.routingGauge.getLayerGauge(depth).getWireWidth() - if flags & GaugeConf.ExpandWidth: width += DbU.fromLambda( 1.0 ) - - segment = Horizontal.create( source, target, layer, y, width ) - trace( 550, segment ) - return segment - - def _createVertical ( self, source, target, x, flags ): - if flags & GaugeConf.DeepDepth: depth = self.verticalDeepDepth - else: depth = self.verticalDepth - - layer = self.routingGauge.getRoutingLayer(depth) - - if flags & GaugeConf.UseContactWidth: width = source.getBoundingBox(layer.getBasicLayer()).getWidth() - else: width = self.routingGauge.getLayerGauge(depth).getWireWidth() - if flags & GaugeConf.ExpandWidth: width += DbU.fromLambda( 1.0 ) - - segment = Vertical.create( source, target, layer, x, width ) - trace( 550, segment ) - return segment - - def _rpAccess ( self, rp, flags ): - trace( 550, ',+', '\t_rpAccess() %s\n' % str(rp) ) - - if rp in self._rpToAccess: - trace( 550, '-' ) - return self._rpToAccess[rp] - - if flags & GaugeConf.DeepDepth: - hdepth = self.horizontalDeepDepth - vdepth = self.verticalDeepDepth - else: - hdepth = self.horizontalDepth - vdepth = self.verticalDepth - - hpitch = self.routingGauge.getLayerGauge(hdepth).getPitch() - hoffset = self.routingGauge.getLayerGauge(hdepth).getOffset() - contact1 = Contact.create( rp, self.routingGauge.getContactLayer(0), 0, 0 ) - midSliceY = contact1.getY() - (contact1.getY() % self.cellGauge.getSliceHeight()) \ - + self.cellGauge.getSliceHeight() // 2 - midTrackY = midSliceY - ((midSliceY - hoffset) % hpitch) - dy = midSliceY - contact1.getY() - - if flags & GaugeConf.OffsetBottom1: dy += hpitch - if flags & GaugeConf.OffsetTop1: dy -= hpitch - contact1.setDy( dy ) - - trace( 550, contact1 ) - - if flags & GaugeConf.HAccess: stopDepth = hdepth - else: stopDepth = vdepth - trace( 550, '\tstopDepth:%d\n' % stopDepth ) - - for depth in range(1,stopDepth): - xoffset = 0 - if flags & GaugeConf.OffsetRight1 and depth == 1: - xoffset = self.routingGauge.getLayerGauge(depth+1).getPitch() - contact2 = Contact.create( rp.getNet() - , self.routingGauge.getContactLayer(depth) - , contact1.getX() + xoffset - , contact1.getY() - , self.routingGauge.getLayerGauge(depth).getViaWidth() - , self.routingGauge.getLayerGauge(depth).getViaWidth() - ) - trace( 550, contact2 ) - if self.routingGauge.getLayerGauge(depth).getDirection() == RoutingLayerGauge.Horizontal: - segment = Horizontal.create( contact1 - , contact2 - , self.routingGauge.getRoutingLayer(depth) - , contact1.getY() - , self.routingGauge.getLayerGauge(depth).getWireWidth() - ) - trace( 550, segment ) - else: - segment = Vertical.create( contact1 - , contact2 - , self.routingGauge.getRoutingLayer(depth) - , contact1.getX() - , self.routingGauge.getLayerGauge(depth).getWireWidth() - ) - trace( 550, segment ) - contact1 = contact2 - - self._rpToAccess[rp] = contact1 - - trace( 550, '-' ) - return contact1 - - def _rpByOccurrence ( self, occurrence, net ): - plug = occurrence.getEntity() - if plug in self._plugToRp: - rp = self._plugToRp[plug] - else: - rp = RoutingPad.create( net, occurrence, RoutingPad.BiggestArea ) - self._plugToRp[plug] = rp - - return rp - - def _rpAccessByOccurrence ( self, occurrence, net, flags ): - plug = occurrence.getEntity() - if plug in self._plugToRp: - rp = self._plugToRp[plug] - else: - rp = RoutingPad.create( net, occurrence, RoutingPad.BiggestArea ) - self._plugToRp[plug] = rp - - return self._rpAccess( self._rpByOccurrence(occurrence,net), flags ) - - def _rpByPlug ( self, plug, net ): - if plug in self._plugToRp: - rp = self._plugToRp[plug] - else: - occurrence = Occurrence( plug, Path(net.getCell(),'') ) - rp = RoutingPad.create( net, occurrence, RoutingPad.BiggestArea ) - self._plugToRp[plug] = rp - - return rp - - def _rpByPlugName ( self, instance, plugName, net ): - return self._rpByPlug( getPlugByName(instance,plugName), net ) - - def _rpAccessByPlug ( self, plug, net, flags ): - return self._rpAccess( self._rpByPlug(plug,net), flags ) - - def _rpAccessByPlugName ( self, instance, plugName, net, flags=0 ): - return self._rpAccess( self._rpByPlugName(instance,plugName,net), flags ) - - def _setStackPosition ( self, topContact, x, y ): - topContact.setX( x ) - topContact.setY( y ) - - count = 0 - for component in topContact.getSlaveComponents(): - segment = component - count += 1 - if count > 1: - raise ErrorMessage( 1, 'GaugeConf::_setStackPosition(): There must be exactly one segment connected to %s, not %d.' % (topContact,count) ) - - if count == 1: - if isinstance(segment,Horizontal): - segment.setY( y ) - segment.getOppositeAnchor( topContact ).setY( y ) - elif isinstance(segment,Vertical): - segment.setX( x ) - segment.getOppositeAnchor( topContact ).setX( x ) - return - - -# ------------------------------------------------------------------- -# Class : "Configuration.ChipConf". - -class ChipConf ( object ): - - @staticmethod - def _toSymbolic ( u, rounding ): - oneLambda = DbU.fromLambda( 1.0 ) - remainder = u % oneLambda - if remainder: - if rounding == Superior: u = u + (oneLambda - remainder) - else: u = u - remainder - return u - - - @staticmethod - def toSymbolic ( v, rounding ): - if isinstance(v,int): return ChipConf._toSymbolic( v, rounding ) - if isinstance(v,Box): - if rounding & Inwards: - roundings = [ Superior - , Superior - , Inferior - , Inferior ] - else: - roundings = [ Inferior - , Inferior - , Superior - , Superior ] - xMin = ChipConf._toSymbolic( v.getXMin(), roundings[0] ) - yMin = ChipConf._toSymbolic( v.getYMin(), roundings[1] ) - xMax = ChipConf._toSymbolic( v.getXMax(), roundings[2] ) - yMax = ChipConf._toSymbolic( v.getYMax(), roundings[3] ) - return Box( xMin, yMin, xMax, yMax ) - return v - - - @staticmethod - def _readChipSize( chipConfigDict ): - if not 'chip.size' in chipConfigDict: return Box() - chipSize = chipConfigDict['chip.size'] - if not isinstance(chipSize,tuple): - print( ErrorMessage( 1, 'The Chip size parameter is *not* a tuple.' )) - return Box() - if len(chipSize) != 2: - print( ErrorMessage( 1, 'The Chip size parameter is *not* a tuple of exactly two items.' )) - return Box() - return Box( 0, 0, chipSize[0], chipSize[1] ) - - - @staticmethod - def _readCoreSize( chipConfigDict ): - if not 'core.size' in chipConfigDict: - print( ErrorMessage( 1, 'The Core size parameter is missing.' )) - return Box() - coreSize = chipConfigDict['core.size'] - if not isinstance(coreSize,tuple): - print( ErrorMessage( 1, 'The Core size parameter is *not* a tuple.' )) - return Box() - if len(coreSize) != 2: - print( ErrorMessage( 1, 'The Core size parameter is *not* a tuple of exactly two items.' )) - return Box() - return Box( 0, 0, coreSize[0], coreSize[1] ) - - - @staticmethod - def _readClockTree( chipConfigDict ): - useClockTree = False - if 'chip.clockTree' in chipConfigDict: - if chipConfigDict['chip.clockTree']: - useClockTree = True - return useClockTree - - - @staticmethod - def _readChipName( chipConfigDict ): - if 'chip.name' in chipConfigDict: return chipConfigDict['chip.name'] - return 'chip' - - - def _loadIoPadGauge ( self, chipConfigDict ): - if not 'pads.ioPadGauge' in chipConfigDict: - #raise ErrorMessage( 1, 'The IO pad gauge configuration parameter "pads.ioPadGauge" is missing.' ) - return - self.gaugeConf._loadIoPadGauge( chipConfigDict['pads.ioPadGauge'] ) - return - - - def _readPads ( self, chipConfigDict, keyword ): - if not keyword in chipConfigDict: return [] - padConfList = chipConfigDict[keyword] - if not isinstance(padConfList,list): - raise ErrorMessage( 1, 'The "%s" entry is not a list.' ) - return [] - - af = CRL.AllianceFramework.get() - padList = [] - for i in range(len(padConfList)): - position = None - instanceName = None - if isinstance(padConfList[i],str): - instanceName = padConfList[i] - elif isinstance(padConfList[i],list): - self.padsHavePosition = True - if isinstance(padConfList[i][0],int) and isinstance(padConfList[i][1],str): - position = padConfList[i][0] - instanceName = padConfList[i][1] - - if not instanceName: - raise ErrorMessage( 1, 'The element [%d] of list %s is neither a string nor a list "[pos,name]" (skipped).' - % (i,keyword) ) - continue - - padList.append( [ position, instanceName ] ) - - return padList - - - def _readPadInstances ( self, chipConfigDict ): - if not 'pads.instances' in chipConfigDict: return [ ] - - padInstancesConf = chipConfigDict['pads.instances'] - if not isinstance(padInstancesConf,list): - raise ErrorMessage( 1, 'The "%s" entry is not a list.' ) - return [ ] - - padInstances = [ ] - for entry in padInstancesConf: - padInstances.append( IoPadConf( entry ) ) - return padInstances - - - def __init__ ( self, chipConfigDict, cell, viewer=None ): - trace( 550, '\tONE LAMBDA = %s\n' % DbU.getValueString(DbU.fromLambda(1.0)) ) - - if not isinstance(chipConfigDict,dict): - raise ErrorMessage( 1, 'The "chip" variable is not a dictionnary.' ) - - self.validated = True - self.gaugeConf = GaugeConf() - self.cell = cell - self.viewer = viewer - # Block Corona parameters. - self.railsNb = getParameter('chip','chip.block.rails.count' ).asInt() - self.hRailWidth = getParameter('chip','chip.block.rails.hWidth' ).asInt() - self.vRailWidth = getParameter('chip','chip.block.rails.vWidth' ).asInt() - self.hRailSpace = getParameter('chip','chip.block.rails.hSpacing').asInt() - self.vRailSpace = getParameter('chip','chip.block.rails.vSpacing').asInt() - # Global Net names. - self.blockageName = "blockagenet" - # Global Nets. - self.coronaVdd = None - self.coronaVss = None - self.coronaCk = None - self.blockageNet = None - self.coronas = [] - self.cores = [] - - self._loadIoPadGauge( chipConfigDict ) - - self.padsHavePosition = False - self.padInstances = self._readPadInstances( chipConfigDict ) - self.southPads = self._readPads( chipConfigDict, 'pads.south' ) - self.northPads = self._readPads( chipConfigDict, 'pads.north' ) - self.eastPads = self._readPads( chipConfigDict, 'pads.east' ) - self.westPads = self._readPads( chipConfigDict, 'pads.west' ) - self.coreSize = ChipConf._readCoreSize ( chipConfigDict ) - self.chipSize = ChipConf._readChipSize ( chipConfigDict ) - self.useClockTree = ChipConf._readClockTree( chipConfigDict ) - self.chipName = ChipConf._readChipName ( chipConfigDict ) - - minHCorona = self.railsNb*(self.hRailWidth + self.hRailSpace) + self.hRailSpace - minVCorona = self.railsNb*(self.vRailWidth + self.vRailSpace) + self.vRailSpace - if minHCorona > minVCorona: self.minCorona = minHCorona*2 - else: self.minCorona = minVCorona*2 - - return - - - def chipValidate ( self ): - self.checkPads() - self.checkCorona() - self.computeChipSize() - #self.checkChipSize() - self.findPowerAndClockNets() - return - - - @property - def icorona ( self ): return self.coronas[0] - - @property - def corona ( self ): return self.coronas[0].getMasterCell() - - @property - def icore ( self ): return self.cores[0] - - @property - def core ( self ): return self.cores[0].getMasterCell() - - @property - def chip ( self ): return self.cell - - - def getInstanceAb ( self, instance ): - ab = instance.getMasterCell().getAbutmentBox() - instance.getTransformation().applyOn( ab ) - - if instance.getCell() == self.cell: return ab - - if instance.getCell() != self.corona: - raise ErrorMessage( 1, 'ChipConf.getInstanceAb(): Instance "%s" neither belong to chip or corona.' % instance.getName() ) - return ab - - self.icorona.getTransformation().applyOn( ab ) - return ab - - - def getCoronaNet ( self, chipNet ): - for plug in chipNet.getPlugs(): - if plug.getInstance() == self.icorona: - return plug.getMasterNet() - return None - - - def toRoutingGauge ( self, uMin, uMax, layer ): - trace( 550, ',+', '\ttoRoutingGauge() [%s %s] %s\n' \ - % (DbU.getValueString(uMin), DbU.getValueString(uMax), layer) ) - - ab = self.corona.getAbutmentBox() - lg = None - mask = layer.getMask() - for layerGauge in self.gaugeConf.routingGauge.getLayerGauges(): - if layerGauge.getLayer().getMask() == mask: - lg = layerGauge - trace( 550, '\tUsing layer gauge %s\n' % str(lg) ) - break - - if uMax < uMin: uMin, uMax = uMax, uMin - if lg: - if lg.getDirection() == RoutingLayerGauge.Horizontal: - abMin = ab.getYMin() - abMax = ab.getYMax() - else: - abMin = ab.getXMin() - abMax = ab.getXMax() - - if uMin <= abMin: - shiftRight = abMin - uMin + lg.getPitch() - uMin += shiftRight - uMax += shiftRight - if uMax >= abMax: - shiftLeft = uMax - abMax + lg.getPitch() - uMin -= shiftLeft - uMax -= shiftLeft - - iTrackMin = lg.getTrackIndex( abMin, abMax, uMin, RoutingLayerGauge.Superior ) - iTrackMax = lg.getTrackIndex( abMin, abMax, uMax, RoutingLayerGauge.Inferior ) - if iTrackMax < iTrackMin: iTrackMax = iTrackMin - - uTrackMin = lg.getTrackPosition( abMin, iTrackMin ) - uTrackMax = lg.getTrackPosition( abMin, iTrackMax ) - - axis = (uTrackMax + uTrackMin) // 2 - width = (iTrackMax - iTrackMin) * lg.getPitch() + lg.getWireWidth() - - if self.gaugeConf.routingGauge.isSymbolic(): - oneLambda = DbU.fromLambda( 1.0 ) - if axis % oneLambda: - axis -= oneLambda // 2 - width -= oneLambda - - trace( 550, '\t[%i %i]\n' % (iTrackMin, iTrackMax) ) - trace( 550, '\taxis: %sl %s\n' % (DbU.toLambda(axis ), DbU.getValueString(axis )) ) - trace( 550, '\twidth: %sl %s\n' % (DbU.toLambda(width), DbU.getValueString(width)) ) - else: - axis = (uMax + uMin) // 2 - width = (uMax - uMin) - - trace( 550, '-' ) - return axis, width - - - def toCoronaPitchInChip ( self, uCore, layer ): - trace( 550, ',+', '\tChipConf.toCoronaPitchInChip(): uCore: %sl %s\n' % (DbU.toLambda(uCore), DbU.getValueString(uCore)) ) - - coronaAb = self.getInstanceAb( self.icorona ) - lg = None - mask = layer.getMask() - for layerGauge in self.gaugeConf.routingGauge.getLayerGauges(): - if layerGauge.getLayer().getMask() == mask: - lg = layerGauge - break - - if not lg: - trace( 550, '-' ) - return 0 - - trace( 550, '\t%s\n' % str(lg) ) - if lg: - if lg.getDirection() == RoutingLayerGauge.Horizontal: - uCorona = uCore - coronaAb.getYMin() - else: - uCorona = uCore - coronaAb.getXMin() - - uCorona, width = self.toRoutingGauge( uCorona, uCorona, layer ) - - trace( 550, '\ttoCoronaPitchInChip(): uCorona: %sl %s\n' % (DbU.toLambda(uCorona), DbU.getValueString(uCorona)) ) - - if lg: - if lg.getDirection() == RoutingLayerGauge.Horizontal: - uCore = uCorona + coronaAb.getYMin() - else: - uCore = uCorona + coronaAb.getXMin() - - trace( 550, '\ttoCoronaPitchInChip(): uCorona: %sl %s\n' % (DbU.toLambda(uCorona), DbU.getValueString(uCorona)) ) - trace( 550, '\ttoCoronaPitchInChip(): uCore: %sl %s\n' % (DbU.toLambda(uCore ), DbU.getValueString(uCore )) ) - trace( 550, '-' ) - return uCore - - - - def coronaHorizontal ( self, chipNet, layer, chipY, width, chipXMin, chipXMax ): - trace( 550, ',+', '\tChipConf.coronaHorizontal\n' ) - - coronaAb = self.getInstanceAb( self.icorona ) - coronaNet = self.getCoronaNet ( chipNet ) - if not coronaNet: return None - - coronaY = chipY - coronaAb.getYMin() - dxMin = ChipConf.toSymbolic( chipXMin - coronaAb.getXMin(), Superior ) - dxMax = ChipConf.toSymbolic( chipXMax - coronaAb.getXMin(), Inferior ) - - trace( 550, '\t| chipNet: %s %s\n' % (chipNet, layer) ) - trace( 550, '\t| Real\n' ) - trace( 550, '\t| axis: %10s\n' % DbU.getValueString(coronaY) ) - trace( 550, '\t| width:%10s\n' % DbU.getValueString(width) ) - trace( 550, '\t| dxMin:%10s (%sl)\n' \ - % (DbU.getValueString(chipXMin - coronaAb.getXMin()), DbU.toLambda(chipXMin - coronaAb.getXMin()) ) ) - trace( 550, '\t| dxMax:%10s\n' % DbU.getValueString(chipXMax - coronaAb.getXMin()) ) - - coronaY, width = self.toRoutingGauge( coronaY - width//2, coronaY + width//2, layer ) - - trace( 550, '\t| On Grid\n' ) - trace( 550, '\t| axis: %10sl or %10s\n' % (DbU.toLambda(coronaY), DbU.getValueString(coronaY)) ) - trace( 550, '\t| width:%10sl or %10s\n' % (DbU.toLambda(width) , DbU.getValueString(width)) ) - trace( 550, '\t| dxMin:%10sl\n' % DbU.toLambda(dxMin) ) - trace( 550, '\t| dxMax:%10sl\n' % DbU.toLambda(dxMax) ) - - h = Horizontal.create( coronaNet, layer, coronaY, width, dxMin, dxMax ) - - trace( 550, '\t| %s\n' % str(h) ) - trace( 550, '-' ) - return h - - - def coronaVertical ( self, chipNet, layer, chipX, width, chipYMin, chipYMax ): - trace( 550, ',+', '\tChipConf.coronaVertical\n' ) - - coronaAb = self.getInstanceAb( self.icorona ) - coronaNet = self.getCoronaNet( chipNet ) - if not coronaNet: return None - - coronaX = chipX - coronaAb.getXMin() - dyMin = ChipConf.toSymbolic( chipYMin - coronaAb.getYMin(), Superior ) - dyMax = ChipConf.toSymbolic( chipYMax - coronaAb.getYMin(), Inferior ) - - trace( 550, '\t| chipNet: %s %s\n' % (chipNet, layer) ) - trace( 550, '\t| Real\n' ) - trace( 550, '\t| axis: %s\n' % DbU.getValueString(coronaX) ) - trace( 550, '\t| width:%s\n' % DbU.getValueString(width) ) - - coronaX, width = self.toRoutingGauge( coronaX - width//2, coronaX + width//2, layer ) - - trace( 550, '\t| On Grid\n' ) - trace( 550, '\t| axis: %s or %s\n' % (DbU.toLambda(coronaX), DbU.getValueString(coronaX)) ) - trace( 550, '\t| width:%s or %s\n' % (DbU.toLambda(width) , DbU.getValueString(width)) ) - - v = Vertical.create( coronaNet, layer, coronaX, width, dyMin, dyMax ) - - trace( 550, '\t| %s\n' % str(v) ) - trace( 550, '-' ) - return v - - - def coronaContact ( self, chipNet, layer, chipX, chipY, width, height, flags=0 ): - trace( 550, ',+', '\tChipConf.coronaContact\n' ) - - coronaAb = self.getInstanceAb( self.icorona ) - coronaNet = self.getCoronaNet( chipNet ) - if not coronaNet: return None - - coronaX = chipX - coronaAb.getXMin() - coronaY = chipY - coronaAb.getYMin() - - trace( 550, '\t| chipNet: %s %s\n' % (chipNet, layer) ) - trace( 550, '\t| Real\n' ) - trace( 550, '\t| center: %12s %12s\n' % (DbU.getValueString(coronaX), DbU.getValueString(coronaY)) ) - trace( 550, '\t| WxH: %12s %12s\n' % (DbU.getValueString(width ), DbU.getValueString(height )) ) - - topLayer = layer.getTop() - if self.gaugeConf.isHorizontal(topLayer): - coronaX, width = self.toRoutingGauge( coronaX - width //2, coronaX + width //2, layer.getBottom() ) - coronaY, height = self.toRoutingGauge( coronaY - height//2, coronaY + height//2, topLayer ) - else: - coronaX, width = self.toRoutingGauge( coronaX - width //2, coronaX + width //2, topLayer ) - coronaY, height = self.toRoutingGauge( coronaY - height//2, coronaY + height//2, layer.getBottom() ) - - if not (flags & OnHorizontalPitch): - trace( 550, '\tNot on horizontal routing pitch, Y on lambda only.\n' ) - coronaY = self.toSymbolic( chipY - coronaAb.getYMin(), Superior ) - if not (flags & OnVerticalPitch ): - trace( 550, '\tNot on vertical routing pitch, X on lambda only.\n' ) - coronaX = self.toSymbolic( chipX - coronaAb.getXMin(), Superior ) - - trace( 550, '\t| On Grid\n' ) - trace( 550, '\t| X axis: %12s or %12s\n' % (DbU.toLambda(coronaX) , DbU.getValueString(coronaX)) ) - trace( 550, '\t| Y axis: %12s or %12s\n' % (DbU.toLambda(coronaY) , DbU.getValueString(coronaY)) ) - trace( 550, '\t| center: %12s %12s\n' % (DbU.getValueString(coronaX), DbU.getValueString(coronaY)) ) - trace( 550, '\t| WxH: %12s %12s\n' % (DbU.getValueString(width ), DbU.getValueString(height )) ) - - c = Contact.create( coronaNet - , layer - , coronaX - , coronaY - , width - , height - ) - - trace( 550, '\t| %s\n' % str(c) ) - trace( 550, '-' ) - return c - - - def coronaContactArray ( self, chipNet, layer, chipX, chipY, array, flags ): - trace( 550, ',+', '\tChipConf.coronaContactArray\n' ) - - viaPitch = layer.getMinimalSize() + layer.getMinimalSpacing() - coronaAb = self.getInstanceAb( self.icorona ) - coronaNet = self.getCoronaNet( chipNet ) - if not coronaNet: return None - - trace( 550, '\t| chipNet: %s %s\n' % (chipNet, layer) ) - - coronaX = chipX - coronaAb.getXMin() - coronaY = chipY - coronaAb.getYMin() - - topLayer = layer.getTop() - if self.gaugeConf.isHorizontal(topLayer): - coronaX, width = self.toRoutingGauge( coronaX, coronaX, layer.getBottom() ) - coronaY, height = self.toRoutingGauge( coronaY, coronaY, topLayer ) - else: - coronaX, width = self.toRoutingGauge( coronaX, coronaX, topLayer ) - coronaY, height = self.toRoutingGauge( coronaY, coronaY, layer.getBottom() ) - - if not (flags & OnHorizontalPitch): - trace( 550, '\tNot on horizontal routing pitch, Y on lambda only.\n' ) - coronaY = self.toSymbolic( chipY - coronaAb.getYMin(), Superior ) - if not (flags & OnVerticalPitch ): - trace( 550, '\tNot on vertical routing pitch, X on lambda only.\n' ) - coronaX = self.toSymbolic( chipX - coronaAb.getXMin(), Superior ) - - contacts = [] - xContact = coronaX - viaPitch * (array[0]-1)//2 - yContact = coronaY - viaPitch * (array[1]-1)//2 - contactSize = layer.getMinimalSize() - - trace( 550, '\txContact:%sl yContact:%sl\n' % (DbU.toLambda(xContact),DbU.toLambda(yContact)) ) - - for i in range(array[0]): - for j in range(array[1]): - c = Contact.create( coronaNet - , layer - , xContact + i*viaPitch - , yContact + j*viaPitch - , contactSize - , contactSize - ) - trace( 550, '\t+ %s\n' % str(c) ) - contacts.append( c ) - - trace( 550, '-' ) - return contacts - - - def coronaPin ( self, chipNet, count, direction, layer, chipX, chipY, width, height ): - trace( 550, ',+', '\tChipConf.coronaPin\n' ) - - coronaAb = self.getInstanceAb( self.icorona ) - coronaNet = self.getCoronaNet( chipNet ) - if not coronaNet: return None - - coronaX = chipX - coronaAb.getXMin() - coronaY = chipY - coronaAb.getYMin() - - trace( 550, '\t| chipNet: %s (%d) %s\n' % (chipNet, count, layer) ) - trace( 550, '\t| Real\n' ) - trace( 550, '\t| center: %s %s\n' % (DbU.getValueString(coronaX), DbU.getValueString(coronaY)) ) - trace( 550, '\t| WxH: %s %s\n' % (DbU.getValueString(width ), DbU.getValueString(height )) ) - - topLayer = layer.getTop() - if self.gaugeConf.isHorizontal(topLayer): - coronaX, width = self.toRoutingGauge( coronaX - width //2, coronaX + width //2, layer.getBottom() ) - coronaY, height = self.toRoutingGauge( coronaY - height//2, coronaY + height//2, topLayer ) - else: - coronaX, width = self.toRoutingGauge( coronaX - width //2, coronaX + width //2, topLayer ) - coronaY, height = self.toRoutingGauge( coronaY - height//2, coronaY + height//2, layer.getBottom() ) - - if direction == Pin.Direction.NORTH or direction == Pin.Direction.SOUTH: - trace( 550, '\tEast/West not on horizontal routing pitch, Y on lambda only.\n' ) - coronaY = self.toSymbolic( chipY - coronaAb.getYMin(), Superior ) - if direction == Pin.Direction.EAST or direction == Pin.Direction.WEST: - trace( 550, '\tNorth/South not on vertical routing pitch, X on lambda only.\n' ) - coronaX = self.toSymbolic( chipX - coronaAb.getXMin(), Superior ) - - trace( 550, '\t| On Grid\n' ) - trace( 550, '\t| X axis: %s or %s\n' % (DbU.toLambda(coronaY) , DbU.getValueString(coronaY)) ) - trace( 550, '\t| Y axis: %s or %s\n' % (DbU.toLambda(coronaX) , DbU.getValueString(coronaX)) ) - trace( 550, '\t| center: %s %s\n' % (DbU.getValueString(coronaX), DbU.getValueString(coronaY)) ) - trace( 550, '\t| WxH: %s %s\n' % (DbU.getValueString(width ), DbU.getValueString(height )) ) - - c = Pin.create( coronaNet - , '%s.%d' % (coronaNet.getName(),count) - , direction - , Pin.PlacementStatus.FIXED - , layer - , coronaX - , coronaY - , width - , height - ) - - trace( 550, '\t| %s\n' % str(c) ) - trace( 550, '-' ) - return c - - - def checkPads ( self ): - - def contains ( padList, side, padInstance ): - for i in range(len(padList)): - if padList[i][1] == padInstance.getName(): - if (padInstance.getMasterCell().getAbutmentBox().getHeight() != self.gaugeConf.getIoPadHeight()): - raise ErrorMessage( 1, 'The pad [%d] %s (%s) on %s side is not an instance of a pad cell.' - % (i,padInstance.getName(),padInstance.getMasterCell().getName(),side) ) - padList[i][1] = padInstance - return True - return False - - def checkNotFounds ( padList, side ): - for i in range(len(padList)): - if not isinstance(padList[i][1],Instance): - print( ErrorMessage( 1, 'The pad [{}] ({}) of list %s do not exists in netlist (skipped).' \ - .format(i,padList[i][1],side) )) - return - - - af = CRL.AllianceFramework.get() - cellPads = [] - for instance in self.cell.getInstances(): - if contains(self.southPads,'south',instance): continue - if contains(self.northPads,'north',instance): continue - if contains(self.eastPads ,'east' ,instance): continue - if contains(self.westPads ,'west' ,instance): continue - if (instance.getMasterCell().getAbutmentBox().getHeight() == self.gaugeConf.getIoPadHeight()): - raise ErrorMessage( 1, 'Pad "%s" is not on any side (N/S/E/W).' % instance.getName() ) - self.validated = False - else: - self.coronas.append( instance ) - - checkNotFounds( self.southPads, 'south' ) - checkNotFounds( self.northPads, 'north' ) - checkNotFounds( self.eastPads , 'east' ) - checkNotFounds( self.westPads , 'west' ) - - if len(self.coronas) > 1: - message = [ 'Chip "%s" have more than one corona:' % self.cell.getName() ] - for i in range(len(self.coronas)): - message.append( '%4d: %s' % (i,self.coronas[i].getName()) ) - raise ErrorMessage( 1, message ) - self.validated = False - - if len(self.coronas) < 1: - raise ErrorMessage( 1, 'Chip "%s" doesn\'t seems to have a corona.' % self.cell.getName() ) - self.validated = False - else: - for instance in self.corona.getInstances(): - self.cores.append( instance ) - - if len(self.cores) > 1: - message = [ 'Chip "%s" have more than one core:' % self.cell.getName() ] - for i in range(len(self.cores)): - message.append( '%4d: %s' % (i,self.cores[i].getName()) ) - raise ErrorMessage( 1, message ) - self.validated = False - - if len(self.cores) < 1: - raise ErrorMessage( 1, 'Chip "%s" doesn\'t seems to have a core.' % self.cell.getName() ) - self.validated = False - - return - - - def findPowerAndClockNets ( self ): - if self.icore: - for plug in self.icore.getPlugs(): - masterNet = plug.getMasterNet() - netType = masterNet.getType() - if netType != Net.Type.POWER \ - and netType != Net.Type.GROUND \ - and netType != Net.Type.CLOCK: - continue - - net = plug.getNet() - if not net: - net = self.corona.getNet( masterNet.getName() ) - if not net: - raise ErrorMessage( 1, 'ChipConf.findPowerAndClockNets(): Missing global net "%s" at corona level.' - % masterNet.getName() ) - self._validated = False - continue - - if netType == Net.Type.GROUND: - if self.coronaVss and self.coronaVss != net: - raise ErrorMessage( 1, 'ChipConf.findPowerAndClockNets(): Multiple ground nets "%s" and "%s" at corona level.' - % (self.coronaVss.getName(), net.getName()) ) - self._validated = False - continue - else: - self.coronaVss = net - - if netType == Net.Type.POWER: - if self.coronaVdd and self.coronaVdd != net: - raise ErrorMessage( 1, 'ChipConf.findPowerAndClockNets(): Multiple power nets "%s" and "%s" at corona level.' - % (self.coronaVdd.getName(), net.getName()) ) - self._validated = False - continue - else: - self.coronaVdd = net - - if netType == Net.Type.CLOCK: - if self.coronaCk and self.coronaCk != net: - raise ErrorMessage( 1, 'ChipConf.findPowerAndClockNets(): Multiple clock nets "%s" and "%s" at corona level.' - % (self.coronaCk.getName(), net.getName()) ) - self._validated = False - continue - else: - self.coronaCk = net - - for net in self.corona.getNets(): - if net.getType() == Net.Type.BLOCKAGE: - self.blockageNet = net - self.blockageName = net.getName() - - if not self.blockageNet: - self.blockageNet = Net.create( self.corona, self.blockageName ) - self.blockageNet.setType( Net.Type.BLOCKAGE ) - - return - - def checkChipSize ( self ): - #if self._coreSize.isEmpty(): return - # - #minWidth = self._coreSize.getWidth () + self._minCorona + 2*self._padHeight - #minHeight = self._coreSize.getHeight() + self._minCorona + 2*self._padHeight - # - #if self._chipSize.getWidth() < minWidth: - # raise ErrorMessage( 1, 'Core is too wide to fit into the chip. Needs: %d, but has %d' \ - # % ( DbU.toLambda(minWidth), DbU.toLambda(self._chipSize.getWidth()) ) ) - # self._validated = False - # - #if self._chipSize.getHeight() < minHeight: - # raise ErrorMessage( 1, 'Core is too wide to fit into the chip. Needs: %d, but has %d' \ - # % ( DbU.toLambda(minHeight), DbU.toLambda(self._chipSize.getHeight()) ) ) - # self._validated = False - return - - def checkCorona ( self ): - trace( 550, ',+', 'Configuration.checkCorona()\n' ) - netPads = {} - for plug in self.icorona.getPlugs(): - padNet = plug.getNet() - coronaNet = plug.getMasterNet() - if not padNet and coronaNet.isGlobal(): - padNet = self.cell.getNet( coronaNet.getName() ) - - if padNet: - if not padNet in netPads: - trace( 550, '\t%20s <-> %-20s\n' % (padNet.getName(),coronaNet.getName()) ) - netPads[ padNet ] = coronaNet - else: - raise ErrorMessage( 1, 'ChipConf.checkCorona(): Corona nets "%s" and "%s" connected to the same pad net "%s".' \ - % (coronaNet.getName(),netPads[padNet].getName(),padNet.getName()) ) - self._validated = False - - trace( 550, '-' ) - return - - - def computeChipSize ( self ): - - def getSideLength ( pads ): - sideLength = self.gaugeConf.getIoPadHeight() * 2 - for pad in pads: sideLength += pad.getMasterCell().getAbutmentBox().getWidth() - return sideLength - - - if not self.chipSize.isEmpty(): return - - southPadsLength = getSideLength( self.southPads ) - northPadsLength = getSideLength( self.northPads ) - eastPadsLength = getSideLength( self.eastPads ) - westPadsLength = getSideLength( self.westPads ) - - horizontalPads = max( len(self.southPads), len(self.northPads) ) - verticalPads = max( len(self.eastPads ), len(self.westPads ) ) - self.chipSize = Box( 0 - , 0 - , max( southPadsLength, northPadsLength ) - , max( westPadsLength, eastPadsLength ) - ) - return - - - def setupCorona ( self, gapX1, gapY1, gapX2, gapY2 ): - ab = self.cell.getAbutmentBox() - ab.inflate ( -gapX1, -gapY1, -gapX2, -gapY2 ) - ab.inflate ( - self.getIoPadHeight() ) - ab.translate( - self.getIoPadHeight(), - self.getIoPadHeight()) - ab = self.toSymbolic( ab, Inwards ) - - self. corona.setAbutmentBox( Box( 0, 0, ab.getWidth(), ab.getHeight() ) ) - self.icorona.setTransformation( - Transformation( self.toSymbolic( self.getIoPadHeight() + ab.getXMin(), Superior ) - , self.toSymbolic( self.getIoPadHeight() + ab.getYMin(), Superior ) - , Transformation.Orientation.ID ) ) - self.icorona.setPlacementStatus( Instance.PlacementStatus.FIXED ) - return - - - def setupCore ( self, gapX1, gapY1, gapX2, gapY2 ): - ab = self.getInstanceAb( self.icorona ) - if ab.isEmpty(): - raise ErrorMessage( 1, 'ChipConf.setupCore(): Attempt to setup core *before* corona.' ) - return - - ab.inflate( -gapX1, -gapY1, -gapX2, -gapY2 ) - ab = self.toSymbolic( ab, Inwards ) - - trace( 550, '\tChipConf.setupCore(): Abutment box:%s\n' % str(ab) ) - - self.core.setAbutmentBox( Box( 0, 0, ab.getWidth(), ab.getHeight() ) ) - self.icore.setTransformation( - Transformation( ChipConf.toSymbolic(ab.getXMin(),Inferior) - self.icorona.getTransformation().getTx() - , ChipConf.toSymbolic(ab.getYMin(),Inferior) - self.icorona.getTransformation().getTy() - , Transformation.Orientation.ID ) ) - self.icore.setPlacementStatus( Instance.PlacementStatus.FIXED ) - return - - - @property - def cellGauge ( self ): return self.gaugeConf.cellGauge - - @property - def routingGauge ( self ): return self.gaugeConf.routingGauge - - @property - def verticalDepth ( self ): return self.gaugeConf.verticalDepth - - @property - def horizontalDepth ( self ): return self.gaugeConf.horizontalDepth - - def getSliceHeight ( self ): return self.gaugeConf.getSliceHeight() - def getSliceStep ( self ): return self.gaugeConf.getSliceStep() - def getIoPadHeight ( self ): return self.gaugeConf.getIoPadHeight() - def getIoPadStep ( self ): return self.gaugeConf.getIoPadStep() - def getIoPadPitch ( self ): return self.gaugeConf.getIoPadPitch() - def getIoPadGauge ( self ): return self.gaugeConf.getIoPadGauge() - def getHRoutingGauge ( self ): return self.gaugeConf.getHRoutingGauge() - def getVRoutingGauge ( self ): return self.gaugeConf.getVRoutingGauge() - - def rpByOccurrence ( self, occurrence, net ): - return self.gaugeConf._rpByOccurrence ( occurrence, net ) - - def rpByPlugName ( self, instance, plugName, net ): - return self.gaugeConf._rpByPlugName ( instance, plugName, net ) - - def rpAccess ( self, rp, flags=0 ): - return self.gaugeConf._rpAccess( rp, flags ) - - def rpAccessByOccurrence ( self, occurrence, net, flags=0 ): - return self.gaugeConf._rpAccessByOccurrence ( occurrence, net, flags ) - - def rpAccessByPlugName ( self, instance, plugName, net, flags=0 ): - return self.gaugeConf._rpAccessByPlugName( instance, plugName, net, flags ) - - def createContact ( self, net, x, y, flags=0 ): - return self.gaugeConf._createContact( net, x, y, flags ) - - def createHorizontal ( self, source, target, y, flags=0 ): - return self.gaugeConf._createHorizontal( source, target, y, flags ) - - def createVertical ( self, source, target, x, flags=0 ): - return self.gaugeConf._createVertical( source, target, x, flags ) - - def getNearestHorizontalTrack ( self, bb, y, flags ): - return self.gaugeConf._getNearestHorizontalTrack ( bb, y, flags ) - - def getNearestVerticalTrack ( self, bb, x, flags ): - return self.gaugeConf._getNearestVerticalTrack( bb, x, flags ) - - def setStackPosition ( self, topContact, x, y ): - self.gaugeConf._setStackPosition( topContact, x, y ) - - -def loadConfiguration ( cell, viewer=None ): - sys.path.append( os.getcwd() ) - - try: - confFile = 'coriolis2/ioring.py' - if not os.path.isfile(confFile): - raise ErrorMessage( 1, 'ChipPlugin, configuration file "%s" is missing.' % confFile ) - else: - if not os.path.isfile('coriolis2/__init__.py'): - raise ErrorMessage( 1, 'ChipPlugin, configuration directory "./coriolis2/" is missing "__init__.py".' ) - - from coriolis2.ioring import chip - except Exception as e: - catch( e ) - - return ChipConf( chip, cell, viewer ) diff --git a/deprecated/cumulus/src/plugins/chip/padscorona.py b/deprecated/cumulus/src/plugins/chip/padscorona.py deleted file mode 100644 index e98318c0..00000000 --- a/deprecated/cumulus/src/plugins/chip/padscorona.py +++ /dev/null @@ -1,1352 +0,0 @@ - -# This file is part of the Coriolis Software. -# Copyright (c) Sorbonne Université 2014-2021, All Rights Reserved -# -# +-----------------------------------------------------------------+ -# | C O R I O L I S | -# | C u m u l u s - P y t h o n T o o l s | -# | | -# | Author : Jean-Paul CHAPUT | -# | E-mail : Jean-Paul.Chaput@lip6.fr | -# | =============================================================== | -# | Python : "./plugins/chip/padscorona.py" | -# +-----------------------------------------------------------------+ - - -import sys -import re -from operator import itemgetter -import Cfg -from Hurricane import DbU -from Hurricane import Point -from Hurricane import Transformation -from Hurricane import Interval -from Hurricane import Box -from Hurricane import Path -from Hurricane import Occurrence -from Hurricane import UpdateSession -from Hurricane import Layer -from Hurricane import BasicLayer -from Hurricane import Net -from Hurricane import Pin -from Hurricane import Contact -from Hurricane import Segment -from Hurricane import Horizontal -from Hurricane import Vertical -from Hurricane import RoutingPad -from Hurricane import Instance -import CRL -from CRL import RoutingLayerGauge -import helpers -from helpers import trace -from helpers.io import ErrorMessage -from helpers.io import WarningMessage -import plugins.chip - -plugins.chip.importConstants( globals() ) - - -class Corner ( object ): - - def __init__ ( self, corona, cornerType ): - self.type = cornerType - self.corona = corona - self.padCorner = None - return - - - @property - def conf ( self ): return self.corona.conf - - - def _getPoints ( self, axis ): - if self.type == SouthWest: - xCorner = self.conf.chipSize.getXMin() + axis - yCorner = self.conf.chipSize.getYMin() + axis - xBb = self.conf.chipSize.getXMin() + self.conf.getIoPadHeight() - yBb = self.conf.chipSize.getYMin() + self.conf.getIoPadHeight() - elif self.type == SouthEast: - xCorner = self.conf.chipSize.getXMax() - axis - yCorner = self.conf.chipSize.getYMin() + axis - xBb = self.conf.chipSize.getXMax() - self.conf.getIoPadHeight() - yBb = self.conf.chipSize.getYMin() + self.conf.getIoPadHeight() - elif self.type == NorthEast: - xCorner = self.conf.chipSize.getXMax() - axis - yCorner = self.conf.chipSize.getYMax() - axis - xBb = self.conf.chipSize.getXMax() - self.conf.getIoPadHeight() - yBb = self.conf.chipSize.getYMax() - self.conf.getIoPadHeight() - elif self.type == NorthWest: - xCorner = self.conf.chipSize.getXMin() + axis - yCorner = self.conf.chipSize.getYMax() - axis - xBb = self.conf.chipSize.getXMin() + self.conf.getIoPadHeight() - yBb = self.conf.chipSize.getYMax() - self.conf.getIoPadHeight() - - return xCorner, yCorner, xBb, yBb - - - def _createCorner ( self ): - for rail in self.corona.padRails: - net = rail[0] - layer = rail[1] - axis = rail[2] - width = rail[3] - - xCorner, yCorner, xBb, yBb = self._getPoints( axis ) - - Contact .create( net, layer, xCorner, yCorner, width, width ) - Horizontal.create( net, layer, yCorner, width, xCorner, xBb ) - Vertical .create( net, layer, xCorner, width, yCorner, yBb ) - return - - - def _getTransformation ( self ): - if self.type == SouthWest: - name = 'padcorner_sw' - x = self.conf.chipSize.getXMin() - y = self.conf.chipSize.getYMin() - if self.corona.padOrient == Transformation.Orientation.ID: - orientation = Transformation.Orientation.ID - else: - orientation = Transformation.Orientation.R1 - x += self.padCorner.getAbutmentBox().getWidth() - - elif self.type == SouthEast: - name = 'padcorner_se' - x = self.conf.chipSize.getXMax() - y = self.conf.chipSize.getYMin() - if self.corona.padOrient == Transformation.Orientation.ID: - orientation = Transformation.Orientation.R1 - else: - orientation = Transformation.Orientation.R2 - x += self.padCorner.getAbutmentBox().getWidth() - y += self.padCorner.getAbutmentBox().getHeight() - - elif self.type == NorthEast: - name = 'padcorner_ne' - x = self.conf.chipSize.getXMax() - y = self.conf.chipSize.getYMax() - if self.corona.padOrient == Transformation.Orientation.ID: - orientation = Transformation.Orientation.R2 - else: - orientation = Transformation.Orientation.R3 - x -= self.padCorner.getAbutmentBox().getwidth() - y -= self.padCorner.getAbutmentBox().getHeight() - - elif self.type == NorthWest: - name = 'padcorner_nw' - x = self.conf.chipSize.getXMin() - y = self.conf.chipSize.getYMax() - if self.corona.padOrient == Transformation.Orientation.ID: - orientation = Transformation.Orientation.R3 - else: - orientation = Transformation.Orientation.ID - y -= self.padCorner.getAbutmentBox().getHeight() - - return name, Transformation( self.corona.toGrid(x), self.corona.toGrid(y), orientation ) - - - def _instanciateCorner ( self ): - name, transformation = self._getTransformation() - - corner = Instance.create( self.conf.cell - , name, self.corona.padCorner - , transformation - , Instance.PlacementStatus.FIXED - ) - return - - - def doLayout ( self ): - if self.corona.padCorner: self._instanciateCorner() - else: self._createCorner() - return - - -class Side ( object ): - - def __init__ ( self, corona, sideType ): - self.type = sideType - self.corona = corona - self.pins = [] - self.u = self.conf.getIoPadHeight() - self.spacerCount = 0 - self.gap = 0 - self.coreWires = [] - - if self.type == North: - self.pads = self.conf.northPads - self.sideName = 'north' - self.sideLength = self.conf.chipSize.getWidth() - - elif self.type == South: - self.pads = self.conf.southPads - self.sideName = 'south' - self.sideLength = self.conf.chipSize.getWidth() - - elif self.type == East: - self.pads = self.conf.eastPads - self.sideName = 'east' - self.sideLength = self.conf.chipSize.getHeight() - - elif self.type == West: - self.pads = self.conf.westPads - self.sideName = 'west' - self.sideLength = self.conf.chipSize.getHeight() - - else: - raise ErrorMessage( 1, 'PadsCorona.Side.__init__(): Invalid value for sideType (%d)' % sideType ) - - self.spacerNames = 'padspacer_' + self.sideName + '_%d' - return - - - @property - def conf ( self ): return self.corona.conf - - - def toGrid ( self, u ): return self.corona.toGrid( u ) - - - def getAxis ( self, i ): - if self.type == North: return self.conf.chipSize.getYMax() - self.conf.getIoPadHeight() + self.corona.powerRails[i][2] - elif self.type == South: return self.conf.chipSize.getYMin() + self.conf.getIoPadHeight() - self.corona.powerRails[i][2] - elif self.type == East: return self.conf.chipSize.getXMax() - self.conf.getIoPadHeight() + self.corona.powerRails[i][2] - elif self.type == West: return self.conf.chipSize.getXMin() + self.conf.getIoPadHeight() - self.corona.powerRails[i][2] - else: - raise ErrorMessage( 1, 'PadsCorona.Side.__init__(): Invalid value for sideType (%d)' % sideType ) - return 0 - - - def hasPad ( self, padInstance ): - for pad in self.pads: - if pad[1] == padInstance: - return True - return False - - - def addCoreWire ( self, coreWire ): - self.coreWires.append( coreWire ) - return - - - def updateGap ( self, gapWidth ): - self.gap = max( self.gap, gapWidth ) - return - - - def _check ( self, checkSize, checkName ): - sideName = 'unknown' - chipSize = 0 - if self.type == North or self.type == South: - chipSize = self.conf.chipSize.getWidth() - sideName = 'wide' - elif self.type == East or self.type == West: - chipSize = self.conf.chipSize.getHeight() - sideName = 'tall' - - if checkSize > chipSize: - sliceHeight = self.conf.getSliceHeight() - if checkSize % sliceHeight != 0: - checkSize += sliceHeight - (checkSize % sliceHeight) - - raise ErrorMessage( 1, [ 'Chip is not %s enought to accomodate the %s,' % (sideName,checkName) - , 'needs %s, but only has %s.' - % ( DbU.getValueString(checkSize), DbU.getValueString(chipSize) ) - ] ) - return False - return True - - - def check ( self ): - self.validated = True - if self.type == North: - self.validated = self._check( self.conf.coreSize.getWidth() - + 2*self.conf.minCorona - + 2*self.conf.getIoPadHeight() - , 'core' ) - checkName = 'north pads' - elif self.type == East: - self.validated = self._check( self.conf.coreSize.getHeight() - + 2*self.conf.minCorona - + 2*self.conf.getIoPadHeight() - , 'core' ) - checkName = 'east pads' - elif self.type == South: checkName = 'south pads' - elif self.type == West: checkName = 'west pads' - - self.validated = self._check( len(self.pads) * self.conf.gaugeConf.getIoPadStep () - + 2*self.conf.gaugeConf.getIoPadHeight() - , checkName ) and self.validated - return self.validated - - -# def _createPowerContacts ( self, pad, net ): -# if self._type == chip.North or self._type == chip.South: -# hvDepth = self._corona.padVDepth -# elif self._type == chip.East or self._type == chip.West: -# hvDepth = self._corona.padHDepth -# -# trace( 550, ',+', '\t_createPowerContacts() for %s\n' % net.getName() ) -# -# components = None -# masterCell = pad.getMasterCell() -# trace( 550, '\tLooking for global net %s\n' % net.getName() ) -# for plug in net.getPlugs(): -# if plug.getInstance() == pad: -# trace( 550, '\tFound Plug on %s\n' % pad ) -# components = plug.getMasterNet().getExternalComponents() -# if not components: -# masterNet = masterCell.getNet( net.getName() ) -# if masterNet: -# components = masterCell.getNet(net.getName()).getExternalComponents() -# if not components: -# raise ErrorMessage( 1, [ 'PadsCorona.Side._createPowerContact():' -# , 'Pad model <%s> of instance <%s> neither have global net <%s>' % (pad.getName(),masterCell.getName(),net.getName()) -# , 'for implicit connection nor is it explicitly connected.' -# , 'The power/clock nets *names* in the chip must match those of the pads models.' -# ] ) -# -# -# connecteds = False -# trace( 550, '\t %s\n' % str(masterCell.getAbutmentBox()) ) -# for component in components: -# if component.getBoundingBox().getYMin() > masterCell.getAbutmentBox().getYMin(): continue -# if self._corona.routingGauge.getLayerDepth(component.getLayer()) != hvDepth: continue -# if not isinstance(component,Vertical): continue -# -# if self._type == chip.North or self._type == chip.South: -# width = component.getWidth() -# height = 0 -# else: -# width = 0 -# height = component.getWidth() -# -# position = Point( component.getX(), masterCell.getAbutmentBox().getYMin() ) -# pad.getTransformation().applyOn( position ) -# -# connecteds = True -# self._powerContacts.append( Contact.create( net -# , component.getLayer() -# , position.getX() -# , position.getY() -# , width -# , height -# ) ) -# if not connecteds: -# print WarningMessage( 'Cannot find a suitable connector for <%s> on pad <%s>' -# % (net.getName(),pad.getName()) ) -# -# trace( 550, '-' ) -# return - - -# def _createAllPowerContacts ( self ): -# for pad in self.pads: -# masterCell = pad.getMasterCell() -# if masterCell.getName() != self._corona.pvddickName \ -# and masterCell.getName() != self._corona.pvssickName \ -# and masterCell.getName() != self._corona.pvddeckName \ -# and masterCell.getName() != self._corona.pvsseckName: -# continue -# #print 'Power pad:', pad -# self._createPowerContacts( pad, self._corona.vddi ) -# self._createPowerContacts( pad, self._corona.vssi ) -# if self._corona.useClockTree: -# self._createPowerContacts( pad, self._corona.cko ) -# return - - - def _fillPadSpacing ( self, gapWidth ): - if not self.corona.padSpacers: - self.u += gapWidth - return - - iPadSpacer = 0 - - def _getWidth ( spacer ): return spacer.getAbutmentBox().getWidth() - def _nextSpacer ( iPadSpacer ): - while iPadSpacer < len(self.corona.padSpacers) \ - and gapWidth < _getWidth(self.corona.padSpacers[iPadSpacer]): - iPadSpacer += 1 - return iPadSpacer - - iPadSpacer = _nextSpacer( iPadSpacer ) - - while iPadSpacer < len(self.corona.padSpacers) and gapWidth > 0: - gapWidth -= _getWidth( self.corona.padSpacers[iPadSpacer] ) - spacer = Instance.create( self.conf.cell - , self.spacerNames % self.spacerCount - , self.corona.padSpacers[iPadSpacer]) - self.spacerCount += 1 - self._placePad( spacer ) - - if gapWidth < _getWidth(self.corona.padSpacers[iPadSpacer]): - iPadSpacer = _nextSpacer( iPadSpacer ) - - if gapWidth != 0: - raise ErrorMessage( 1, 'PadsCorona.Side._placePads(): Pad fillers cannot close the gap between pads on %s side, %s remains.' \ - % (self.sideName,DbU.getValueString(gapWidth)) ) - - self.u += gapWidth - return - - - def _placePad ( self, padInstance ): - if self.type == North: - x = self.conf.chipSize.getXMin() + self.u - y = self.conf.chipSize.getYMax() - - if self.corona.padOrient == Transformation.Orientation.ID: - orientation = Transformation.Orientation.MY - else: - orientation = Transformation.Orientation.ID - y -= self.conf.getIoPadHeight() - - elif self.type == South: - x = self.conf.chipSize.getXMin() + self.u - y = self.conf.chipSize.getYMin() - - if self.corona.padOrient == Transformation.Orientation.ID: - orientation = Transformation.Orientation.ID - else: - orientation = Transformation.Orientation.MY - y += self.conf.getIoPadHeight() - - elif self.type == West: - x = self.conf.chipSize.getXMin() - y = self.conf.chipSize.getYMin() + self.u - - if self.corona.padOrient == Transformation.Orientation.ID: - orientation = Transformation.Orientation.R3 - y += padInstance.getMasterCell().getAbutmentBox().getWidth() - else: - orientation = Transformation.Orientation.R1 - x += padInstance.getMasterCell().getAbutmentBox().getHeight() - - elif self.type == East: - x = self.conf.chipSize.getXMax() - y = self.conf.chipSize.getYMin() + self.u - - if self.corona.padOrient == Transformation.Orientation.ID: - orientation = Transformation.Orientation.R1 - else: - orientation = Transformation.Orientation.R3 - x -= padInstance.getMasterCell().getAbutmentBox().getHeight() - y += padInstance.getMasterCell().getAbutmentBox().getWidth() - - padInstance.setTransformation ( Transformation( self.toGrid(x), self.toGrid(y), orientation ) ) - padInstance.setPlacementStatus( Instance.PlacementStatus.FIXED ) - - self.u += padInstance.getMasterCell().getAbutmentBox().getWidth() - - p = None - if self.conf.getIoPadGauge().getName() == 'pxlib': - p = re.compile( r'p(?Pv[sd]{2}[ei])ck_px' ) - - if self.conf.getIoPadGauge().getName().startswith('phlib'): - p = re.compile( r'p(?Pv[sd]{2})ck2_sp' ) - - if p: - m = p.match( padInstance.getMasterCell().getName() ) - - padName = 'pad' - if m: padName = m.group( 'power' ) - - padNet = padInstance.getMasterCell().getNet( padName ) - #print( 'padName:', padName, 'padNet:', padNet ) - if padNet: - plug = padInstance.getPlug( padNet ) - chipNet = plug.getNet() - - if not chipNet and padNet.isGlobal(): - chipNet = padInstance.getCell().getNet( padNet.getName() ) - - if chipNet: - rp = RoutingPad.create( chipNet, Occurrence(plug), RoutingPad.BiggestArea ) - return - - - def _placePads ( self ): - padLength = 0 - for pad in self.pads: padLength += pad[1].getMasterCell().getAbutmentBox().getWidth() - padSpacing = (self.sideLength - 2*self.conf.getIoPadHeight() - padLength) // (len(self.pads) + 1) - - if self.conf.padsHavePosition: - for i in range(len(self.pads)): - self.pads[i][0] = self.toGrid( self.pads[i][0] ) - else: - position = self.u - for i in range(len(self.pads)): - position += padSpacing - self.pads[i][0] = self.toGrid( position ) - position += self.pads[i][1].getMasterCell().getAbutmentBox().getWidth() - - for pad in self.pads: - self._fillPadSpacing( pad[0] - self.u ) - self._placePad( pad[1] ) - - self._fillPadSpacing( self.sideLength - self.conf.getIoPadHeight() - self.u ) - - return - - - def _getUMin ( self, box ): - if self.type == North or self.type == South: - return box.getXMin() - return box.getYMin() - - - def _getUMax ( self, box ): - if self.type == North or self.type == South: - return box.getXMax() - return box.getYMax() - - - def _createSegment ( self, rail, uMin, uMax ): - net, layer, axis, width = rail - if self.conf.getIoPadGauge().getName() == 'pxlib': - if net.isClock(): - uMin -= DbU.fromLambda(5.0) - uMax += DbU.fromLambda(5.0) - else: - uMin -= width//2 - uMax += width//2 - - if self.type == North or self.type == South: - if self.type == North: - axis = self.conf.chipSize.getYMax() - axis - Horizontal.create( net, layer, axis, width, uMin, uMax ) - else: - if self.type == East: - axis = self.conf.chipSize.getXMax() - axis - Vertical.create( net, layer, axis, width, uMin, uMax ) - return - - - def _routePads ( self ): - if self.type == South or self.type == North: - startCorner = self.conf.chipSize.getXMin() - stopCorner = self.conf.chipSize.getXMax() - elif self.type == West or self.type == East: - startCorner = self.conf.chipSize.getYMin() - stopCorner = self.conf.chipSize.getYMax() - else: - return - - startCorner += self.conf.getIoPadHeight() - stopCorner -= self.conf.getIoPadHeight() - - if len(self.pads) == 0: - return - - padAb = self.conf.getInstanceAb( self.pads[0][1] ) - for irail in range(len(self.corona.padRails)): - self._createSegment( self.corona.padRails[ irail ] - , startCorner - , self._getUMin(padAb) ) - - padAb = self.conf.getInstanceAb( self.pads[-1][1] ) - for irail in range(len(self.corona.padRails)): - self._createSegment( self.corona.padRails[ irail ] - , self._getUMax(padAb) - , stopCorner ) - - for i in range(len(self.pads)-1): - padAb1 = self.conf.getInstanceAb( self.pads[i ][1] ) - padAb2 = self.conf.getInstanceAb( self.pads[i+1][1] ) - - for rail in self.corona.padRails: - self._createSegment( rail, self._getUMax(padAb1), self._getUMin(padAb2) ) - - return - - - def doLayout ( self ): - self._placePads() - if not self.corona.padSpacers: - self._routePads() - #self._createAllPowerContacts() - return - - - def drawCoreWires ( self ): - trace( 550, ',+', '\tSide.drawCoreWire()\n' ) - - if self.type == West or self.type == East: - trace( 550, 'Sort East/West' ) - self.coreWires.sort( key=lambda wire: wire.bbSegment.getCenter().getY() ) - if self.type == North or self.type == South: - trace( 550, 'Sort North/South' ) - self.coreWires.sort( key=lambda wire: wire.bbSegment.getCenter().getX() ) - - for wire in self.coreWires: - wire.updateInCorona() - - size = len(self.coreWires) - offset = 0 - for i in range(size): - if self.coreWires[i].inCoronaRange: break - offset += 1 - for i in range(offset): - self.coreWires[i].setOffset( i+1, CoreWire.AtBegin ) - - offset = 0 - for i in range(1,size+1): - if self.coreWires[-i].inCoronaRange: break - offset += 1 - for i in range(offset): - self.coreWires[ -(offset+1) ].setOffset( i+1, CoreWire.AtEnd ) - - for wire in self.coreWires: - if self.type == West or self.type == East: - trace( 550, '\t| %s %s %d %s inRange:%s\n' % ( wire.chipNet.getName() - , DbU.getValueString(wire.bbSegment.getCenter().getY()) - , wire.count - , wire.padSegment.getLayer() - , wire.inCoronaRange ) ) - - if self.type == North or self.type == South: - trace( 550, '\t| %s %s %d %s inRange:%s\n' % ( wire.chipNet.getName() - , DbU.getValueString(wire.bbSegment.getCenter().getX()) - , wire.count - , wire.padSegment.getLayer() - , wire.inCoronaRange ) ) - wire.drawWire() - trace( 550, '-' ) - return - - -class CoreWire ( object ): - - # Should be read from the symbolic technology rules. - viaPitch = DbU.fromLambda( 4.0 ) - - NoOffset = 0x0000 - AtBegin = 0x0001 - AtEnd = 0x0002 - - def __init__ ( self, corona, chipNet, padSegment, bbSegment, side, preferredDir, count ): - self.corona = corona - self.chipNet = chipNet - self.padSegment = padSegment - self.bbSegment = bbSegment - self.offset = 0 - self.offsetType = CoreWire.NoOffset - self.side = side - self.preferredDir = preferredDir - self.inCoronaRange = True - self.arraySize = None - self.count = count - - return - - - @property - def conf ( self ): return self.corona.conf - - - def updateInCorona ( self ): - coronaAb = self.conf.getInstanceAb( self.conf.icorona ) - - if self.side == South or self.side == North: - xCoronaPin = self.bbSegment.getCenter().getX() - if xCoronaPin <= coronaAb.getXMin(): self.inCoronaRange = False - elif xCoronaPin >= coronaAb.getXMax(): self.inCoronaRange = False - - if self.side == East or self.side == West: - yCoronaPin = self.bbSegment.getCenter().getY() - if yCoronaPin <= coronaAb.getYMin(): self.inCoronaRange = False - elif yCoronaPin >= coronaAb.getYMax(): self.inCoronaRange = False - - return - - - def setOffset ( self, offset, offsetType ): - self.offset = offset - self.offsetType = offsetType - - - def _computeCoreLayers ( self ): - rg = self.conf.gaugeConf.routingGauge - mask = self.padSegment.getLayer().getMask() - - trace( 550, ',+', '\tCoreWire._computeCoreLayers()\n' ) - trace( 550, '\tbbSegment: %s\n' % (self.bbSegment) ) - - self.symSegmentLayer = None - for layerGauge in rg.getLayerGauges(): - if layerGauge.getDepth() > self.conf.gaugeConf.topLayerDepth: break - - if layerGauge.getLayer().getMask() == mask: - self.symSegmentLayer = layerGauge.getLayer() - - if self.preferredDir: - self.symContactLayer = self.symSegmentLayer - if self.side & (West|East): - self.symContactSize = ( layerGauge.getWireWidth(), self.bbSegment.getHeight() ) - else: - self.symContactSize = ( self.bbSegment.getWidth(), layerGauge.getWireWidth() ) - else: - depth = layerGauge.getDepth() - if layerGauge.getDepth() + 1 > self.conf.gaugeConf.topLayerDepth: - self.symSegmentLayer = rg.getLayerGauge( depth-1 ).getLayer() - depth -= 1 - else: - self.symSegmentLayer = rg.getLayerGauge( depth+1 ).getLayer() - - self.symContactLayer = rg.getContactLayer( depth ) - if self.side & (West|East): - self.symContactSize = ( self.bbSegment.getHeight(), self.bbSegment.getHeight() ) - else: - self.symContactSize = ( self.bbSegment.getWidth(), self.bbSegment.getWidth() ) - - contactMinSize = 2*self.symContactLayer.getEnclosure( self.symSegmentLayer.getBasicLayer() - , Layer.EnclosureH|Layer.EnclosureV ) \ - + self.symContactLayer.getMinimalSize() - - arrayWidth = self.symContactSize[0] - arrayCount = (arrayWidth - contactMinSize) // CoreWire.viaPitch - trace( 550, '\tCoreWire.viaPitch: %sl\n' % (DbU.toLambda(CoreWire.viaPitch)) ) - trace( 550, '\tcontactMinSize: %sl, arrayWidth: %sl, arrayCount: %d\n' - % (DbU.toLambda(contactMinSize),DbU.toLambda(arrayWidth),arrayCount) ) - if arrayCount < 0: arrayCount = 0 - if arrayCount < 3: - if self.side & (North|South): - self.arraySize = ( arrayCount+1, 2 ) - else: - self.arraySize = ( 2, arrayCount+1 ) - - trace( 550, '\tarraySize = (%d,%d)\n' % (self.arraySize[0], self.arraySize[1]) ) - trace( 550, ',-' ) - return - - raise ErrorMessage( 1, 'CoreWire._computeCoreLayers(): Layer of IO pad segment "%s" is not in routing gauge.' \ - % self.chipNet.getName() ) - - trace( 550, ',-' ) - return - - - def drawWire ( self ): - trace( 550, ',+', '\tCoreWire.drawWire(): chip:"%s"\n' %(self.chipNet.getName()) ) - - coronaAb = self.conf.getInstanceAb( self.conf.icorona ) - - self._computeCoreLayers() - - padLayer = self.padSegment.getLayer() - if not isinstance(padLayer,BasicLayer): - padLayer = padLayer.getBasicLayer() - - if self.side == West or self.side == East: - flags = OnHorizontalPitch - hPitch = self.conf.gaugeConf.getPitch( self.symSegmentLayer ) - vPitch = self.conf.gaugeConf.getPitch( self.padSegment.getLayer() ) - - yCore = self.conf.toCoronaPitchInChip( self.bbSegment.getCenter().getY(), self.symSegmentLayer ) - if self.offset: - if self.offsetType == CoreWire.AtBegin: - yCore += 2*hPitch*self.offset - else: - yCore -= 2*hPitch*self.offset - - if self.side == West: - accessDirection = Pin.Direction.WEST - xPadMin = self.bbSegment.getXMin() - xContact = self.corona.coreSymBb.getXMin() - self.offset * 2*vPitch - xPadMax = xContact - xCore = coronaAb.getXMin() - if not self.preferredDir: - xPadMax += self.bbSegment.getHeight()//2 - else: - accessDirection = Pin.Direction.EAST - xPadMax = self.bbSegment.getXMax() - xContact = self.corona.coreSymBb.getXMax() + self.offset * 2*vPitch - xPadMin = xContact - xCore = coronaAb.getXMax() - if not self.preferredDir: - xPadMin -= self.bbSegment.getHeight()//2 - - hReal = Horizontal.create( self.chipNet - , self.padSegment.getLayer() - , self.bbSegment.getCenter().getY() - , self.bbSegment.getHeight() - , xPadMin - , xPadMax - ) - trace( 550, '\tself.arraySize: %s\n' % str(self.arraySize) ) - if self.arraySize: - contacts = self.conf.coronaContactArray( self.chipNet - , self.symContactLayer - , xContact - , yCore - , self.arraySize - , flags - ) - vStrapBb = Box() - for contact in contacts: - vStrapBb.merge( contact.getBoundingBox() ) - else: - contact = self.conf.coronaContact( self.chipNet - , self.symContactLayer - , xContact - , yCore - , self.symContactSize[0] - , self.symContactSize[1] - , flags - ) - vStrapBb = contact.getBoundingBox( padLayer ) - - hRealBb = hReal.getBoundingBox( padLayer ) - self.conf.icorona.getTransformation().applyOn( vStrapBb ) - vStrapBb.merge( vStrapBb.getXMin(), hRealBb.getYMin() ) - vStrapBb.merge( vStrapBb.getXMin(), hRealBb.getYMax() ) - if self.padSegment.getLayer().isSymbolic(): - vStrapBb.inflate( 0, -self.padSegment.getLayer().getExtentionCap() - , 0, -self.padSegment.getLayer().getExtentionCap() ) - - Vertical.create( self.chipNet - , self.padSegment.getLayer() - , vStrapBb.getCenter().getX() - , vStrapBb.getWidth() - , vStrapBb.getYMin() - , vStrapBb.getYMax() - ) - - if self.arraySize: - if self.side == West: xContact = min( xContact, vStrapBb.getXMin() ) - else: xContact = max( xContact, vStrapBb.getXMax() ) - - self.conf.coronaHorizontal( self.chipNet - , self.symSegmentLayer - , yCore - , self.bbSegment.getHeight() - , xContact - , xCore - ) - trace( 550, '\tCORONA PIN: %s %d\n' % (self.chipNet, self.count) ) - pin = self.conf.coronaPin( self.chipNet - , self.count - , accessDirection - , self.symSegmentLayer - , xCore - , yCore - , DbU.fromLambda( 1.0 ) - , self.bbSegment.getHeight() - ) - else: - flags = OnVerticalPitch - hPitch = self.conf.gaugeConf.getPitch( self.padSegment.getLayer() ) - vPitch = self.conf.gaugeConf.getPitch( self.symSegmentLayer ) - - trace( 550, '\t%s translated of %s\n' % (self.symSegmentLayer, DbU.getValueString( 2*vPitch*self.offset )) ) - - xCore = self.conf.toCoronaPitchInChip( self.bbSegment.getCenter().getX(), self.symSegmentLayer ) - if self.offset: - if self.offsetType == CoreWire.AtBegin: - xCore += 2*vPitch*self.offset - else: - xCore -= 2*vPitch*self.offset - - if self.side == South: - accessDirection = Pin.Direction.SOUTH - yPadMin = self.bbSegment.getYMin() - yPadMax = self.corona.coreSymBb.getYMin() - self.offset * 2*hPitch - yContact = yPadMax - yCore = coronaAb.getYMin() - if not self.preferredDir: - yPadMax += self.bbSegment.getWidth()//2 - else: - accessDirection = Pin.Direction.NORTH - yPadMax = self.bbSegment.getYMax() - yPadMin = self.corona.coreSymBb.getYMax() + self.offset * 2*hPitch - yContact = yPadMin - yCore = coronaAb.getYMax() - if not self.preferredDir: - yPadMin -= self.bbSegment.getWidth()//2 - - vReal = Vertical.create( self.chipNet - , self.padSegment.getLayer() - , self.bbSegment.getCenter().getX() - , self.bbSegment.getWidth() - , yPadMin - , yPadMax - ) - trace( 550, '\tself.arraySize: %s\n' % str(self.arraySize) ) - if self.arraySize: - contacts = self.conf.coronaContactArray( self.chipNet - , self.symContactLayer - , xCore - , yContact - , self.arraySize - , flags - ) - hStrapBb = Box() - for contact in contacts: - hStrapBb.merge( contact.getBoundingBox() ) - else: - contact = self.conf.coronaContact( self.chipNet - , self.symContactLayer - , self.bbSegment.getCenter().getX() - , yContact - , self.symContactSize[0] - , self.symContactSize[1] - , flags - ) - hStrapBb = contact.getBoundingBox( padLayer ) - - vRealBb = vReal.getBoundingBox() - self.conf.icorona.getTransformation().applyOn( hStrapBb ) - hStrapBb.merge( vRealBb.getXMin(), hStrapBb.getYMin() ) - hStrapBb.merge( vRealBb.getXMax(), hStrapBb.getYMin() ) - if self.padSegment.getLayer().isSymbolic(): - hStrapBb.inflate( -self.padSegment.getLayer().getExtentionCap(), 0 - , -self.padSegment.getLayer().getExtentionCap(), 0 ) - - Horizontal.create( self.chipNet - , self.padSegment.getLayer() - , hStrapBb.getCenter().getY() - , hStrapBb.getHeight() - , hStrapBb.getXMin() - , hStrapBb.getXMax() - ) - - if self.arraySize: - if self.side == South: yContact = min( yContact, hStrapBb.getYMin() ) - else: yContact = max( yContact, hStrapBb.getYMax() ) - - trace( 550, '\txCore: %sl %s\n' % (DbU.toLambda(xCore), DbU.getValueString(xCore)) ) - self.conf.coronaVertical( self.chipNet - , self.symSegmentLayer - , xCore - , self.bbSegment.getWidth() - , yContact - , yCore - ) - pin = self.conf.coronaPin( self.chipNet - , self.count - , accessDirection - , self.symSegmentLayer - , xCore - , yCore - , self.bbSegment.getWidth() - , DbU.fromLambda( 1.0 ) - ) - - if self.side & North: self.corona.northSide.pins.append( pin ) - if self.side & South: self.corona.southSide.pins.append( pin ) - if self.side & East : self.corona.eastSide .pins.append( pin ) - if self.side & West : self.corona.westSide .pins.append( pin ) - - trace( 550, '-' ) - return - - -class Corona ( object ): - - def __init__ ( self, conf ): - def _cmpPad ( pad1, pad2): - width1 = pad1.getAbutmentBox().getWidth() - width2 = pad2.getAbutmentBox().getWidth() - if width1 == width2: return 0 - if width1 > width2: return -1 - return 1 - - self.conf = conf - self.validated = False - self.northSide = Side( self, North ) - self.southSide = Side( self, South ) - self.eastSide = Side( self, East ) - self.westSide = Side( self, West ) - self.corners = { SouthWest : Corner( self, SouthWest ) - , SouthEast : Corner( self, SouthEast ) - , NorthWest : Corner( self, NorthWest ) - , NorthEast : Corner( self, NorthEast ) - } - self.padLib = None - self.padOrient = Transformation.Orientation.ID - self.padSpacers = [] - self.padCorner = [] - self.padRails = [] # [ , [net, layer, axis, width] ] - - if Cfg.hasParameter('chip.padCoreSide'): - if Cfg.getParamString('chip.padCoreSide').asString().lower() == 'south': - self.padOrient = Transformation.Orientation.MY - - self._allPadsAnalysis() - if Cfg.hasParameter('chip.padSpacers'): - for spacerName in Cfg.getParamString('chip.padSpacers').asString().split(','): - spacerCell = self.padLib.getCell( spacerName ) - if spacerCell: self.padSpacers.append( spacerCell ) - else: - raise ErrorMessage( 1, 'Corona.__init__(): Missing spacer cell "%s"' % spacerName ) - self.padSpacers.sort( _cmpPad ) - - if Cfg.hasParameter('chip.padCorner'): - self.padCorner = self.padLib.getCell( Cfg.getParamString('chip.padCorner').asString() ) - - return - - - def toGrid ( self, u ): return u - (u % self.conf.getIoPadPitch()) - - - def validate ( self ): - self._allPadsAnalysis() - self.validated = self.northSide.check() - self.validated = self.southSide.check() and self.validated - self.validated = self.eastSide.check() and self.validated - self.validated = self.westSide.check() and self.validated - return self.validated - - - def hasNorthPad ( self, padInstance ): return self.northSide.hasPad(padInstance) - def hasSouthPad ( self, padInstance ): return self.southSide.hasPad(padInstance) - def hasEastPad ( self, padInstance ): return self.eastSide.hasPad(padInstance) - def hasWestPad ( self, padInstance ): return self.westSide.hasPad(padInstance) - - - def hasPad ( self, padInstance ): - if self.hasNorthPad(padInstance): return True - if self.hasSouthPad(padInstance): return True - if self.hasEastPad (padInstance): return True - if self.hasWestPad (padInstance): return True - return False - - - def _allPadsAnalysis ( self ): - for pad in self.conf.southPads: - self._padAnalysis( pad[1] ) - if self.padRails: return - - for pad in self.conf.northPads: - self._padAnalysis( pad[1] ) - if self.padRails: return - - for pad in self.conf.eastPads: - self._padAnalysis( pad[1] ) - if self.padRails: return - - for pad in self.conf.westPads: - self._padAnalysis( pad[1] ) - if self.padRails: return - - return - - - def _padAnalysis ( self, padInstance ): - if self.padRails: return - - padCell = padInstance.getMasterCell() - ab = padCell.getAbutmentBox() - - if not self.padLib: self.padLib = padCell.getLibrary() - - for plug in padInstance.getPlugs(): - for component in plug.getMasterNet().getComponents(): - if isinstance(component,Horizontal): - hspan = Interval( component.getBoundingBox().getXMin() - , component.getBoundingBox().getXMax() ) - - # Specific hack for Alliance pxlib pad library. - if self.conf.getIoPadGauge().getName() == 'pxlib': - if plug.getMasterNet().isClock(): - hspan.inflate( DbU.fromLambda(5.0) ) - else: - hspan.inflate( component.getWidth() // 2 ) - - if hspan.contains( ab.getXMin() ) or hspan.contains( ab.getXMax() ): - duplicate = False - - if self.padOrient == Transformation.Orientation.ID: - axis = component.getY() - else: - axis = self.conf.getIoPadHeight() - component.getY() - - for rail in self.padRails: - if rail[0] == plug.getNet() \ - and rail[1] == component.getLayer() \ - and rail[2] == axis: - duplicate = True - break - - if not duplicate: - net = plug.getNet() - if not net: - if plug.getMasterNet().isGlobal(): - net = self.conf.cell.getNet( plug.getMasterNet().getName() ) - if not net: - raise ErrorMessage( 1, 'PadsCorona._padAnalysis(): Ring net "%s" is not connected and there is no global net (in pad \"%s").' \ - % plug.getMasterNet().getName(), padCell.getName() ) - else: - raise ErrorMessage( 1, 'PadsCorona._padAnalysis(): Ring net "%s" is neither connected nor global (in pad \"%s").' \ - % plug.getMasterNet().getName(), padCell.getName() ) - - if net: - self.padRails.append( ( net - , component.getLayer() - , axis - , component.getWidth() ) ) - return - - - def _createCoreWire ( self, chipIntNet, padNet, padInstance, count ): - side = None - if self.hasSouthPad(padInstance): side = self.southSide - elif self.hasNorthPad(padInstance): side = self.northSide - elif self.hasEastPad (padInstance): side = self.eastSide - elif self.hasWestPad (padInstance): side = self.westSide - if not side: return count - - innerBb = self.conf.cell.getAbutmentBox().inflate( -self.conf.getIoPadHeight() ) - rg = self.conf.gaugeConf.routingGauge - hsegments = { } - vsegments = { } - - for component in padNet.getExternalComponents(): - if isinstance(component,Segment) or isinstance(component,Contact): - bb = component.getBoundingBox() - padInstance.getTransformation().applyOn( bb ) - if bb.intersect(innerBb): - trace( 550, '\tTerm comp:%s bb:%s\n' % (component,bb) ) - - lg = rg.getLayerGauge( component.getLayer() ) - depth = lg.getDepth() - if depth > self.conf.gaugeConf.topLayerDepth: continue - - if lg.getDirection() == RoutingLayerGauge.Vertical: - if not depth in vsegments: vsegments[ depth ] = [] - vsegments[ depth ].append( (component,bb) ) - else: - if not depth in hsegments: hsegments[ depth ] = [] - hsegments[ depth ].append( (component,bb) ) - - #if len(vsegments) + len(hsegments) == 0: - # raise ErrorMessage( 1, [ 'Corona._createCorewire(): No connector of "%s" in I/O pad "%s" is in routing gauge range (top layer "%s")' \ - # % ( padNet.getName() - # , padInstance.getMasterCell().getName() - # , rg.getLayerGauge(self.conf.gaugeConf.topLayerDepth).getLayer().getName() ) - # , 'while connecting corona net "%s"' % chipIntNet.getName() - # ] ) - - gapWidth = 0 - segments = None - inPreferredDir = False - if side.type == North or side.type == South: - if len(vsegments): - inPreferredDir = True - segments = vsegments[ min(vsegments.keys()) ] - elif len(hsegments): - segments = hsegments[ min(hsegments.keys()) ] - else: - if len(hsegments): - inPreferredDir = True - segments = hsegments[ min(hsegments.keys()) ] - elif len(vsegments): - segments = vsegments[ min(vsegments.keys()) ] - - coreWires = [] - if segments: - for segment, bb in segments: - if not inPreferredDir: - if side.type == North or side.type == South: - trace( 550, '\tNorth/South "%s" but RDir H, gapWidth: %s\n' - % (chipIntNet.getName(),DbU.getValueString(bb.getWidth()) ) ) - side.updateGap( bb.getWidth() ) - else: - trace( 550, '\tEast/West "%s" but RDir V, gapWidth: %s\n' - % (chipIntNet.getName(),DbU.getValueString(bb.getHeight())) ) - side.updateGap( bb.getHeight() ) - - side.addCoreWire( CoreWire( self, chipIntNet, segment, bb, side.type, inPreferredDir, count ) ) - count += 1 - else: - if not chipIntNet.isGlobal(): - raise ErrorMessage( 1, [ 'PadsCorona._createCoreWire(): In I/O pad "%s" (%s,%s),' - % ( padInstance.getMasterCell().getName() - , padInstance.getName(), str(padInstance.getTransformation()) ) - , 'connector "%s" has no suitable segment for net "%s".' - % ( str(padNet) - , chipIntNet.getName() ) - ] ) - - return count - - - def _placeInnerCorona ( self ): - rg = self.conf.gaugeConf.routingGauge - - coronaSouthGap = 0 - for layerGauge in rg.getLayerGauges(): - self.southSide.gap = max( self.southSide.gap, layerGauge.getPitch() * 6 ) - self.northSide.gap = self.southSide.gap - self.eastSide.gap = self.southSide.gap - self.westSide.gap = self.southSide.gap - - for coronaPlug in self.conf.icorona.getPlugs(): - chipIntNet = coronaPlug.getNet() - if not chipIntNet: - raise ErrorMessage( 1, 'PadsCorona._placeInnerCorona(): Corona net "%s" is not connected to a pad.' \ - % coronaPlug.getMasterNet().getName() ) - continue - - padConnected = 0 - doneInstances = [] - for chipPlug in chipIntNet.getPlugs(): - doneInstances.append( chipPlug.getInstance() ) - padNet = chipPlug.getMasterNet() - padConnected = self._createCoreWire( chipIntNet, padNet, doneInstances[-1], padConnected ) - - if chipIntNet.isGlobal(): - for instance in self.conf.cell.getInstances(): - if instance in doneInstances: continue - doneInstances.append( instance ) - - padNet = instance.getMasterCell().getNet( chipIntNet.getName() ) - if not padNet: continue - - padConnected = self._createCoreWire( chipIntNet, padNet, doneInstances[-1], padConnected ) - - if padConnected == 0: - raise ErrorMessage( 1, 'PadsCorona._placeInnerCorona(): Chip net "%s" is not connected to a pad.' \ - % chipIntNet.getName() ) - - self.conf.setupCorona( self.westSide.gap, self.southSide.gap, self.eastSide.gap, self.northSide.gap ) - - self.coreSymBb = self.conf.getInstanceAb( self.conf.icorona ) - self.coreSymBb.inflate( self.conf.toSymbolic( self.westSide.gap //2, Superior ) - , self.conf.toSymbolic( self.southSide.gap//2, Superior ) - , self.conf.toSymbolic( self.eastSide.gap //2, Inferior ) - , self.conf.toSymbolic( self.northSide.gap//2, Inferior ) ) - - self.southSide.drawCoreWires() - self.northSide.drawCoreWires() - self.eastSide .drawCoreWires() - self.westSide .drawCoreWires() - - if len(self.southSide.coreWires) \ - and len(self.westSide .coreWires) \ - and not self.southSide.coreWires[0].inCoronaRange \ - and not self.westSide .coreWires[0].inCoronaRange: - print( ErrorMessage( 1, [ 'Corona._placeInnerCorona(): Both pads on south-east corner are outside corona range.' - , 'This will generate a short-circuit between S:"{}" and W:"{}".' \ - .format( self.southSide.coreWires[0].chipNet.getName() - , self.westSide .coreWires[0].chipNet.getName()) ] )) - - if len(self.southSide.coreWires) \ - and len(self.eastSide .coreWires) \ - and not self.southSide.coreWires[-1].inCoronaRange \ - and not self.eastSide .coreWires[ 0].inCoronaRange: - print( ErrorMessage( 1, [ 'Corona._placeInnerCorona(): Both pads on south-west corner are outside corona range.' - , 'This will generate a short-circuit between S:"{}" and E:"{}".' \ - .format( self.southSide.coreWires[-1].chipNet.getName() - , self.eastSide .coreWires[ 0].chipNet.getName()) ] )) - - if len(self.northSide.coreWires) \ - and len(self.westSide .coreWires) \ - and not self.northSide.coreWires[ 0].inCoronaRange \ - and not self.westSide .coreWires[-1].inCoronaRange: - print( ErrorMessage( 1, [ 'Corona._placeInnerCorona(): Both pads on north-east corner are outside corona range.' - , 'This will generate a short-circuit between N:"{}" and W:"{}".' \ - .format( self.northSide.coreWires[ 0].chipNet.getName() - , self.westSide .coreWires[-1].chipNet.getName()) ] )) - - if len(self.northSide.coreWires) \ - and len(self.eastSide .coreWires) \ - and not self.northSide.coreWires[-1].inCoronaRange \ - and not self.eastSide .coreWires[-1].inCoronaRange: - print( ErrorMessage( 1, [ 'Corona._placeInnerCorona(): Both pads on north-west corner are outside corona range.' - , 'This will generate a short-circuit between N:"{}" and E:"{}".' \ - .format( self.northSide.coreWires[-1].chipNet.getName() - , self.eastSide .coreWires[-1].chipNet.getName()) ] )) - return - - -# def _locatePadRails ( self ): -# if not self.clockPad: -# print( ErrorMessage( 1, 'There must be at least one pad of model "%s" to guess the pad rails.' \ -# .format(self.pckName) )) -# return False -# -# for plug in self.clockPad.getPlugs(): -# masterNet = plug.getMasterNet() -# netType = masterNet.getType() -# net = plug.getNet() -# -# if netType != Net.Type.POWER \ -# and netType != Net.Type.GROUND \ -# and netType != Net.Type.CLOCK: -# continue -# -# if not net: -# net = self.cell.getNet( masterNet.getName() ) -# if not net: -# print ErrorMessage( 1, 'Missing global net <%s> at chip level.' % masterNet.getName() ) -# continue -# -# for component in masterNet.getExternalComponents(): -# if not isinstance(component,Horizontal): continue -# xs = component.getSourcePosition().getX() -# xt = component.getTargetPosition().getX() -# if xs < xt: length = xt - xs -# else: length = xs - xt -# if length < self.padWidth*.6: continue -# -# self._powerRails.append( [ net, component.getLayer(), component.getY(), component.getWidth() ] ) -# -# self._powerRails.sort( key=itemgetter(2) ) -# -# #for rail in self._powerRails: -# # print 'Pad rail %s @%d width:%d layer:%s' % ( str(rail[0].getName()) -# # , DbU.toLambda(rail[2]) -# # , DbU.toLambda(rail[3]) -# # , str(rail[1].getName()) -# # ) -# return -# -# def _guessPadHvLayers ( self ): -# if not self.powerPad: -# print ErrorMessage( 1, 'There must be at least one pad of model "%s" to guess the pad power terminals.' \ -# % self.pvddick ) -# return False -# -# availableDepths = set() -# masterCell = self.powerPad.getMasterCell() -# for component in masterCell.getNet('vddi').getExternalComponents(): -# if component.getBoundingBox().getYMin() <= masterCell.getAbutmentBox().getYMin(): -# availableDepths.add( self.routingGauge.getLayerDepth(component.getLayer()) ) -# -# #print 'available depth:', availableDepths -# -# self._horizontalPadDepth = 0 -# self._verticalPadDepth = 0 -# for depth in range(0,self.topLayerDepth+1): -# if not depth in availableDepths: continue -# -# if self.routingGauge.getLayerGauge(depth).getDirection() == RoutingLayerGauge.Horizontal: -# self._horizontalPadDepth = depth -# if self.routingGauge.getLayerGauge(depth).getDirection() == RoutingLayerGauge.Vertical: -# self._verticalPadDepth = depth -# -# #print 'h:', self._horizontalPadDepth -# #print 'v:', self._verticalPadDepth -# return - - - def doLayout ( self ): - if not self.validated: return - UpdateSession.open() - self.conf.cell.setAbutmentBox( self.conf.chipSize ) - - for corner in self.corners.values(): - corner.doLayout() - - self.northSide.doLayout() - self.southSide.doLayout() - self.eastSide.doLayout() - self.westSide.doLayout() - self._placeInnerCorona() - self.conf.chip.setRouted( True ) - - UpdateSession.close() - return diff --git a/deprecated/cumulus/src/plugins/chipplace.py b/deprecated/cumulus/src/plugins/chipplace.py deleted file mode 100644 index 68153d2b..00000000 --- a/deprecated/cumulus/src/plugins/chipplace.py +++ /dev/null @@ -1,57 +0,0 @@ - -# This file is part of the Coriolis Software. -# Copyright (c) Sorbonne Université 2014-2021, All Rights Reserved -# -# +-----------------------------------------------------------------+ -# | C O R I O L I S | -# | C u m u l u s - P y t h o n T o o l s | -# | | -# | Author : Jean-Paul CHAPUT | -# | E-mail : Jean-Paul.Chaput@lip6.fr | -# | =============================================================== | -# | Python : "./plugins/chipplace.py" | -# +-----------------------------------------------------------------+ - - -import sys -import traceback -import helpers -from helpers.io import ErrorMessage -from helpers.io import WarningMessage -import plugins -import plugins.chip.chip - - -# -------------------------------------------------------------------- -# Plugin hook functions, unicornHook:menus, ScritMain:call - -def unicornHook ( **kw ): - kw['beforeAction'] = 'placeAndRoute.stepByStep' - #kw['beforeAction'] = 'placeAndRoute.clockTree' - plugins.kwAddMenu ( 'placeAndRoute', 'P&&R', **kw ) - plugins.kwUnicornHook( 'placeAndRoute.placeChip' - , 'PLace Chip' - , 'Place a Complete Chip (pads && core)' - , sys.modules[__name__].__file__ - , **kw - ) - return - - -def scriptMain ( **kw ): - rvalue = True - try: - #helpers.setTraceLevel( 550 ) - cell, editor = plugins.kwParseMain( **kw ) - conf = plugins.chip.configuration.loadConfiguration( cell, editor ) - conf.chipValidate() - if not conf.validated: return False - placeChip = plugins.chip.chip.PlaceRoute( conf ) - placeChip.doChipPlacement() - return placeChip.validated - except Exception as e: - helpers.io.catch( e ) - rvalue = False - sys.stdout.flush() - sys.stderr.flush() - return rvalue diff --git a/deprecated/cumulus/src/plugins/chiproute.py b/deprecated/cumulus/src/plugins/chiproute.py deleted file mode 100644 index 603c11ef..00000000 --- a/deprecated/cumulus/src/plugins/chiproute.py +++ /dev/null @@ -1,64 +0,0 @@ - -# This file is part of the Coriolis Software. -# Copyright (c) Sorbonne Université 2014-2021, All Rights Reserved -# -# +-----------------------------------------------------------------+ -# | C O R I O L I S | -# | C u m u l u s - P y t h o n T o o l s | -# | | -# | Author : Jean-Paul CHAPUT | -# | E-mail : Jean-Paul.Chaput@lip6.fr | -# | =============================================================== | -# | Python : "./plugins/chiproute.py" | -# +-----------------------------------------------------------------+ - - -import sys -import traceback -import Viewer -import helpers -from helpers.io import ErrorMessage -from helpers.io import WarningMessage -import plugins -import plugins.chip.chip -from Hurricane import Breakpoint - - -# -------------------------------------------------------------------- -# Plugin hook functions, unicornHook:menus, ScritMain:call - -def unicornHook ( **kw ): - kw['beforeAction'] = 'placeAndRoute.stepByStep' - #kw['beforeAction'] = 'placeAndRoute.placeChip' - - plugins.kwAddMenu ( 'placeAndRoute', 'P&&R', **kw ) - plugins.kwUnicornHook( 'placeAndRoute.placeRouteChip' - , 'PLace && Route Chip' - , 'Place & route a Complete Chip (pads && core)' - , sys.modules[__name__].__file__ - , **kw - ) - return - - -def scriptMain ( **kw ): - rvalue = True - try: - Breakpoint.setStopLevel( 99 ) - helpers.setTraceLevel( 550 ) - cell, editor = plugins.kwParseMain( **kw ) - conf = plugins.chip.configuration.loadConfiguration( cell, editor ) - conf.chipValidate() - if not conf.validated: return False - prChip = plugins.chip.chip.PlaceRoute( conf ) - prChip.validate() - prChip.doChipPlacement() - prChip.doChipRouting() - prChip.save() - return prChip.validated - except Exception as e: - helpers.io.catch( e ) - rvalue = False - sys.stdout.flush() - sys.stderr.flush() - return rvalue diff --git a/deprecated/cumulus/src/plugins/clocktree.py b/deprecated/cumulus/src/plugins/clocktree.py deleted file mode 100644 index cee90872..00000000 --- a/deprecated/cumulus/src/plugins/clocktree.py +++ /dev/null @@ -1,90 +0,0 @@ - -# This file is part of the Coriolis Software. -# Copyright (c) Sorbonne Université 2014-2021, All Rights Reserved -# -# +-----------------------------------------------------------------+ -# | C O R I O L I S | -# | C u m u l u s - P y t h o n T o o l s | -# | | -# | Author : Jean-Paul CHAPUT | -# | E-mail : Jean-Paul.Chaput@lip6.fr | -# | =============================================================== | -# | Python : "./plugins/clocktreeplugin.py" | -# +-----------------------------------------------------------------+ - -import sys -import traceback -import os.path -import math -import Cfg -import Hurricane -from Hurricane import Breakpoint -from Hurricane import UpdateSession -import Viewer -import CRL -from CRL import RoutingLayerGauge -import helpers -from helpers import trace -from helpers.io import ErrorMessage -import Etesian -import Unicorn -import plugins -from plugins.cts.clocktree import HTree -from plugins.cts.clocktree import computeAbutmentBox -from plugins.chip.configuration import ChipConf - - -# -------------------------------------------------------------------- -# Plugin hook functions, unicornHook:menus, ScritMain:call - -def unicornHook ( **kw ): - kw['beforeAction'] = 'placeAndRoute.placeChip' - plugins.kwAddMenu ( 'placeAndRoute', 'P&&R', **kw ) - plugins.kwUnicornHook( 'placeAndRoute.clockTree' - , 'Place Block && Clock Tree' - , 'Place a block with a buffered H-Tree for the clock' - , sys.modules[__name__].__file__ - , **kw - ) - return - - -def scriptMain ( **kw ): - try: - #helpers.setTraceLevel( 550 ) - errorCode = 0 - print( ' o Cleaning up any previous run.' ) - for fileName in os.listdir('.'): - if fileName.endswith('.ap'): - print( ' - "{}"'.format(fileName) ) - os.unlink(fileName) - cell = None - if ('cell' in kw) and kw['cell']: - cell = kw['cell'] - editor = None - if ('editor' in kw) and kw['editor']: - editor = kw['editor'] - print( ' o Editor detected, running in graphic mode.' ) - if cell == None: cell = editor.getCell() - if cell == None: - raise ErrorMessage( 3, 'ClockTree: No cell loaded yet.' ) - conf = ChipConf( {}, cell, editor ) - if cell.getAbutmentBox().isEmpty(): - spaceMargin = Cfg.getParamPercentage('etesian.spaceMargin').asPercentage() / 100.0 + 0.01 - aspectRatio = Cfg.getParamPercentage('etesian.aspectRatio').asPercentage() / 100.0 - computeAbutmentBox( cell, spaceMargin, aspectRatio, conf.cellGauge ) - if editor: editor.fit() - ht = HTree.create( conf, cell, None, cell.getAbutmentBox() ) - if editor: editor.refresh() - etesian = Etesian.EtesianEngine.create( cell ) - etesian.place() - ht.connectLeaf() - #ht.prune() - ht.route() - etesian.toHurricane() - etesian.flattenPower() - etesian.destroy() - ht.save( cell ) - except Exception as e: - helpers.io.catch( e ) - return 0 diff --git a/deprecated/cumulus/src/plugins/core2chip/__init__.py b/deprecated/cumulus/src/plugins/core2chip/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/deprecated/cumulus/src/plugins/core2chip/cmos.py b/deprecated/cumulus/src/plugins/core2chip/cmos.py deleted file mode 100644 index 847dc379..00000000 --- a/deprecated/cumulus/src/plugins/core2chip/cmos.py +++ /dev/null @@ -1,155 +0,0 @@ - -# -*- coding: utf-8 -*- -# -# This file is part of the Coriolis Software. -# Copyright (c) Sorbonne Université 2019-2021, All Rights Reserved -# -# +-----------------------------------------------------------------+ -# | C O R I O L I S | -# | C u m u l u s - P y t h o n T o o l s | -# | | -# | Author : Jean-Paul CHAPUT | -# | E-mail : Jean-Paul.Chaput@lip6.fr | -# | =============================================================== | -# | Python : "./plugins/core2chip/cmos.py" | -# +-----------------------------------------------------------------+ - -import sys -import re -from Hurricane import DbU -from Hurricane import DataBase -from Hurricane import UpdateSession -from Hurricane import Breakpoint -from Hurricane import Transformation -from Hurricane import Instance -from Hurricane import Net -import Viewer -from CRL import Catalog -from CRL import AllianceFramework -from helpers.io import ErrorMessage -from plugins.core2chip.core2chip import IoPad -from plugins.core2chip.core2chip import CoreToChip - - -class cmos ( CoreToChip ): - - def __init__ ( self, core ): - CoreToChip.__init__ ( self, core ) - self.ringNetNames = [ 'vsse', 'vssi', 'vdde', 'vddi', ('cki', 'ck') ] - self.ioPadInfos = { IoPad.IN : CoreToChip.IoPadInfo( 'pi_px' , 'pad', ['t',] ) - , IoPad.OUT : CoreToChip.IoPadInfo( 'po_px' , 'pad', ['i',] ) - , IoPad.TRI_OUT : CoreToChip.IoPadInfo( 'pot_px' , 'pad', ['i', 'b' ] ) - , IoPad.BIDIR : CoreToChip.IoPadInfo( 'piot_px', 'pad', ['i', 't', 'b' ] ) - } - self._getPadLib() - return - - def _getPadLib ( self ): - self.padLib = AllianceFramework.get().getLibrary( "pxlib" ) - - if not self.padLib: - message = [ 'CoreToChip.cmos._getPadLib(): Unable to find Alliance "pxlib" library' ] - raise ErrorMessage( 1, message ) - - return - - def getNetType ( self, netName ): - if netName.startswith('vss'): return Net.Type.GROUND - if netName.startswith('vdd'): return Net.Type.POWER - if netName in ('cki', 'ck'): return Net.Type.CLOCK - return Net.Type.LOGICAL - - def isGlobal ( self, netName ): - if netName in self.ringNetNames: return True - return False - - def getCell ( self, masterCellName ): - #cell = self.padLib.getCell( masterCellName ) - cell = AllianceFramework.get().getCell( masterCellName, Catalog.State.Views ) - if not cell: - raise ErrorMessage( 1, 'cmos.getCell(): I/O pad library "%s" does not contain cell named "%s"' \ - % (self.padLib.getName(),masterCellName) ) - return cell - - def _buildGroundPads ( self, ioNet ): - ioNet.buildNets() - vssi = self.chip.getNet( 'vssi' ) - vssi.setExternal( True ) - vssi.setGlobal ( True ) - vssi.setType ( Net.Type.GROUND ) - vssi.merge( ioNet.chipIntNet ) - ioNet.chipIntNet = vssi - - vsse = self.chip.getNet( 'vsse' ) - vsse.setExternal( True ) - vsse.setGlobal ( True ) - vsse.setType ( Net.Type.GROUND ) - vsse.merge( ioNet.chipExtNet ) - ioNet.chipExtNet = vsse - - pads = [] - pads.append( Instance.create( self.chip - , 'p_' + ioNet.padInstanceName + 'ick_%d' % self.groundPadCount - , self.getCell('pvssick_px') ) ) - pads.append( Instance.create( self.chip - , 'p_' + ioNet.padInstanceName + 'eck_%d' % self.groundPadCount - , self.getCell('pvsseck_px') ) ) - - CoreToChip._connect( pads[0], ioNet.chipIntNet, 'vssi' ) - CoreToChip._connect( pads[1], ioNet.chipExtNet, 'vsse' ) - - for pad in pads: self._connectRing( pad ) - self.groundPadCount += 1 - self.chipPads += pads - return - - def _buildPowerPads ( self, ioNet ): - ioNet.buildNets() - vddi = self.chip.getNet( 'vddi' ) - vddi.setExternal( True ) - vddi.setGlobal ( True ) - vddi.setType ( Net.Type.POWER ) - vddi.merge( ioNet.chipIntNet ) - ioNet.chipIntNet = vddi - - vdde = self.chip.getNet( 'vdde' ) - vdde.setExternal( True ) - vdde.setGlobal ( True ) - vdde.setType ( Net.Type.POWER ) - vdde.merge( ioNet.chipExtNet ) - ioNet.chipExtNet = vdde - - pads = [ ] - pads.append( Instance.create( self.chip - , 'p_' + ioNet.padInstanceName + 'ick_%d' % self.powerPadCount - , self.getCell('pvddick_px') ) ) - pads.append( Instance.create( self.chip - , 'p_' + ioNet.padInstanceName + 'eck_%d' % self.powerPadCount - , self.getCell('pvddeck_px') ) ) - - CoreToChip._connect( pads[0], ioNet.chipIntNet, 'vddi' ) - CoreToChip._connect( pads[1], ioNet.chipExtNet, 'vdde' ) - - for pad in pads: self._connectRing( pad ) - self.powerPadCount += 1 - self.chipPads += pads - return - - def _buildClockPads ( self, ioNet ): - ioNet.buildNets() - pads = [ ] - pads.append( Instance.create( self.chip - , 'p_' + ioNet.padInstanceName + '_%d' % self.clockPadCount - , self.getCell('pck_px') ) ) - - CoreToChip._connect( pads[0], ioNet.chipExtNet, 'pad' ) - - for pad in pads: self._connectRing( pad ) - self.clockPadCount += 1 - self.chipPads += pads - - p = re.compile( r'pv[ds]{2}[ei]ck_px' ) - for pad in self.chipPads: - if p.match( pad.getMasterCell().getName() ): - CoreToChip._connect( pad, ioNet.chipIntNet, 'cko' ) - return diff --git a/deprecated/cumulus/src/plugins/core2chip/core2chip.py b/deprecated/cumulus/src/plugins/core2chip/core2chip.py deleted file mode 100644 index 267a2abc..00000000 --- a/deprecated/cumulus/src/plugins/core2chip/core2chip.py +++ /dev/null @@ -1,451 +0,0 @@ - -# -*- coding: utf-8 -*- -# -# This file is part of the Coriolis Software. -# Copyright (c) Sorbonne Université 2019-2018, All Rights Reserved -# -# +-----------------------------------------------------------------+ -# | C O R I O L I S | -# | C u m u l u s - P y t h o n T o o l s | -# | | -# | Author : Jean-Paul CHAPUT | -# | E-mail : Jean-Paul.Chaput@lip6.fr | -# | =============================================================== | -# | Python : "./plugins/core2chip/core2chip.py" | -# +-----------------------------------------------------------------+ - -import re -from Hurricane import UpdateSession -from Hurricane import Net -from Hurricane import Instance -from CRL import Catalog -from CRL import AllianceFramework -from helpers import netDirectionToStr -from helpers.io import ErrorMessage -import plugins.chip - - -# ------------------------------------------------------------------- -# Class : "IoNet". - - -class IoNet ( object ): - - IsElem = 0x0001 - IsEnable = 0x0002 - DoExtNet = 0x0008 - reVHDLVector = re.compile( r'(?P[^(]*)\((?P[\d]+)\)$' ) - - def __init__ ( self, coreToChip, coreNet ): - self.coreToChip = coreToChip - self._flags = 0 - self._chipExtNetName = None # In the case of bidir pad, force external net name. - self.coreNet = coreNet - self.coronaNet = None # Corona net going from core to corona. - self.chipIntNet = None # Chip net going from corona to I/O pad. - self.chipExtNet = None # Chip net going from I/O pad to the outside world. - - m = IoNet.reVHDLVector.match( self.coreNet.getName() ) - if m: - self._flags |= IoNet.IsElem - self._name = m.group('name') - self._index = m.group('index') - else: - self._name = self.coreNet.getName() - self._index = 0 - - self._type = self.coreToChip.getNetType( self._name ) - return - - def __repr__ ( self ): - s = ' 1.5 or aspectRatio < 0.5: - raise ErrorMessage( 3, 'ClockTree: aspect ratio %f is disproportionate, must be between 0.5 and 1.5.' \ - % aspectRatio ) - - ht = HTree( conf, cell, clockNet, clockBox ) - print( ' o Creating clock H-Tree for "{}".'.format(cell.getName()) ) - print( ' - Clock is "{}"'.format(ht.masterClock.getName()) ) - ht.build() - trace( 550, '\tht.build() OK\n' ) - ht.place() - trace( 550, '\tht.place() OK\n' ) - #ht.route() - print( ' - H-Tree depth: {}'.format(ht.getTreeDepth()) ) - trace( 550, '\tusedVTracks: %s\n' % str(ht.usedVTracks) ) - return ht - - def __init__ ( self, conf, cell, clockNet, area ): - self.conf = conf - - self.minSide = Cfg.getParamInt('clockTree.minimumSide').asInt() - if self.minSide < DbU.fromLambda(100.0): - raise ErrorMessage( 3, 'ClockTree: clockTree.minimumSide (%g) is less than 100 lambda.' \ - % DbU.toLambda(self.minSide) ) - print( ' - Minimum side for clock area: {}'.format(DbU.toLambda(self.minSide)) ) - - UpdateSession.open() - self.framework = CRL.AllianceFramework.get() - self.cell = cell - self.area = area - self.childs = [] - self._getBufferIo() - self.tieCell = self.framework.getCell( 'rowend_x0', CRL.Catalog.State.Views ) - self.topBuffer = Instance.create( self.cell, 'ck_htree', self.bufferCell ) - self.cloneds = [ self.cell ] - self.usedVTracks = [] - self._feedCount = 0 - - self.masterClock = clockNet - if not self.masterClock: - for net in cell.getNets(): - if net.isClock(): - self.masterClock = net - break - if not self.masterClock: - raise ErrorMessage( 3, 'ClockTree: Cell %s has no clock net.' % cell.getName() ) - self._createChildNet( self.topBuffer, 'ck_htree' ) - UpdateSession.close() - - return - - def _getBufferIo ( self ): - self.bufferCell = self.framework.getCell( Cfg.getParamString('clockTree.buffer').asString() - , CRL.Catalog.State.Views ) - if not self.bufferCell: - raise ErrorMessage( 3, [ 'ClockTree: Buffer cell "%s" not found in library,' \ - % Cfg.getParamString('clockTree.buffer').asString() - , ' please check the "clockTree.buffer" configuration parameter in "plugins.conf".' ] ) - - for net in self.bufferCell.getNets(): - if not net.isExternal(): continue - if net.isGlobal(): continue - if net.getDirection() & Net.Direction.IN: self.bufferIn = net.getName() - elif net.getDirection() & Net.Direction.OUT: self.bufferOut = net.getName() - - trace( 550, '\tbufferIn :<%s>\n' % self.bufferIn ) - trace( 550, '\tbufferOut:<%s>\n' % self.bufferOut ) - return - - def _createChildNet ( self, ibuffer, tag ): - childNet = Net.create( self.cell, tag ) - childNet.setType( Net.Type.CLOCK ) - getPlugByName(ibuffer, self.bufferOut).setNet( childNet ) - return - - def feedCounter ( self ): - self._feedCount += 1 - return self._feedCount - - def toXCellGrid ( self, x ): return x - (x % self.conf.cellGauge.getSliceStep ()) - def toYCellGrid ( self, y ): return y - (y % self.conf.cellGauge.getSliceHeight()) - - def rpDistance ( self, rp1, rp2 ): - dx = abs( rp1.getX() - rp2.getX() ) - dy = abs( self.toYCellGrid(rp1.getY()) - self.toYCellGrid(rp2.getY()) ) - return dx+dy - - def placeInstance ( self, instance, x, y ): - xslice = self.toXCellGrid(x) - yslice = self.toYCellGrid(y) - - transformation = Transformation.Orientation.ID - if ((yslice-self.area.getYMin()) // self.conf.cellGauge.getSliceHeight()) % 2 != 0: - transformation = Transformation.Orientation.MY - yslice += self.conf.cellGauge.getSliceHeight() - - instance.setTransformation ( Transformation(xslice, yslice, transformation) ) - instance.setPlacementStatus( Instance.PlacementStatus.FIXED ) - return - - def destroyInstance ( self, instance ): - transformation = instance.getTransformation() - instanceWidth = instance.getMasterCell().getAbutmentBox().getWidth() - tieWidth = self.tieCell.getAbutmentBox().getWidth() - - instance.destroy() - x = transformation.getTx() - for i in range(instanceWidth//tieWidth): - feed = Instance.create( self.cell - , 'htree_feed_%i' % self.feedCounter() - , self.tieCell - , Transformation(x,transformation.getTy(),transformation.getOrientation()) - , Instance.PlacementStatus.PLACED - ) - x += tieWidth - return - - def getTreeDepth ( self ): - return self.childs[0].getTreeDepth() - - def getLeafBufferUnder ( self, point ): - return self.childs[0].getLeafBufferUnder( point ) - - def addLeaf ( self, point, plugOccurrence ): - self.childs[0].addLeaf( point, plugOccurrence ) - - def build ( self ): - self.childs.append( HTreeNode( self, self.topBuffer, self.area, '', HTreeNode.RootBranch ) ) - return - - def place ( self ): - UpdateSession.open() - center = self.area.getCenter() - self.placeInstance( self.topBuffer, center.getX(), center.getY() ) - trace( 550, '\rplace top level\n' ) - self.usedVTracks += [ getRpBb(self.topBuffer, self.bufferIn).getCenter().getX() ] - self.childs[0].place() - UpdateSession.close() - return - - def route ( self ): - UpdateSession.open() - self.childs[0].route() - UpdateSession.close() - return - - def prune ( self ): - UpdateSession.open() - self.childs[0].prune() - UpdateSession.close() - return - - def addCloned ( self, masterCell ): - if not masterCell in self.cloneds: self.cloneds.append( masterCell ) - return - - def addDeepPlug ( self, topNet, path ): - if path.isEmpty(): return None - - tailPath = path.getTailPath() - headInstance = path.getHeadInstance() - headPlug = getPlugByNet(headInstance,topNet) - if headPlug: - if tailPath.isEmpty(): return headPlug - return self.addDeepPlug( headPlug.getMasterNet(), tailPath ) - - masterCell = headInstance.getMasterCell() - masterNet = Net.create( masterCell, topNet.getName() ) - masterNet.setExternal ( True ) - masterNet.setType ( Net.Type.CLOCK ) - masterNet.setDirection( Net.Direction.IN ) - headPlug = headInstance.getPlug( masterNet ) - if not headPlug: - raise ErrorMessage( 3, 'Plug not created for %s on instance %s of %s' \ - % (topNet.getName(),headInstance.getName(),masterCell.getName()) ) - headPlug.setNet( topNet ) - self.addCloned( masterCell ) - - if tailPath.isEmpty(): return headPlug - return self.addDeepPlug( masterNet, tailPath ) - - def _RSMTtoLayout( self, mst, net ): - for node in mst.nodes: - if not node.component: - x = node.realX - if node.realX in self.usedVTracks: - x += self.conf.routingGauge.getLayerGauge(self.conf.verticalDeepDepth).getPitch() - # This is a Steiner point. - node.component = self.conf.createContact( net - , x - , node.y + self.conf.cellGauge.getSliceHeight()//2 - self.conf.routingGauge.getLayerGauge(self.horizontalDeepDepth).getPitch() - , GaugeConf.DeepDepth ) - trace( 550, '\tCreate (Steiner) node.component: @Y%d (y:%d - %d) %s\n' \ - % (DbU.toLambda(node.realY) - ,DbU.toLambda(node.y) - ,DbU.toLambda(self.conf.routingGauge.getLayerGauge(self.horizontalDeepDepth).getPitch()) - ,node.component) ) - else: - # This a terminal (graph) point - for edge in node.edges: - flags = GaugeConf.HAccess|GaugeConf.DeepDepth - if not edge.isHorizontal(): - if node.isSame(edge.source) or edge.isVertical(): - flags &= ~GaugeConf.HAccess - break - flags |= GaugeConf.OffsetTop1 - if node.realX in self.usedVTracks: - flags |= GaugeConf.OffsetRight1 - node.component = self.conf.rpAccess( node.component, flags ) - - for edge in mst.edges: - sourceContact = edge.source.component - targetContact = edge.target.component - - if edge.isHorizontal(): - self.createHorizontal( sourceContact, targetContact, targetContact.getY(), GaugeConf.DeepDepth ) - elif edge.isVertical(): - self.createVertical ( sourceContact, targetContact, sourceContact.getX(), GaugeConf.DeepDepth ) - else: - turn = self.conf.createContact( edge.source.component.getNet() - , sourceContact.getX() - , targetContact.getY() - , GaugeConf.DeepDepth ) - self.conf.createVertical ( sourceContact, turn, sourceContact.getX(), GaugeConf.DeepDepth ) - self.conf.createHorizontal( turn, targetContact, targetContact.getY(), GaugeConf.DeepDepth ) - return - - def _connectLeafs ( self, leafBuffer, leafs ): - trace( 550, ',+', '\tBuffer <%s> has %i leafs.\n' % (leafBuffer.getName(),len(leafs)) ) - #if len(leafs) == 0: return - # - #leafCk = getPlugByName(leafBuffer,self.bufferOut).getNet() - #bufferRp = self.rpByPlugName( leafBuffer, self.bufferOut, leafCk ) - # - #rsmt = RSMT( leafCk.getName() ) - #rsmt.addNode( bufferRp, bufferRp.getX(), self.toYCellGrid(bufferRp.getY()) ) - #for leaf in leafs: - # registerRp = self.rpByOccurrence( leaf, leafCk ) - # rsmt.addNode( registerRp, registerRp.getX(), self.toYCellGrid(registerRp.getY()) ) - # - #rsmt.runI1S() - #self._RSMTtoLayout( rsmt, leafCk ) - - trace( 550, '-' ) - return - - def connectLeaf ( self ): - trace( 550, '\tConnecting leafs.\n' ) - UpdateSession.open() - - leafsByBuffer = {} - hyperMasterClock = HyperNet.create( Occurrence(self.masterClock) ) - for plugOccurrence in hyperMasterClock.getTerminalNetlistPlugOccurrences(): - trace( 550, '\tAdding leaf <%s>.\n' % plugOccurrence ) - position = plugOccurrence.getBoundingBox().getCenter() - self.addLeaf( position, plugOccurrence ) - - self.childs[0].connectLeafs() - sys.stdout.flush() - - getPlugByName( self.topBuffer, self.bufferIn ).setNet( self.masterClock ) - UpdateSession.close() - - return - - def _rsave ( self, cell ): - flags = CRL.Catalog.State.Physical - if cell.getName().endswith('_cts'): - flags = flags | CRL.Catalog.State.Logical - self.framework.saveCell( cell, flags ) - - for instance in cell.getInstances(): - masterCell = instance.getMasterCell() - if not masterCell.isTerminal(): - self._rsave( masterCell ) - - def save ( self, topCell ): - for cell in self.cloneds: - cell.setName( cell.getName()+'_cts' ) - - self._rsave( topCell ) - return - - -class HTreeNode ( object ): - - RootBranch = 0x0001 - LeftBranch = 0x0002 - RightBranch = 0x0004 - UpBranch = 0x0008 - DownBranch = 0x0010 - - def __init__ ( self, topTree, sourceBuffer, area, prefix, flags ): - UpdateSession.open() - self.topTree = topTree - self.childs = [] - self.blLeafs = [] - self.brLeafs = [] - self.tlLeafs = [] - self.trLeafs = [] - self.flags = flags - self.sourceBuffer = sourceBuffer - self.area = area - self.prefix = prefix - - self.blBuffer = Instance.create( self.topTree.cell, 'ck_htree'+self.prefix+'_bl_ins', self.topTree.bufferCell ) - self.brBuffer = Instance.create( self.topTree.cell, 'ck_htree'+self.prefix+'_br_ins', self.topTree.bufferCell ) - self.tlBuffer = Instance.create( self.topTree.cell, 'ck_htree'+self.prefix+'_tl_ins', self.topTree.bufferCell ) - self.trBuffer = Instance.create( self.topTree.cell, 'ck_htree'+self.prefix+'_tr_ins', self.topTree.bufferCell ) - self.ckNet = getPlugByName(self.sourceBuffer, self.topTree.bufferOut).getNet() - getPlugByName(self.blBuffer, self.topTree.bufferIn).setNet( self.ckNet ) - getPlugByName(self.brBuffer, self.topTree.bufferIn).setNet( self.ckNet ) - getPlugByName(self.tlBuffer, self.topTree.bufferIn).setNet( self.ckNet ) - getPlugByName(self.trBuffer, self.topTree.bufferIn).setNet( self.ckNet ) - - self.topTree._createChildNet( self.blBuffer, 'ck_htree'+self.prefix+'_bl' ) - self.topTree._createChildNet( self.brBuffer, 'ck_htree'+self.prefix+'_br' ) - self.topTree._createChildNet( self.tlBuffer, 'ck_htree'+self.prefix+'_tl' ) - self.topTree._createChildNet( self.trBuffer, 'ck_htree'+self.prefix+'_tr' ) - - halfWidth = self.area.getHalfWidth () - halfHeight = self.area.getHalfHeight() - if halfWidth >= self.topTree.minSide and halfHeight >= self.topTree.minSide: - # Recursive call. - self.childs.append( HTreeNode( self.topTree, self.blBuffer, self.blArea(), self.prefix+'_bl', 0 ) ) - self.childs.append( HTreeNode( self.topTree, self.brBuffer, self.brArea(), self.prefix+'_br', 0 ) ) - self.childs.append( HTreeNode( self.topTree, self.tlBuffer, self.tlArea(), self.prefix+'_tl', 0 ) ) - self.childs.append( HTreeNode( self.topTree, self.trBuffer, self.trArea(), self.prefix+'_tr', 0 ) ) - - UpdateSession.close() - return - - def xmin ( self ): return self.area.getXMin() - def xmax ( self ): return self.area.getXMax() - def ymin ( self ): return self.area.getYMin() - def ymax ( self ): return self.area.getYMax() - def halfWidth ( self ): return self.area.getHalfWidth() - def halfHeight( self ): return self.area.getHalfHeight() - - def blArea ( self ): - return Box( self.xmin() , self.ymin() - , self.xmin()+self.halfWidth(), self.ymin()+self.halfHeight() ) - - def brArea ( self ): - return Box( self.xmin()+self.halfWidth(), self.ymin() - , self.xmax() , self.ymin()+self.halfHeight() ) - - def tlArea ( self ): - return Box( self.xmin() , self.ymin()+self.halfHeight() - , self.xmin()+self.halfWidth(), self.ymax() ) - - def trArea ( self ): - return Box( self.xmin()+self.halfWidth(), self.ymin()+self.halfHeight() - , self.xmax() , self.ymax() ) - - def getTreeDepth ( self ): - if self.childs: return self.childs[0].getTreeDepth()+1 - return 1 - - def hasLeafs ( self ): - hasLeafsFlag = False - if self.childs: - hasLeafsFlag |= self.childs[0].hasLeafs() - hasLeafsFlag |= self.childs[1].hasLeafs() - hasLeafsFlag |= self.childs[2].hasLeafs() - hasLeafsFlag |= self.childs[3].hasLeafs() - return hasLeafsFlag - - hasLeafsFlag |= (len(self.blLeafs) != 0) - hasLeafsFlag |= (len(self.brLeafs) != 0) - hasLeafsFlag |= (len(self.tlLeafs) != 0) - hasLeafsFlag |= (len(self.trLeafs) != 0) - return hasLeafsFlag - - def addLeaf ( self, point, plugOccurrence ): - if self.childs: - if self.blArea().contains(point): self.childs[0].addLeaf( point, plugOccurrence ) - elif self.brArea().contains(point): self.childs[1].addLeaf( point, plugOccurrence ) - elif self.tlArea().contains(point): self.childs[2].addLeaf( point, plugOccurrence ) - else: self.childs[3].addLeaf( point, plugOccurrence ) - return - - leafBuffer = None - if self.blArea().contains(point): - self.blLeafs.append( plugOccurrence ) - leafBuffer = self.blBuffer - elif self.brArea().contains(point): - self.brLeafs.append( plugOccurrence ) - leafBuffer = self.brBuffer - elif self.tlArea().contains(point): - self.tlLeafs.append( plugOccurrence ) - leafBuffer = self.tlBuffer - else: - self.trLeafs.append( plugOccurrence ) - leafBuffer = self.trBuffer - - leafCk = getPlugByName(leafBuffer,self.topTree.bufferOut).getNet() - deepPlug = self.topTree.addDeepPlug( leafCk, plugOccurrence.getPath() ) - if deepPlug: - leafCk = deepPlug.getMasterNet() - plugOccurrence.getEntity().setNet( leafCk ) - - trace( 550, '\tLeaf clock set to <%s>.\n' % plugOccurrence.getEntity() ) - - return - - def getLeafBufferUnder ( self, point ): - if self.childs: - if self.blArea().contains(point): return self.childs[0].getLeafBufferUnder(point) - if self.brArea().contains(point): return self.childs[1].getLeafBufferUnder(point) - if self.tlArea().contains(point): return self.childs[2].getLeafBufferUnder(point) - if self.trArea().contains(point): return self.childs[3].getLeafBufferUnder(point) - - if self.blArea().contains(point): return self.blBuffer - if self.brArea().contains(point): return self.brBuffer - if self.tlArea().contains(point): return self.tlBuffer - return self.trBuffer - - def place ( self ): - trace( 550, '\rplace HTreeNode %s\n' % self.ckNet.getName() ) - x = self.area.getXMin() + self.area.getWidth ()//4 - y = self.area.getYMin() + self.area.getHeight()//4 - halfWidth = self.area.getHalfWidth () - halfHeight = self.area.getHalfHeight() - - self.topTree.placeInstance( self.blBuffer, x , y ) - self.topTree.placeInstance( self.brBuffer, x+halfWidth, y ) - self.topTree.placeInstance( self.tlBuffer, x , y+halfHeight ) - self.topTree.placeInstance( self.trBuffer, x+halfWidth, y+halfHeight ) - - self.topTree.usedVTracks += \ - [ self.topTree.conf.rpAccessByPlugName( self.blBuffer, self.topTree.bufferIn, self.ckNet ).getX() - , self.topTree.conf.rpAccessByPlugName( self.brBuffer, self.topTree.bufferIn, self.ckNet ).getX() ] - - for child in self.childs: child.place() - return - - def route ( self ): - trace( 550, '\tHTreeNode.route() %s\n' % self.sourceBuffer.getName() ) - - leftSourceContact = self.topTree.conf.rpAccessByPlugName( self.sourceBuffer, self.topTree.bufferOut, self.ckNet , GaugeConf.HAccess|GaugeConf.OffsetBottom1 ) - rightSourceContact = self.topTree.conf.rpAccessByPlugName( self.sourceBuffer, self.topTree.bufferOut, self.ckNet , GaugeConf.HAccess|GaugeConf.OffsetBottom1 ) - blContact = self.topTree.conf.rpAccessByPlugName( self.blBuffer , self.topTree.bufferIn , self.ckNet ) - brContact = self.topTree.conf.rpAccessByPlugName( self.brBuffer , self.topTree.bufferIn , self.ckNet ) - tlContact = self.topTree.conf.rpAccessByPlugName( self.tlBuffer , self.topTree.bufferIn , self.ckNet ) - trContact = self.topTree.conf.rpAccessByPlugName( self.trBuffer , self.topTree.bufferIn , self.ckNet ) - leftContact = self.topTree.conf.createContact( self.ckNet, blContact.getX(), leftSourceContact.getY() ) - rightContact = self.topTree.conf.createContact( self.ckNet, brContact.getX(), rightSourceContact.getY() ) - - leftSourceX = self.topTree.conf.getNearestVerticalTrack ( self.topTree.area, leftSourceContact.getX(), 0 ) - leftSourceY = self.topTree.conf.getNearestHorizontalTrack( self.topTree.area, leftSourceContact.getY(), 0 ) - rightSourceX = self.topTree.conf.getNearestVerticalTrack ( self.topTree.area, rightSourceContact.getX(), 0 ) - rightSourceY = self.topTree.conf.getNearestHorizontalTrack( self.topTree.area, rightSourceContact.getY(), 0 ) - leftX = self.topTree.conf.getNearestVerticalTrack ( self.topTree.area, leftContact.getX(), 0 ) - rightX = self.topTree.conf.getNearestVerticalTrack ( self.topTree.area, rightContact.getX(), 0 ) - tlY = self.topTree.conf.getNearestHorizontalTrack( self.topTree.area, tlContact.getY(), 0 ) - blY = self.topTree.conf.getNearestHorizontalTrack( self.topTree.area, blContact.getY(), 0 ) - - self.topTree.conf.setStackPosition( leftSourceContact, leftSourceX, leftSourceY ) - self.topTree.conf.setStackPosition( rightSourceContact, rightSourceX, rightSourceY ) - self.topTree.conf.setStackPosition( tlContact, leftX, tlY ) - self.topTree.conf.setStackPosition( blContact, leftX, blY ) - self.topTree.conf.setStackPosition( trContact, rightX, tlY ) - self.topTree.conf.setStackPosition( brContact, rightX, blY ) - - leftContact .setX( leftX ) - leftContact .setY( leftSourceY ) - rightContact.setX( rightX ) - rightContact.setY( rightSourceY ) - - self.topTree.conf.createHorizontal( leftContact , leftSourceContact, leftSourceY , 0 ) - self.topTree.conf.createHorizontal( rightSourceContact, rightContact , rightSourceY, 0 ) - self.topTree.conf.createVertical ( leftContact , blContact , leftX , 0 ) - self.topTree.conf.createVertical ( tlContact , leftContact , leftX , 0 ) - self.topTree.conf.createVertical ( rightContact , brContact , rightX , 0 ) - self.topTree.conf.createVertical ( trContact , rightContact , rightX , 0 ) - - for child in self.childs: child.route() - return - - def connectLeafs ( self ): - if not self.hasLeafs(): - trace( 550, '\tHTreeNode.connectLeafs() %s has no leafs\n' % self.sourceBuffer.getName() ) - - if self.childs: - self.childs[0].connectLeafs() - self.childs[1].connectLeafs() - self.childs[2].connectLeafs() - self.childs[3].connectLeafs() - return - - if len(self.blLeafs): self.topTree._connectLeafs( self.blBuffer, self.blLeafs ) - if len(self.brLeafs): self.topTree._connectLeafs( self.brBuffer, self.brLeafs ) - if len(self.tlLeafs): self.topTree._connectLeafs( self.tlBuffer, self.tlLeafs ) - if len(self.trLeafs): self.topTree._connectLeafs( self.trBuffer, self.trLeafs ) - return - - def prune ( self ): - for child in self.childs: child.prune() - if self.hasLeafs(): return - - destroyNetComponents( self.ckNet ) - - self.topTree.destroyInstance( self.blBuffer ) - self.topTree.destroyInstance( self.brBuffer ) - self.topTree.destroyInstance( self.tlBuffer ) - self.topTree.destroyInstance( self.trBuffer ) - return - - -def computeAbutmentBox ( cell, spaceMargin, aspectRatio, cellGauge ): - # sliceHeight = DbU.toLambda( cellGauge.getSliceHeight() ) - # - # instancesNb = 0 - # cellLength = 0 - # for occurrence in cell.getTerminalNetlistInstanceOccurrences(): - # instance = occurrence.getEntity() - # instancesNb += 1 - # cellLength += int( DbU.toLambda(instance.getMasterCell().getAbutmentBox().getWidth()) ) - # - # # ar = x//y S = x*y = spaceMargin*SH x=S//y ar = S//y^2 - # # y = sqrt(S//AR) - # gcellLength = float(cellLength)*(1+spaceMargin) // sliceHeight - # rows = math.sqrt( gcellLength//aspectRatio ) - # if math.trunc(rows) != rows: rows = math.trunc(rows) + 1 - # else: rows = math.trunc(rows) - # columns = gcellLength // rows - # if math.trunc(columns) != columns: columns = math.trunc(columns) + 1 - # else: columns = math.trunc(columns) - # - # print ' o Creating abutment box (margin:%.1f%%, aspect ratio:%.1f%%, g-length:%.1fl)' \ - # % (spaceMargin*100.0,aspectRatio*100.0,(cellLength//sliceHeight)) - # print ' - GCell grid: [%dx%d]' % (columns,rows) - - UpdateSession.open() - etesian = Etesian.EtesianEngine.create( cell ) - etesian.setDefaultAb() - etesian.destroy() - - #abutmentBox = Box( DbU.fromLambda(0) - # , DbU.fromLambda(0) - # , DbU.fromLambda(columns*sliceHeight) - # , DbU.fromLambda(rows *sliceHeight) - # ) - #cell.setAbutmentBox( abutmentBox ) - UpdateSession.close() - - return cell.getAbutmentBox() diff --git a/deprecated/cumulus/src/plugins/cts/rsmt.py b/deprecated/cumulus/src/plugins/cts/rsmt.py deleted file mode 100644 index d33a66ec..00000000 --- a/deprecated/cumulus/src/plugins/cts/rsmt.py +++ /dev/null @@ -1,363 +0,0 @@ - -# This file is part of the Coriolis Software. -# Copyright (c) Sorbonne Université 2014-2021, All Rights Reserved -# -# +-----------------------------------------------------------------+ -# | C O R I O L I S | -# | C u m u l u s - P y t h o n T o o l s | -# | | -# | Author : Jean-Paul CHAPUT | -# | E-mail : Jean-Paul.Chaput@lip6.fr | -# | =============================================================== | -# | Python : "./plugins/clocktree/rsmt.py" | -# +-----------------------------------------------------------------+ - - -import sys -import Cfg -import Hurricane -from Hurricane import DbU -from Hurricane import Box -from Hurricane import Path -from Hurricane import Occurrence -from Hurricane import UpdateSession -from Hurricane import Breakpoint -from Hurricane import Net -from Hurricane import RoutingPad -from Hurricane import Contact -from Hurricane import Horizontal -from Hurricane import Vertical -from Hurricane import Instance -import Viewer -import CRL -from CRL import RoutingLayerGauge -import helpers -from helpers import trace -from helpers.io import ErrorMessage -import plugins - - -def manhattanDistance ( node1, node2 ): - return abs(node1.x - node2.x) + abs(node1.y - node2.y) - - -class Node ( object ): - - GraphPoint = 0x0001 - SteinerPoint = 0x0002 - KeepPoint = 0x0004 - - @staticmethod - def showNodes ( level, nodes ): - for node in nodes: - trace( level, node ) - return - - def __init__ ( self, component, x, y, flags=0 ): - self._component = component - self._edges = [ ] - self._x = x - self._y = y - self._realY = y - self._back = None - self._distance = DbU.fromLambda(1000.0) - self._flags = flags - - if component: self._flags = self._flags|Node.GraphPoint|Node.KeepPoint - else: self._flags = self._flags|Node.SteinerPoint - return - - def __cmp__ ( self, other ): - return self.distance - other.distance - - def __str__ ( self ): - return '' % ( DbU.toLambda(self.x) - , DbU.toLambda(self.y) - , DbU.toLambda(self.realY) - , DbU.toLambda(self.distance) - , str(self.component) - ) - - @property - def component ( self ): return self._component - @property - def x ( self ): return self._x - @property - def y ( self ): return self._y - @property - def realX ( self ): return self._x - @property - def realY ( self ): return self._realY - @property - def back ( self ): return self._back - @property - def distance ( self ): return self._distance - @property - def flags ( self ): return self._flags - @property - def edges ( self ): return self._edges - @property - def degree ( self ): return len(self._edges) - @component.setter - def component ( self, component ): self._component = component - @realY.setter - def realY ( self, y ): self._realY = y - - def setFlags ( self, flags ): self._flags = self._flags | flags - def unsetFlags ( self, flags ): self._flags = self._flags & ~flags - - def addEdge ( self, edge ): self._edges.append( edge ) - def delEdge ( self, edge ): - for i in range(len(self._edges)): - if self._edges[i] == edge: - del self._edges[i] - return - - def isSame ( self, other ): return id(self) == id(other) - - def update ( self, node ): - distance = manhattanDistance( self, node ) - if distance < self.distance: - self._distance = distance - self._back = node - return True - return False - - -class Edge ( object ): - - def __init__ ( self, source, target ): - self._source = source - self._target = target - self._length = manhattanDistance( self._source, self._target ) - self._source.addEdge( self ) - self._target.addEdge( self ) - return - - def __del__ ( self ): - self._source.delEdge( self ) - self._target.delEdge( self ) - return - - def __str__ ( self ): - return '' % ( DbU.toLambda(self.source.x) - , DbU.toLambda(self.source.y) - , DbU.toLambda(self.target.x) - , DbU.toLambda(self.target.y) - , DbU.toLambda(self.length) - ) - - @property - def source ( self ): return self._source - @property - def target ( self ): return self._target - @property - def length ( self ): return self._length - - def isHorizontal ( self ): return self.source.y == self.target.y - def isVertical ( self ): return self.source.x == self.target.x - - -class Graph ( object ): - - def __init__ ( self, name ): - self._nodes = [ ] - self._edges = [ ] - self._length = 0 - self._name = name - return - - def __len__ ( self ): return self._length - - @property - def name ( self ): return self._name - @property - def length ( self ): return self._length - @property - def nodes ( self ): return self._nodes - @property - def edges ( self ): return self._edges - - def addNode ( self, component, x, y ): - self._nodes.append( Node( component, x, y ) ) - return self._nodes[-1] - - def copyNode ( self, node ): - self.addNode( node.component, node.x, node.y ) - self._nodes[-1].realY = node.realY - - def setNodes ( self, nodes ): - self.__init__( self.name ) - for node in nodes: - self.copyNode( node ) - return - - def showNodes ( self, level ): - trace( level, '+,+', '\tGraph Nodes:\n' ) - for node in self._nodes: - trace( level, node ) - trace(level, '--') - return - - def showEdges ( self, level ): - trace( level, '+,+', '\tGraph Edges:\n' ) - for edge in self._edges: - trace( level, edge ) - trace(level, '--') - return - - -class RMST ( Graph ): - - def __init__ ( self, name ): - Graph.__init__( self, name ) - return - - def runPrim ( self ): - self._edges = [ ] - self._length = 0 - - if len(self._nodes) < 2: return - if len(self._nodes) == 2: - self._edges.append( Edge( self._nodes[0], self._nodes[1] ) ) - self._length = self._edges[0].length - return - - trace(500, '+') - - toReach = [ ] - self._nodes[0]._distance = 0 - for node in self._nodes[1:]: - node.update( self._nodes[0] ) - toReach.append( node ) - toReach.sort() - - trace( 500, '+' , '\tPrim (initial stack)\n' ) - trace( 500, '+,+', '\tS %s\n' % self._nodes[0] ) - Node.showNodes( 500, toReach ) - trace( 500, '---' ) - - while len(toReach): - nearest = toReach.pop(0) - self._edges.append( Edge( nearest, nearest.back ) ) - trace( 500, '++,--', '\tAdding %s\n' % self._edges[-1] ) - - for node in toReach: - node.update( nearest ) - toReach.sort() - - trace( 500, '+' , '\tPrim (current stack)\n' ) - trace( 500, '+,+', '\tS %s\n' % self._nodes[0] ) - Node.showNodes( 500, toReach ) - trace( 500, '---' ) - - for edge in self._edges: - self._length += edge.length - - trace( 500, '-' ) - return - - -class RSMT ( Graph ): - - def __init__ ( self, name ): - Graph.__init__( self, name ) - self._hananNodes = [ ] - return - - def _computeHanan ( self ): - xs = [ ] - ys = [ ] - realYs = { } - for node in self._nodes: - if not node.x in xs: xs.append( node.x ) - if not node.y in xs: - ys.append( node.y ) - realYs[ node.y ] = node.component.getY() - xs.sort() - ys.sort() - - trace( 550, '+,+', '\tHanan matrix: %ix%i' % (len(xs),len(ys)) ) - - self._hananNodes = [ ] - for x in xs: - trace( 550, '\n' ) - trace( 550, '\t' ) - for y in ys: - isNode = False - for node in self._nodes: - if node.x == x and node.y == y: isNode = True - if isNode: - trace( 550, ' -:%04.2d,%04.2d' % (DbU.toLambda(x),DbU.toLambda(y)) ) - continue - trace( 550, ' H:%04.2d,%04.2d' % (DbU.toLambda(x),DbU.toLambda(y)) ) - - self._hananNodes.append( Node( None, x, y ) ) - self._hananNodes[-1].realY = realYs[ y ] - trace( 550, ',--', "\n" ) - return - - def addNode ( self, component, x, y ): - node = Graph.addNode( self, component, x, y ) - trace( 550, '\t New Node: %s\n' % node ) - return - - def runI1S ( self ): - self._edges = [ ] - self._length = 0 - - if len(self._nodes) < 2: return - if len(self._nodes) == 2: - self._edges.append( Edge( self._nodes[0], self._nodes[1] ) ) - self._length = self._edges[0].length - return - - self._computeHanan() - count = 0 - - trace( 550, '++' ) - minMST = RMST( 'MST[%i]' % count ) - minMST.setNodes( self._nodes ) - minMST.runPrim() - trace( 550, '-,+', '\tInitial %s length %d\n' % (minMST.name,DbU.toLambda(len(minMST))) ) - minMST.showEdges( 550 ) - trace( 550, '-' ) - - addedSteiner = True - while addedSteiner: - addedSteiner = False - for steinerNode in self._hananNodes: - count += 1 - trace( 550, '\tTrying with Steiner point H:%d,%d\n' \ - % (DbU.toLambda(steinerNode.x),DbU.toLambda(steinerNode.y)) ) - mst = RMST( 'MST[%i]' % count ) - mst.setNodes( self._nodes ) - mst.copyNode( steinerNode ) - mst.runPrim() - - trace( 550, '\tCurrent %s length %d\n' % (mst.name,DbU.toLambda(len(mst))) ) - mst.showEdges( 550 ) - if len(mst) < len(minMST): - trace( 550, '\tAccept min RST.\n' ) - minMST = mst - addedSteiner = True - - if addedSteiner: - self.copyNode( minMST.nodes[-1] ) - self.nodes[-1].setFlags( Node.KeepPoint ) - - i = 0 - while i < len(self._edges): - if self._nodes[i].flags & Node.SteinerPoint \ - and self._nodes[i].degree < 3: - trace( 550, 'Deleting unused Steiner point H:%d,%d' \ - % (DbU.toLambda(self._nodes[i].x),DbU.toLambda(self._nodes[i].y)) ) - del self._nodes[i] - else: - i += 1 - - self._nodes = minMST.nodes - self._edges = minMST.edges - self._length = minMST.length - trace( 550, '-' ) - return diff --git a/deprecated/cumulus/src/plugins/vchannels.py b/deprecated/cumulus/src/plugins/vchannels.py deleted file mode 100644 index 5556b3e6..00000000 --- a/deprecated/cumulus/src/plugins/vchannels.py +++ /dev/null @@ -1,69 +0,0 @@ - -# This file is part of the Coriolis Software. -# Copyright (c) Sorbonne Université 2019-2023, All Rights Reserved -# -# +-----------------------------------------------------------------+ -# | C O R I O L I S | -# | C u m u l u s - P y t h o n T o o l s | -# | | -# | Author : Jean-Paul CHAPUT | -# | E-mail : Jean-Paul.Chaput@lip6.fr | -# | =============================================================== | -# | Python : "./plugins/vchannels.py" | -# +-----------------------------------------------------------------+ - -try: - import sys - import traceback - import os.path - import math - import coriolis.Cfg as Cfg - from ..Hurricane import Breakpoint, UpdateSession - from ..helpers import setTraceLevel, trace, l, u, n - from ..helpers.io import ErrorMessage, catch - import ..plugins - import .block.vchannels -except Exception as e: - catch( e ) - sys.exit(2) - - -# -------------------------------------------------------------------- -# Plugin hook functions, unicornHook:menus, ScritMain:call - -def unicornHook ( **kw ): - kw['beforeAction'] = 'placeAndRoute.placeChip' - plugins.kwAddMenu ( 'placeAndRoute', 'P&&R', **kw ) - plugins.kwUnicornHook( 'placeAndRoute.vchannels' - , 'Add vertical routing channels' - , 'Create vertical spacing to increase the vertical routing capacity' - , sys.modules[__name__].__file__ - , **kw - ) - return - - -def scriptMain ( **kw ): - try: - #setTraceLevel( 550 ) - errorCode = 0 - cell = None - if 'cell' in kw and kw['cell']: - cell = kw['cell'] - editor = None - if 'editor' in kw and kw['editor']: - editor = kw['editor'] - print( ' o Editor found, running in graphic mode.' ) - if cell == None: cell = editor.getCell() - if cell == None: - raise ErrorMessage( 3, 'VChannels: No cell loaded yet.' ) - if cell.getAbutmentBox().isEmpty(): - raise ErrorMessage( 3, 'VChannels: cell "%s" is not placed yet.' % cell.getName() ) - vchannels = block.VChannels.VChannels( cell ) - for i in range(48): - vchannels.addChannelAt( l(250.0*(i+1)), l(190.0) ) - vchannels.expandChannels() - if editor: editor.refresh() - except Exception as e: - catch( e ) - return 0 diff --git a/deprecated/cumulus/src/ref.py b/deprecated/cumulus/src/ref.py deleted file mode 100644 index 11b130cc..00000000 --- a/deprecated/cumulus/src/ref.py +++ /dev/null @@ -1,157 +0,0 @@ - -import CRL -from Hurricane import * - -import re - -########### -## GetXY ## -########### -def pyGetXY ( masterCell, pathname, refname ) : - '''This function returns the coordinates of a reference thanks to its name and the path of the instance it belongs to''' - - ## MasterCell ## - if pathname != "" : - myPath = Path ( masterCell, pathname ) - tInst = myPath.getTailInstance() - masterCell = tInst.getMasterCell() - - ## Reference ## - myRef = None - for el in masterCell.getReferences(): - if str(el.getName()) == refname : - myRef = el - break - - # Error : if no reference found in mastercell - if myRef == None : - err = "\n[Stratus ERROR] GetRefXY : No reference found with name " + refname + " in masterCell " + str(masterCell.getName()) + ".\n" - raise err - - ## Occurrence of the Reference ## - myOccurrence = Occurrence ( myRef, myPath ) - bb = myOccurrence.getBoundingBox() - - return ( getValue(bb.getXCenter()), getValue(bb.getYCenter()) ) - -############## -## PlaceRef ## -############## -def pyPlaceRef ( cell, name, x, y ) : - '''This function creates a reference thanks to its coordinates''' - - UpdateSession.open() - - Reference ( cell - , name - , DbU_lambda ( x ), DbU_lambda ( y ) - ) - - UpdateSession.close() - -################## -## PlaceContact ## -################## -def pyPlaceContact ( net, layer, x, y, width, height ) : - '''This function creates a contact''' - - UpdateSession.open() - - Contact ( net, layer, DbU_lambda(x), DbU_lambda(y), DbU_lambda(width), DbU_lambda(height) ) - - UpdateSession.close() - -############## -## PlacePin ## -############## -def pyPlacePin ( net, direct, placementStatus, layer, x, y, width, height ) : - '''This function creates a pin''' - - size = 0 - for loc in net.getPins(): - size += 1 - - UpdateSession.open() - - Pin ( net, str(net.getName()) + "." + str(size) - , direct - , placementStatus - , layer - , DbU_lambda(x), DbU_lambda(y) - , DbU_lambda(width), DbU_lambda(height) - ) - - if ( not net.IsSupply() ) : - CRL.createPartRing ( net.getCell(), net.getName() ) - - UpdateSession.close() - -################## -## PlaceSegment ## -################## -def pyPlaceSegment ( net, layer, x1, y1, x2, y2, width ) : - '''This function creates a segment''' - - UpdateSession.open() - - if x1 == x2 : Vertical ( net, layer, DbU_lambda(x1), DbU_lambda(width), DbU_lambda(y1), DbU_lambda(y2) ) - elif y1 == y2 : Horizontal ( net, layer, DbU_lambda(y1), DbU_lambda(width), DbU_lambda(x1), DbU_lambda(x2) ) - - UpdateSession.close() - -################### -## CopyUpSegment ## -################### -def pyCopyUpSegment ( masterCell, pathname, netname, newnet ) : - '''This function copies the segment of an instance in the current cell''' - - ## MasterCell ## - if pathname != "" : - myPath = Path ( masterCell, pathname ) - transformation = myPath.getTransformation() - - tInst = myPath.getTailInstance() - masterCell = tInst.getMasterCell() - - ## Net ## - myNet = None - for el in masterCell.getNets(): - if str(el.getName()) == netname : - myNet = el - break - - # Error : if no net found in mastercell - if myNet == None : - err = "\n[Stratus ERROR] CopyUpSegment : No net found with name " + netname + " in masterCell " + str(masterCell.getName()) + ".\n" - raise err - - mySegment = None - for mySegment in myNet.getSegments(): - # Error : copy only of CALU segments - if str ( mySegment.getLayer().getName() ) not in ( "CALU1", "CALU2", "CALU3", "CALU4", "CALU5", "CALU6" ) : - err = "\n[Stratus ERROR] CopyUpSegment : The segments of net " + netname + " are not of type CALU.\n" - raise err - - myLayer = mySegment.getLayer() - myWidth = mySegment.getWidth() - - pointSource = mySegment.getSourcePosition() - pointTarget = mySegment.getTargetPosition() - - transformation.ApplyOn ( pointSource ) - transformation.ApplyOn ( pointTarget ) - - ## Occurrence of the segment ## - myOccurrence = Occurrence ( mySegment, myPath ) - - if pointSource.getY() == pointTarget.getY() : - Horizontal ( newnet, myLayer, pointSource.getY(), myWidth, pointSource.getX(), pointTarget.getX() ) - elif pointSource.getX() == pointTarget.getX() : - Vertical ( newnet, myLayer, pointSource.getX(), myWidth, pointSource.getY(), pointTarget.getY() ) - - # Error : if no segment found - if not mySegment: - err = "\n[Stratus ERROR] CopyUpSegment : No segment found with net " + netname + " in masterCell " + str(masterCell.getName()) + ".\n" - raise err - - diff --git a/deprecated/katabatic/CMakeLists.txt b/deprecated/katabatic/CMakeLists.txt deleted file mode 100644 index 689aff94..00000000 --- a/deprecated/katabatic/CMakeLists.txt +++ /dev/null @@ -1,37 +0,0 @@ -# -*- explicit-buffer-name: "CMakeLists.txt" -*- - - set(CMAKE_LEGACY_CYGWIN_WIN32 0) - project(KATABATIC) - - option(BUILD_DOC "Build the documentation (doxygen)" OFF) - option(CHECK_DATABASE "Run database in full check mode (very slow)" OFF) - option(USE_LIBBFD "Link with BFD libraries to print stack traces" OFF) - - cmake_minimum_required(VERSION 3.16) - - set(ignoreVariables "${CMAKE_INSTALL_DIR}") - - list(INSERT CMAKE_MODULE_PATH 0 "${DESTDIR}$ENV{CORIOLIS_TOP}/share/cmake/Modules/") - find_package(Bootstrap REQUIRED) - setup_project_paths(CORIOLIS) - - set_cmake_policies() - setup_boost(program_options) - setup_qt() - - find_package(Python 3 REQUIRED COMPONENTS Interpreter Development.Module) - find_package(PythonSitePackages REQUIRED) - find_package(FLUTE REQUIRED) - find_package(HURRICANE REQUIRED) - find_package(CORIOLIS REQUIRED) - find_package(KNIK REQUIRED) - find_package(Doxygen) - - add_subdirectory(src) - add_subdirectory(cmake_modules) - add_subdirectory(doc) - - if(CHECK_DATABASE) - add_definitions(-DCHECK_DATABASE) - message(STATUS "Checking database enabled (very slow).") - endif(CHECK_DATABASE) diff --git a/deprecated/katabatic/cmake_modules/CMakeLists.txt b/deprecated/katabatic/cmake_modules/CMakeLists.txt deleted file mode 100644 index c553b595..00000000 --- a/deprecated/katabatic/cmake_modules/CMakeLists.txt +++ /dev/null @@ -1 +0,0 @@ -install ( FILES FindKATABATIC.cmake DESTINATION share/cmake/Modules ) diff --git a/deprecated/katabatic/cmake_modules/FindKATABATIC.cmake b/deprecated/katabatic/cmake_modules/FindKATABATIC.cmake deleted file mode 100644 index 4168313b..00000000 --- a/deprecated/katabatic/cmake_modules/FindKATABATIC.cmake +++ /dev/null @@ -1,37 +0,0 @@ -# - Find the Katabatic includes and libraries. -# The following variables are set if Coriolis is found. If KATABATIC is not -# found, KATABATIC_FOUND is set to false. -# KATABATIC_FOUND - True when the Coriolis include directory is found. -# KATABATIC_INCLUDE_DIR - the path to where the Coriolis include files are. -# KATABATIC_LIBRARIES - The path to where the Coriolis library files are. - - -SET(KATABATIC_INCLUDE_PATH_DESCRIPTION "directory containing the Katabatic include files. E.g /usr/local/include/coriolis2 or /asim/coriolis/include/coriolis2") - -SET(KATABATIC_DIR_MESSAGE "Set the KATABATIC_INCLUDE_DIR cmake cache entry to the ${KATABATIC_INCLUDE_PATH_DESCRIPTION}") - -# don't even bother under WIN32 -IF(UNIX) - # - # Look for an installation. - # - FIND_PATH(KATABATIC_INCLUDE_PATH NAMES katabatic/KatabaticEngine.h PATHS - # Look in other places. - ${CORIOLIS_DIR_SEARCH} - PATH_SUFFIXES include/coriolis2 - # Help the user find it if we cannot. - DOC "The ${KATABATIC_INCLUDE_PATH_DESCRIPTION}" - ) - - FIND_LIBRARY(KATABATIC_LIBRARY_PATH - NAMES katabatic - PATHS ${CORIOLIS_DIR_SEARCH} - PATH_SUFFIXES lib64 lib - # Help the user find it if we cannot. - DOC "The ${KATABATIC_INCLUDE_PATH_DESCRIPTION}" - ) - - SET_LIBRARIES_PATH(KATABATIC KATABATIC) - HURRICANE_CHECK_LIBRARIES(KATABATIC) - -ENDIF(UNIX) diff --git a/deprecated/katabatic/doc/AutoContact.dox b/deprecated/katabatic/doc/AutoContact.dox deleted file mode 100644 index b4f2831d..00000000 --- a/deprecated/katabatic/doc/AutoContact.dox +++ /dev/null @@ -1,443 +0,0 @@ - - // -*- C++ -*- - - namespace Katabatic { - - /*! \class AutoContact - * - * \brief Abstract base class for AutoContact - * - * \section secACCache Caching Mechanism - * - * To bypass the Ring/Hook mechanism \e and the subsequent Session::Lookup() - * call, the AutoSegments anchored on an AutoContact are cached in the - * AutoContact itself. They can be accessed through \c getHorizontalN() and - * getVerticalN() accessors \c N depending on the subtype of AutoContact. - * - * Cached AutoSegments are updated in the AutoContact::updateTopology() - * function only. - * - * - * \section secACInvalidate Invalidate on AutoContacts - * - * The invalidation of an AutoContact invalidate all the segments - * that are anchored on it. - * - * Special Case of HTee & VTee - * - * When invalidating an HTee or VTee, two out of the three anchored - * segments are parallels. The \e aligned constraint is passed on - * those two. By default, when we invalidate an AutoSegment, the - * invalidation is applied to the whole aligned set through the - * AutoSegment::getAligneds() collection. So if one of the parallel - * is invalidated and the other not, it should only be because we - * are already in \c getAligneds(), then we do not want to invalidate - * again the whole aligned set. In that case, we perform an atomic only - * invalidation (reset Katabatic::KbPropagate). - * - * For the complete invalidation/revalidation mechanism see - * \ref secSessionAlgo "Session Algorithm". - * - * - * \section secDiffFromKatabatic2 Notes - Differences from Katabatic 2 - * - * From the previous version of Katabatic, AutoContact have - * been greatly stripped down (again). They are now always punctual - * objetcs with stricly fixed topologies: - *
    - *
  • AutoContactTerminal to connect to a terminal (one segment). - *
  • AutoContactTurn to make a turn: two perpandiculars segments. - *
  • AutoContactHTee an horizontal tee: two \e aligned horizonals - * and one vertical. - *
  • AutoContactVTee an horizontal tee: two \e aligned verticals - * and one horizontal. - *
- */ - - //! \enum AutoContactFlag - //! Set of flags to describe the internal state of an AutoContact. - - //! \var AutoContactFlag::CntFixed - //! This contact cannot be moved. - - //! \var AutoContactFlag::CntTerminal - //! This contact is anchored on a terminal (AutoContactTerminal), must not be changed. - - //! \var AutoContactFlag::CntTurn - //! The object true class is AutoContactTurn, must not be changed. - - //! \var AutoContactFlag::CntHTee - //! The object true class is AutoContactHTee, must not be changed. - - //! \var AutoContactFlag::CntVTee - //! The object true class is AutoContactVTee, must not be changed. - - //! \var AutoContactFlag::CntInvalidated - //! At least one AutoSegment of this contact has been moved, the contact - //! position must be recomputed (in the Session revalidation). - - //! \var AutoContactFlag::CntInvalidatedCache - //! At least one AutoSegment has been broken or moved up, the connexity - //! must be checked and possibly corrected (in Session revalidation). - - //! \var AutoContactFlag::CntInCreationStage - //! Sets only during the initial creation process. - - //! \var AutoContactFlag::CntBadTopology - //! Something wrong has happened and the connexity of the AutoContact is - //! no longer ensured (too much or too less AutoSegments, too wide span of - //! AutoSegment layers). - - //! \function Hook* AutoContact::getBodyHook (); - //! Base class method proxy. - - //! \function Hook* AutoContact::getAnchorHook (); - //! Base class method proxy. - - //! \function Component* AutoContact::getAnchor () const; - //! Base class method proxy. - - //! \function Net* AutoContact::getNet () const; - //! Base class method proxy. - - //! \function const Layer* AutoContact::getLayer () const; - //! Base class method proxy. - - //! \function DbU::Unit AutoContact::getX () const; - //! Base class method proxy. - - //! \function DbU::Unit AutoContact::getY () const; - //! Base class method proxy. - - //! \function DbU::Unit AutoContact::getDx () const; - //! Base class method proxy. - - //! \function DbU::Unit AutoContact::getDy () const; - //! Base class method proxy. - - //! \function Point AutoContact::getCenter () const; - //! Base class method proxy. - - //! \function Point AutoContact::getPosition () const; - //! Base class method proxy. - - //! \function DbU::Unit AutoContact::getWidth () const; - //! Base class method proxy. - - //! \function DbU::Unit AutoContact::getHalfWidth () const; - //! Base class method proxy. - - //! \function DbU::Unit AutoContact::getHeight () const; - //! Base class method proxy. - - //! \function DbU::Unit AutoContact::getHalfHeight () const; - //! Base class method proxy. - - //! \function Components AutoContact::getSlaveComponents () const; - //! Base class method proxy. - - //! \function void AutoContact::setLayer ( const Layer* ) ; - //! Base class method proxy. - - //! \function void AutoContact::setWidth ( DbU::Unit ) ; - //! Base class method proxy. - - //! \function void AutoContact::setHeight ( DbU::Unit ) ; - //! Base class method proxy. - - //! \function void AutoContact::setSizes ( DbU::Unit w, DbU::Unit h ) ; - //! Base class method proxy. - - //! \function void AutoContact::setX ( DbU::Unit ) ; - //! Base class method proxy. - - //! \function void AutoContact::setY ( DbU::Unit ) ; - //! Base class method proxy. - - //! \function void AutoContact::setPosition ( DbU::Unit w, DbU::Unit h ) ; - //! Base class method proxy. - - //! \function void AutoContact::setPosition ( const Point& ) ; - //! Base class method proxy. - - //! \function void AutoContact::setDx ( DbU::Unit ) ; - //! Base class method proxy. - - //! \function void AutoContact::setDy ( DbU::Unit ) ; - //! Base class method proxy. - - //! \function void AutoContact::setOffset ( DbU::Unit w, DbU::Unit h ) ; - //! Base class method proxy. - - //! \function void AutoContact::translate ( const DbU::Unit& dx, const DbU::Unit& dy ) ; - //! Base class method proxy. - - //! \function bool AutoContact::isInCreationStage () const; - //! \sreturn \true if the AutoContact is still in it's initial creation stage. - - //! \function bool AutoContact::isInvalidated () const; - //! \sreturn \true if the some AutoSegment has changed and the AutoContact needs - //! to be repositionned (through a call to AutoContact::updateGeometry()). - - //! \function bool AutoContact::isInvalidatedCache () const; - //! \sreturn \true if the some AutoSegment has changed and the AutoContact - //! topology needs to be restored, as a gap may have appeared - //! (through a call to AutoSegment::updateTopology()). - - //! \function bool AutoContact::isTurn () const; - //! \sreturn \true if the dynamic type of the AutoContact is of type Turn. - - //! \function bool AutoContact::isTee ( unsigned int direction ) const; - //! \sreturn \true if the dynamic type of the AutoContact is either of type - //! AutoContactHTee or AutoContactVTee, according to \c direction. - - //! \function bool AutoContact::isHTee () const; - //! \sreturn \true if the dynamic type of the AutoContact is of type AutoContactHTee. - - //! \function bool AutoContact::isVTee () const; - //! \sreturn \true if the dynamic type of the AutoContact is of type AutoContactHTee. - - //! \function bool AutoContact::isFixed () const; - //! \sreturn \true if the AutoContact cannot be moved. - - //! \function bool AutoContact::hasBadTopology () const; - //! \sreturn \true if the AutoContact topology has been broken and a gap has appeared. - //! (sould not happen...) - - //! \function bool AutoContact::canDestroy ( unsigned int flags ) const; - //! \sreturn \true if the AutoContact could be destroyed, that is, no segments - //! remains anchored on it. If \c flags contains Katabatic::KbWarnOnError, - //! issue an error message. - - //! \function bool AutoContact::canMoveUp ( const AutoSegment* moved ) const; - //! \sreturn \true if \c segment can be moved up without triggering a topological - //! modification. It meaans that: - //! - Without \c moved, the AutoContact needs only one layer. - //! - \c moved go from \e below the AutoContact to \e above. - - //! \function Contact* AutoContact::base () const; - //! \sreturn The Hurricane::Contact which is decorated. - - //! \function size_t AutoContact::getAllocateds (); - //! \sreturn The total number of AutoContact currently allocateds. - - //! \function const Name& AutoContact::getStaticName (); - //! \sreturn The name of the Hurricane::ExtensionGo slice. - - //! \function const Name& AutoContact::getName () const; - //! \sreturn The name of the Hurricane::ExtensionGo slice. - - //! \function const Name& AutoContact::getId () const; - //! \sreturn The unique \c identifer of the AutoSegment. - - //! \function Box AutoContact::getBoundingBox () const; - //! \see Contact::getBoundingBox(). - - //! \function GCell* AutoContact::getGCell () const; - //! \sreturn The GCell into which the AutoContact is located. - - //! \function AutoSegment* AutoContact::getOpposite ( const AutoSegment* reference ) const; - //! \sreturn The other AutoSegment the \e same direction as \c reference, this is - //! only meaningful on AutoContactHTee or AutoContactVTee. If there is - //! no opposite, \c NULL is returned. - - //! \function AutoSegment* AutoContact::getPerpandicular ( const AutoSegment* reference ) const; - //! \sreturn The AutoSegment in the \e perpandicular direction to \c reference, this is - //! only meaningful on AutoContacTurn. It there is no unique perpandicular, - //! \c NULL is returned. - - //! \function AutoSegment* AutoContact::getSegment ( unsigned int index ) const; - //! \sreturn The nth anchored AutoSegment. The index is significant: - //! - \b 0 : first horizontal (\b h1). - //! - \b 1 : second horizontal (\b h2). - //! - \b 2 : first vertical (\b b1). - //! - \b 3 : second vertical (\b b2). - //! - //! Not all the indexes are filled for every AutoContact. For example - //! \c Turn have \b h1 and \b b1, and \c HTee have \b h1, \b h2 and - //! \b v1. - - //! \function unsigned int AutoContact::getMinDepth () const; - //! \sreturn The layer depth of the bottom layer of the AutoContact. - - //! \function unsigned int AutoContact::getMaxDepth () const; - //! \sreturn The layer depth of the top layer of the AutoContact. - - //! \function void AutoContact::getLengths ( DbU::Unit* lengths, AutoSegment::DepthLengthSet& processeds ); - //! \param lengths A table of DbU::Unit, the size of all routing layers used. - //! \param processeds An AutoSegment sorted set holding all the already processeds - //! AutoSegments. - //! - //! Compute the lengths over the owning GCell of all the AutoSegments anchored - //! on this AutoContact. The lengths are added to the total length table - //! \c lengths. To avoid double accounting of the local AutoSegments - //! that have both source & target in the same GCell, we keep a set - //! of already processeds AutoSegments in \c processeds. - - //! \function Box AutoContact::getNativeConstraintBox () const; - //! \sreturn The native constraint box (that is, whithout any user constraints - //! applied). For AutoContactTerminal, this is the Box of the supporting - //! external component, and for all others the bounding box of the - //! owning GCell. - - //! \function Interval AutoContact::getUConstraints ( unsigned int direction ) const; - //! \sreturn The constraint interval in \c direction (that is, the relevant side - //! of the constraint box). - - //! \function DbU::Unit AutoContact::getCBXMin () const; - //! \sreturn The X coordinate of the bottom left corner of the constraint box. - - //! \function DbU::Unit AutoContact::getCBYMin () const; - //! \sreturn The Y coordinate of the bottom left corner of the constraint box. - - //! \function DbU::Unit AutoContact::getCBXMax () const; - //! \sreturn The X coordinate of the top right corner of the constraint box. - - //! \function DbU::Unit AutoContact::getCBYMax () const; - //! \sreturn The Y coordinate of the top right corner of the constraint box. - - //! \function Box AutoContact::getConstraintBox () const; - //! \sreturn The current constraint box: the native constraint box with all - //! the user's contraints applieds. - - //! \function Box& AutoContact::intersectConstraintBox ( Box& box ) const; - //! \sreturn The intersection between \c box and the constraint box. The - //! result is stored into \c box and a reference to it is returned. - - //! \function void AutoContact::invalidate ( unsigned int flags=0 ); - //! Invalidate the AutoContact, schedule it for revalidation in the - //! Session. If flag containt Katabatic::CntInvalidTopology, - //! the topology of the AutoContact will also be checked and - //! possible gap closeds. - //! - //! The revalidations methods associated are: - //! - AutoSegment::updateGeometry(), recompute the punctual contact position. - //! - AutoSegment::updateTopology(), restore the connexity. - - //! \function void AutoContact::updateGeometry (); - //! Compute the new position of the AutoContact based on the AutoSegment - //! positions. The Session mechanism ensure that all AutoSegment are - //! set into their final positions before calling this updator. - - //! \function void AutoContact::updateTopology (); - //! Modificate the AutoContact topology to close any gap. This could - //! be by changing layer or creating a new dogleg on an incident - //! AutoSegment. - - //! \function void AutoContact::_getTopology ( Component*& anchor, Horizontal**& hs, Vertical**& vs, size_t sz ); - //! \param anchor The anchor, if any. - //! \param hs The Hurricane::Horizontal anchored. - //! \param vs The Hurricane::Vertical anchored. - //! \param sz The size of boths \c hs & \c vs table passed as arguments. - //! - //! Fill \c anchor , \c hs and \c vs with the components anchored on this - //! AutoContact. - - //! \function void AutoContact::showTopologyError ( const std::string& message ); - //! Comprensive display of the topology of the AutoContact to ease the - //! debug work. Prepend with the error message \c message. Do no throw - //! an error. - - //! \function void AutoContact::checkTopology (); - //! Check for topology correctness (no gaps), display an error message - //! if needed. - - //! \function void AutoContact::setGCell ( GCell* gcell ); - //! Set the owning GCell. - - //! \function void AutoContact::setCBXMin ( DbU::Unit xMin ); - //! Set the lower left X coordinate of the constraint box. - //! - //! \remark It cannot go outside the GCell bounding box. - - //! \function void AutoContact::setCBYMin ( DbU::Unit yMin ); - //! Set the lower left Y coordinate of the constraint box. - //! - //! \remark It cannot go outside the GCell bounding box. - - //! \function void AutoContact::setCBXMax ( DbU::Unit xMax ); - //! Set the upper right X coordinate of the constraint box. - //! - //! \remark It cannot go outside the GCell bounding box. - - //! \function void AutoContact::setCBYMax ( DbU::Unit yMax ); - //! Set the upper right Y coordinate of the constraint box. - //! - //! \remark It cannot go outside the GCell bounding box. - - //! \function void AutoContact::setConstraintBox ( const Box& box ); - //! Set the constraint box. - //! - //! \remark It cannot go outside the GCell bounding box. - - //! \function bool AutoContact::restrictConstraintBox ( DbU::Unit min, DbU::Unit max, unsigned int flags=KbWarnOnError ); - //! \param min The minimum of the restriction interval. - //! \param max The maximum of the restriction interval. - //! \param flags Gives the direction of the restriction. - //! \return \true if the restriction was actually applied. - //! - //! Restrict the current constraint box but check if the restriction - //! will not lead to an empty interval, in that case, do nothing and - //! return \false. - - //! \function void AutoContact::migrateConstraintBox ( AutoContact* other ); - //! Transfer the user constraint box from \c other to the current - //! object \c this. The constraints of \c other are restored to their - //! native values. The two contacts must belong to the same GCell for - //! this method to take effect. - - - /*! \class LocatorHelper - * - * \brief Locator Helper Collection's Locators - * - * Provide a small uniform walktough over the AutoSegments anchored - * on AutoContacts. The \c flags argument allows to choose between - * direction and include perpandiculars (in that case all segments - * are processeds). - * - * - * \section secLocHelperImplementation Implementation Details - * - * As, at most, two horizontals and two verticals may be anchored on - * any AutoContact subtype, the locator helper perform a walk through - * a virtual table of 4 elements. The two first are the horizontals, - * the two last the verticals. The meaning of this index is consistent - * whith the \c index argument of AutoContact::getSegment(). When - * a segment is not present in an AutoContact, the \c getSegment() - * returns \c NULL and the LocatorHelper::progress() function will - * skip it. - * - * The private methods: - * - \c LocatorHelper::_min() - * - \c LocatorHelper::_max() - * - * Computes the bounds of \c _index according to the value of \c _flags: - * - \c KbHorizontal : \c 0 to less than \c 2. - * - \c KbVertical : \c 2 to less than \c 4. - * - \c KbHorizontal|KbVertical : \c 0 to less than \c 4. - */ - - //! \function LocatorHelper::LocatorHelper ( AutoContact* contact, unsigned int flags ); - //! Create a helper to iterate over the AutoSegments anchored on \c contact. - //! The \c flags arguments allow to select: - //! - The direction: Katabatic::KbHorizontal or Katabatic::KbVertical. - //! - Perpandicular inclusion: Katabatic::KbWithPerpands. - //! - //! When setting KbWithPerpands, all the segments will be iterated over. - //! It may seems a somewhat contorted way of doing things, the reason is - //! the ability to share (an pass) flags directly between different - //! functions. - - //! \function bool LocatorHelper::isValid() const; - //! \sreturn \true if there is an AutoSegment to be processed. - - //! \function AutoSegment* LocatorHelper::getSegment() const; - //! \sreturn The current AutoSegment. \c NULL if the loop is over. - - //! \function void LocatorHelper::progress(); - //! \sreturn Go to the next AutoSegment. - - } - - diff --git a/deprecated/katabatic/doc/AutoContactHTee.dox b/deprecated/katabatic/doc/AutoContactHTee.dox deleted file mode 100644 index 41f1edd1..00000000 --- a/deprecated/katabatic/doc/AutoContactHTee.dox +++ /dev/null @@ -1,41 +0,0 @@ - - // -*- C++ -*- - - namespace Katabatic { - - /*! \class AutoContactHTee - * - * \brief AutoContact H-Tee (two H, one V) - * - * AutoContact to build an horizontal tee (two H, one V). - */ - - //! \function AutoContactHTee* AutoContactHTee::create ( GCell* gcell, Net* net, const Layer* layer ); - //! \param gcell The GCell into which create the AutoContact. - //! \param net The Net to which this AutoContact belongs. - //! \param layer The Layer of the AutoContact. - //! \return The created AutoContactHTee. - //! - //! Create a new AutoContactHTee. - - //! \function void AutoContactHTee::updateTopology (); - //! Restore the topology (i.e. connexity) of the contact after any number - //! of connected segments has changed layer (at least one, up to three). - //! - //! For any configuration, the connexity can be restored by making only - //! one dogleg. - //! - //! We distinguish two kind of layer changes: - //! -# The two horizontals (\c h1 and \c h2) are still on the same layer - //! (either they both moved or the vertical only has moved, see figures - //! 2 & 4). - //! In that case, the dogleg is made on the vertical. - //! -# The two horizontals no longer are on the same layer (figures 1 & 3). - //! In that case, the dogleg is made on the horizontal which is at the - //! greater distance (in a layer sense) from the vertical. - //! - //! \image html updateTopologyHTee.png "Update H-Tee Topology" - - } - - diff --git a/deprecated/katabatic/doc/AutoContactTerminal.dox b/deprecated/katabatic/doc/AutoContactTerminal.dox deleted file mode 100644 index 482ce4dc..00000000 --- a/deprecated/katabatic/doc/AutoContactTerminal.dox +++ /dev/null @@ -1,66 +0,0 @@ - - // -*- C++ -*- - - namespace Katabatic { - - /*! \class AutoContactTerminal - * - * \brief AutoContact Terminal (S/T is a Terminal) - * - * AutoContact that are directly attached by either source or target - * or both to a terminal. - */ - - //! \function AutoContactTerminal* AutoContactTerminal::create ( GCell* gcell, Component* rp, const Layer* layer, const DbU::Unit x, const DbU::Unit y, const DbU::Unit width, const DbU::Unit height ); - //! \param gcell The GCell into which create the AutoContact. - //! \param rp The Component on which to anchor the AutoContact. - //! \param layer The Layer of the AutoContact. - //! \param x The absolute X position. - //! \param y The absolute Y position. - //! \param width The width of the AutoContact. - //! \param height The height of the AutoContact. - //! \return The created AutoContact. - //! - //! Create a new AutoContactTerminal anchored on \c rp. (x,y) gives - //! the \e absolute position. - //! - //! The anchor component \c rp is most often a Hurricane::RoutingPad (occurrencing - //! a Hurricane::Segment) or directly a Hurricane::Segment, in case of RoutingPad - //! layer promotion. - - //! \function AutoContactTerminal* AutoContactTerminal::create ( GCell* gcell, Component* rp, const Layer* layer, Point point, const DbU::Unit width, const DbU::Unit height ); - //! \param gcell The GCell into which create the AutoContact. - //! \param rp The RoutingPad on which to anchor the AutoContact. - //! \param layer The Layer of the AutoContact. - //! \param point The absolute position. - //! \param width The width of the AutoContact. - //! \param height The height of the AutoContact. - //! \return The created AutoContact. - //! - //! Create a new AutoContactTerminal anchored on \c rp. \c point gives - //! the \e absolute position. - - //! \function void AutoContactTerminal::updateTopology (); - //! Restore the topology (i.e. connexity) of the contact after the incident - //! segment has changed layer. - //! - //! Based on the layer depth delta between the terminal and the segment - //! three case can occurs: - //! - The delta is \b zero, then just sets the layer of the contact - //! to the common metal layer. - //! - The delta is \b one, then sets the contact layer to VIA connecting - //! the two layers. - //! - The delta is \b two, then create a dogleg to restore the connexity. - //! Depending on whether the terminal was attached to the source or - //! target, sets the layer of the segments. - //! - A delta of more than \b two is an error, and must never occurs. - //! - //! As, by default, the perpandicular is set in the layer above the - //! parallel, it may be necessary to adjust his layer as well (to the - //! one below). - //! - //! \image html updateTopologyTerminal.png "Update Terminal Topology" - - } - - diff --git a/deprecated/katabatic/doc/AutoContactTurn.dox b/deprecated/katabatic/doc/AutoContactTurn.dox deleted file mode 100644 index e79d5a63..00000000 --- a/deprecated/katabatic/doc/AutoContactTurn.dox +++ /dev/null @@ -1,44 +0,0 @@ - - // -*- C++ -*- - - namespace Katabatic { - - /*! \class AutoContactTurn - * - * \brief AutoContact Turn (one H, one V) - * - * AutoContact to make a turn (one H, one V). - */ - - //! \function AutoContactTurn* AutoContactTurn::create ( GCell* gcell, Net* net, const Layer* layer ); - //! \param gcell The GCell into which create the AutoContact. - //! \param net The Net to which this AutoContact belongs. - //! \param layer The Layer of the AutoContact. - //! \return The created AutoContactTurn. - //! - //! Create a new AutoContactTurn. - - //! \function void AutoContactTurn::updateTopology (); - //! Restore the topology (i.e. connexity) of the contact after one or both - //! connected segments has changed layer. - //! - //! Based on the layer depth delta between the two perpandiculars segments. - //! Three case can occurs: - //! - The delta is \b zero, then just sets the layer of the contact - //! to the common metal layer (turn in same layer). - //! - The delta is \b one, then sets the contact layer to VIA connecting - //! the two layers. - //! - The delta cannot be equal to two, due to the alternatives - //! routing directions, it would mean a \e turn connecting two \e horizontals - //! (or verticals) in different layers. - //! - The delta is \b three, then create a dogleg to restore the connexity. - //! The dogleg will be created on the connected segment which as been - //! layer invalidated. If both of them have been invalidated, - //! the horizontal one is preferred. - //! - A delta of more than \b three is an error, and must never occurs. - //! - //! \image html updateTopologyTurn.png "Update Turn Topology" - - } - - diff --git a/deprecated/katabatic/doc/AutoContactVTee.dox b/deprecated/katabatic/doc/AutoContactVTee.dox deleted file mode 100644 index 996a1288..00000000 --- a/deprecated/katabatic/doc/AutoContactVTee.dox +++ /dev/null @@ -1,30 +0,0 @@ - - // -*- C++ -*- - - namespace Katabatic { - - /*! \class AutoContactVTee - * - * \brief AutoContact V-Tee (one H, two V) - * - * AutoContact to build a vertical tee (two V, one H). - */ - - //! \function AutoContactVTee* AutoContactVTee::create ( GCell* gcell, Net* net, const Layer* layer ); - //! \param gcell The GCell into which create the AutoContact. - //! \param net The Net to which this AutoContact belongs. - //! \param layer The Layer of the AutoContact. - //! \return The created AutoContactVTee. - //! - //! Create a new AutoContactVTee. - - //! \function void AutoContactVTee::updateTopology (); - //! Restore the topology (i.e. connexity) of the contact after any number - //! of connected segments has changed layer (at least one, up to three). - //! - //! For a detailed explanation, see AutoContactHTee::updateTopology() and - //! sawp horizontal & vertical... - - } - - diff --git a/deprecated/katabatic/doc/AutoHorizontal.dox b/deprecated/katabatic/doc/AutoHorizontal.dox deleted file mode 100644 index f1dc00fe..00000000 --- a/deprecated/katabatic/doc/AutoHorizontal.dox +++ /dev/null @@ -1,20 +0,0 @@ - - - // -*- C++ -*- - - namespace Katabatic { - - //! \class AutoHorizontal - //! - //! \brief Concrete Horizontal AutoSegment - - //! \function void AutoHorizontal::_postCreate (); - //! - //! In addition to AutoSegment::_postCreate(), detect whether the - //! segment is global or local and register it in the relevant GCells - //! (if needed). - //! - //! If the segment is anchored directly on a terminal, adjust the - //! axis so it's connected. - - } diff --git a/deprecated/katabatic/doc/AutoSegment.dox b/deprecated/katabatic/doc/AutoSegment.dox deleted file mode 100644 index 26d61c44..00000000 --- a/deprecated/katabatic/doc/AutoSegment.dox +++ /dev/null @@ -1,1053 +0,0 @@ - - // -*- C++ -*- - - namespace Katabatic { - - /*! \class AutoSegment - * - * \brief Abstract base class for AutoSegment - * - * - * \section secASCreation Creating AutoHorizontal & AutoVertical - * - * AutoSegment is the abstract base class for AutoHorizontal and - * AutoVertical. They are must be created only through the - * factory method: AutoSegment::create(). - * - * - * \section secASCharacteristics Characteristics of AutoSegments - * - *
    - *
  • Unique ID: to ease the enforcing of a deterministic behavior - * and to gain some independance from the pointers, each AutoSegment - * is associated with an unique identifier. - * \red{IDs are now directly taken from the Hurricane::Segment.} - *
  • Source contact is always lesser than Target contact - * (Xs,Ys) < (Xt,Yt). - *
  • When assembled through AutoContactVTee or AutoContactHTee, - * AutoSegments became (i.e. must be kept) aligneds. Among a - * set of aligned AutoSegments, we distinguish a representative - * trough which we can manipulate the whole set. This representative - * is called the \e canonical AutoSegment and is the one with the - * lowest \c id). - *
  • When an aligned set contains at least one global, all the segments - * of the set are tagged Katabatic::SegWeakGlobal. This is - * especially useful on local ones to know if they are part of a - * much longer wire. - * - * Conversely, a set of aligned may contains only local segments and - * thus will not have the flag set. - *
  • To allow some optimization, the Katabatic::SegNotAligned - * tells if a segment is part of an aligned set. It is deduced from - * the type of both source and target contact: not on the parallel - * branch of a tee. - *
- * - * The Ever Fragmenting Data Structure - * - * All the transformations applied to the database, after it's initial - * building, can be reduced to making new doglegs (and layer changes). - * Another way to put it, is that no Tee is ever created after the - * initial stage. The consequence is that the segments are only fragmenting - * more and more (up to a certain limit). The aligneds sets are progessively - * broken apart as needed, and until there remains only one tee per set - * (the two segments on the aligned branch). - * - * - * \section secASOperations Operations on AutoSegments - * - *
    - *
  • Slackening. Constraints transmited through either source - * or target AutoContact are too tight (tighter than the GCell), - * by adding straps in the perpandicular direction, the full slack - * of the segment is restored. - *
  • Layer Change. One or two layers above or below the - * current layer. One up/down may means into the perpandicular - * routing direction. - *
  • Dogleg Creation. Mean breaking the segment in two. - * This operation is used to slacken the constraints on a segment - * or restore connexity on source/target contact after a layer - * change. The new segment is always created on the source. - *
  • Reduction/Raising. When a segment is a short dogleg, - * no greater than one picth, it can use the layer of the - * perpandiculars. - *
- * - * - * \section secASInvalidate Invalidate on AutoSegments - * - * The simple invalidation of an AutoSegment do not invalidate - * it's source & target contact. - * - * An axis position change or a layer change both invalidate the - * AutoSegment and it's source & target contacts. - * - * For the complete invalidation/revalidation mechanism see - * \ref secSessionAlgo "Session Algorithm". - * - * - * \section secASAttributes Main Attributes of AutoSegments - * - * AutoSegment retains all attributes from Segment. The Segment itself - * beeing accessible through the base() methods. - *
    - *
  • An unique \c Id (for determinism). - *
  • The GCell from wich it starts from. It is the GCell of the - * source AutoContact. - *
  • A state, combination of flags from Katabatic::AutoSegmentFlag. - *
  • An interval for the optimal range of the AutoSegment axis. - *
  • An interval for user's defined constraint on the axis. - *
  • The interval giving the complete length of the AutoSegment, - * that is, with all extentions cap taken into account. - * This interval is refered as the \e span. - *
  • A small counter, of the number of reduced neighbors (never - * exceed two). - *
- * - * - * \section secASImplementation Implementation Details - * - * AutoSegment / AutoHorizontal & AutoVertical are kind of decorators of - * Hurricane::Segment (they do not scrictly respect the pattern). - * - * Canonical AutoSegment can should be considered as a kind of Composite. - * - * Thoses objects are created using a Factory method. - * - * - * \section secASMethodsClassif Methods Classification - * - *
    - *
  • Wrapper methods on the underlying Hurricane::Segment. - *
- *
    - *
  • Atomic methods on AutoSegment, that is, which applies exactly - * on the current AutoSegment. - *
- *
    - *
  • Canonical methods that applies on the set of aligned AutoSegments. - * There are two kind of those, the methods part of the API, and - * the ones that make the link with the atomic methods. Those - * intermediate methods hide some cumbersome AutoSegment list - * parameters. - *
      - *
    • AutoSegment::invalidate() - *
    • AutoSegment::computeOptimal() - *
    • AutoSegment::setAxis() - *
    • AutoSegment::toConstraintAxis() - *
    • AutoSegment::toOptimalAxis() - *
    - *
- *
    - *
  • Uniform access, to simplify the managment of AutoHorizontal - * and AutoVertical through AutoSegment, a set of uniformized methods is - * introduced. For instance, to avoid to check the dynamic type to choose - * to call getSourceX() or getSourceY(), we may call getSourceU(). - * Uniform methods are named by replacing \c X/Y with \c U. - *
      - *
    • AutoSegment::getSourceU() - *
    • AutoSegment::getTargetU() - *
    • AutoSegment::getDuSource() - *
    • AutoSegment::getDuTarget() - *
    • AutoSegment::getSpanU() - *
    • AutoSegment::setDuSource() - *
    • AutoSegment::setDuTarget() - *
    - *
- */ - - - //! \enum AutoSegmentFlag - //! Set of flags to describe the internal state of an AutoSegment. - - //! \var AutoSegmentFlag::SegHorizontal - //! This AutoSegment is associated to a Hurricane::Horizontal, if not - //! set, it is associated to a Hurricane::Vertical. Set when the object - //! is constructed. - - //! \var AutoSegmentFlag::SegFixed - //! The Hurricane::Segment associated must/cannot be moved. - - //! \var AutoSegmentFlag::SegGlobal - //! The AutoSegment span between at least two GCells (i.e. not fully enclosed - //! in one). - - //! \var AutoSegmentFlag::SegWeakGlobal - //! The AutoSegment is part of an aligned set which contains at least a global. - //! The global segment is itself tagged as weak global. - - //! \var AutoSegmentFlag::SegCanonical - //! This AutoSegment is the designated representant of a set of aligned - //! AutoSegment. - - //! \var AutoSegmentFlag::SegBipoint - //! This AutoSegment is a straight wire between two terminal AutoContact. - - //! \var AutoSegmentFlag::SegDogleg - //! This AutoSegment has been created as the perpandicular part of a dogleg. - - //! \var AutoSegmentFlag::SegStrap - //! This AutoSegment has been created to to reconnect parts of an AutoSegment - //! after slackening. - - //! \var AutoSegmentFlag::SegSourceTop - //! The source contact of this segment is connected to the top layer. - - //! \var AutoSegmentFlag::SegSourceBottom - //! The source contact of this segment is connected to the bottom layer. - - //! \var AutoSegmentFlag::SegTargetTop - //! The target contact of this segment is connected to the top layer. - - //! \var AutoSegmentFlag::SegTargetBottom - //! The target contact of this segment is connected to the bottom layer. - - //! \var AutoSegmentFlag::SegIsReduced - //! This segment is the perpandicular part of a dogleg which will use the - //! same layer as the parallels. - - //! \var AutoSegmentFlag::SegLayerChange - //! This AutoSegment has been created to to reconnect parts of an AutoSegment - //! after a layer change. - - //! \var AutoSegmentFlag::SegSlackened - //! This AutoSegment has been slackened, that is freed from any constraints from - //! source or target through the insertion of straps. - - //! \var AutoSegmentFlag::SegStrongTerminal - //! This AutoSegment directly connected to a terminal. - - //! \var AutoSegmentFlag::SegWeakTerminal1 - //! This AutoSegment indirectly connected to a terminal with medium strength. - - //! \var AutoSegmentFlag::SegWeakTerminal2 - //! This AutoSegment indirectly connected to a terminal with weak strength. - - //! \var AutoSegmentFlag::SegNotSourceAligned - //! This source contact of the segment is not the aligned part of a tee - //! (\c h1 or \c h2 for a \c HTee, \c v1 or \c v2 for a \c VTee). - //! - //! \sa AutoSegmentFlag::SegNotAligned - - //! \var AutoSegmentFlag::SegNotTargetAligned - //! This target contact of the segment is not the aligned part of a tee - //! (\c h1 or \c h2 for a \c HTee, \c v1 or \c v2 for a \c VTee). - //! - //! \sa AutoSegmentFlag::SegNotAligned - - //! \var AutoSegmentFlag::SegAxisSet - //! This AutoSegment has been explicitly positionned at least once. - - //! \var AutoSegmentFlag::SegInvalidated - //! This position or topology of this AutoSegment has been changed, needing - //! a revalidation. - - //! \var AutoSegmentFlag::SegInvalidatedLayer - //! The segment has been chenged of layer, but the source & target AutoContact - //! have not been topologicaly checked yet. This flag \b must be used in - //! whith AutoSegmentFlag::SegInvalidated. - - //! \var AutoSegmentFlag::SegCreated - //! The AutoSegment has just been created. This flag is set only from the - //! contruction of the object until is \e first revalidation. Used to - //! disable some tests that cannot be satisfied initially. - - //! \var AutoSegmentFlag::SegWeakTerminal - //! A mask composed of: - //! - Katabatic::SegStrongTerminal - //! - Katabatic::SegWeakTerminal1 - //! - Katabatic::SegWeakTerminal2 - - //! \var AutoSegmentFlag::SegNotAligned - //! A mask composed of: - //! - Katabatic::SegNotSourceAligned - //! - Katabatic::SegNotTargetAligned - //! - //! This mask is a quick way to know if a segment is \b not part of an aligned set. - //! It means that the segment is, on both ends, either connected to a terminal, - //! a turn or the stem part of a tee. - - - //! \function AutoSegment* AutoSegment::create ( AutoContact* source, AutoContact* target, Segment* hurricaneSegment ); - //! \param source The source AutoContact. - //! \param target The target AutoContact. - //! \param hurricaneSegment The Hurricane::Segment to decorate. - //! \return The AutoHorizontal/AutoVertical decorator segment. - //! - //! Factory method to create AutoHorizontal or AutoVertical. It is important - //! to note that this function may modify the underlying Hurricane::Segment. - //! - Layer is set to the default (bottom) routing Layers. - //! - Source & target anchor of \c hurricaneSegment are set on \c source - //! and \c target. If the \c hurricaneSegment is already anchored and - //! \c source or \c target are not the one decorating the anchors, an - //! exception is thrown. - - //! \function AutoSegment* AutoSegment::create ( AutoContact* source, AutoContact* target, unsigned int dir, size_t depth ); - //! \param source The source AutoContact. - //! \param target The target AutoContact. - //! \param dir Specify the segment direction. - //! \param depth The layer, given by it's depth in the RoutingGauge. - //! \return The AutoHorizontal/AutoVertical. - //! - //! Factory method to create AutoHorizontal or AutoVertical. - //! \c flags indicate the direction (KbHorizontal or KbVertical). - //! The underlying Hurricane segment is also created. - - //! \function Segment* AutoSegment::base() const; - //! \sreturn the decorated Hurricane::Segment (const flavor). - - //! \function Segment* AutoSegment::base(); - //! \sreturn the decorated Hurricane::Segment. - - //! \function Horizontal* AutoSegment::getHorizontal(); - //! \sreturn If the decorated segment is a Hurricane::Horizontal, return it. - //! \c NULL otherwise. - - //! \function Vertical* AutoSegment::getVertical(); - //! \sreturn If the decorated segment is a Hurricane::Vertical, return it. - //! \c NULL otherwise. - - //! \function Cell* AutoSegment::getCell() const; - //! \see Segment::getCell(). - - //! \function Net* AutoSegment::getNet() const; - //! \see Segment::getNet(). - - //! \function const Layer* AutoSegment::getLayer() const; - //! \see Segment::getLayer(). - - //! \function BoundingBox* AutoSegment::getBoundingBox() const; - //! \see Segment::getBoundingBox(). - - //! \function Hook* AutoSegment::getSourceHook(); - //! \see Segment::getSourceHook(). - - //! \function Hook* AutoSegment::getTargetHook(); - //! \see Segment::getTargetHook(). - - //! \function Contact* AutoSegment::getSource() const; - //! \see Segment::getSource(). - - //! \function Contact* AutoSegment::getTarget() const; - //! \see Segment::getTarget(). - - //! \function Component* AutoSegment::getOppositeAnchor( Component* ) const; - //! \see Segment::getNet(). - - //! \function Components AutoSegment::getAnchors() const; - //! \see Segment::getAnchors(). - - //! \function DbU::Unit AutoSegment::getX() const; - //! \see Segment::getX(). - - //! \function DbU::Unit AutoSegment::getY() const; - //! \see Segment::getY(). - - //! \function DbU::Unit AutoSegment::getWidth() const; - //! \see Segment::getWidth(). - - //! \function DbU::Unit AutoSegment::getLength() const; - //! \see Segment::getLength(). - - //! \function DbU::Unit AutoSegment::getSourcePosition() const; - //! \see Segment::getSourcePosition(). - - //! \function DbU::Unit AutoSegment::getTargetPosition() const; - //! \see Segment::getTargetPosition(). - - //! \function DbU::Unit AutoSegment::getSourceX() const; - //! \see Segment::getSourceX(). - - //! \function DbU::Unit AutoSegment::getSourceY() const; - //! \see Segment::getSourceY(). - - //! \function DbU::Unit AutoSegment::getTargetX() const; - //! \see Segment::getTargetX(). - - //! \function DbU::Unit AutoSegment::getTargetY() const; - //! \see Segment::getTargetY(). - - //! \function DbU::Unit AutoSegment::invert(); - //! \see Segment::invert(). - - //! \function void AutoSegment::setLayer( const Layer* ); - //! \see Segment::setLayer(). - - //! \function bool AutoSegment::isHorizontal() const; - //! \sreturn \true if the Hurricane::Segment is Horizontal. - - //! \function bool AutoSegment::isVertical() const; - //! \sreturn \true if the Hurricane::Segment is Vertical. - - //! \function bool AutoSegment::isGlobal() const; - //! \sreturn \true if the segment is global (span over more than one GCell). - - //! \function bool AutoSegment::isLocal() const; - //! \sreturn \true if the segment is local (fully enclosed in one GCell). - - //! \function bool AutoSegment::isFixed() const; - //! \sreturn \true if segment must not be moved by the router. - - //! \function bool AutoSegment::isBipoint() const; - //! \sreturn \true if the segment straigh join two terminals. - - //! \function bool AutoSegment::isWeakTerminal() const; - //! \sreturn \true if segment is indirectly connected to a terminal. - - //! \function bool AutoSegment::isStrongTerminal( unsigned int flags=0 ) const; - //! \sreturn \true if segment is directly connected to a terminal. - - //! \function bool AutoSegment::isLayerChange() const; - //! \sreturn \true if segment is a strap used only to connect between two different - //! metal layers on the way up or down. - - //! \function bool AutoSegment::isSpinTop() const; - //! \sreturn \true if segment is connected to turns and both perpandiculars segments - //! are in the \e top layer (candidate for reduction). - - //! \function bool AutoSegment::isSpinBottom() const; - //! \sreturn \true if segment is connected to turns and both perpandiculars segments - //! are in the \e bottom layer (candidate for reduction). - - //! \function bool AutoSegment::isSpinTopOrBottom() const; - //! \sreturn \true if segment is either spin top or spin bottom - //! (candidate for reduction). - - //! \function bool AutoSegment::isReduced() const; - //! \sreturn \true if segment is actually in a reduced state: it's effective layer - //! will be the one of it's perpandiculars. - - //! \function bool AutoSegment::isStrap() const; - //! \sreturn \true if segment has been created from a slackening operation to - //! restore the slack of another segment. - - //! \function bool AutoSegment::isDogleg() const; - //! \sreturn \true if segment has been created as the perpandicular part of a dogleg. - - //! \function bool AutoSegment::isInvalidated() const; - //! \sreturn \true if segment has been moved or topologicaly altered. - - //! \function bool AutoSegment::isInvalidatedLayer() const; - //! \sreturn \true if segment has been changed of layer. Source and Target AutoContact - //! may need to be altered. - - //! \function bool AutoSegment::isCreated() const; - //! \sreturn \true if segment has just been created and is not revalidated for the - //! first time - - //! \function bool AutoSegment::isCanonical() const; - //! \sreturn \true if segment is the representant of an aligned set. - - //! \function bool AutoSegment::isUnsetAxis() const; - //! \sreturn \true if the segment axis has never been set. - - //! \function bool AutoSegment::isSlackened() const; - //! \sreturn \true if the segment has already been slackened. - - //! \function unsigned int AutoSegment::canDogleg( Interval interval ); - //! \sreturn non-zero if the aligned set of segment can be broken \e outside \c interval. - //! The returned value could be zero (failure) or Katabatic::KbDoglegOnLeft - //! or Katabatic::KbDoglegOnRight menaing that the aligned set could be broken - //! on the left of the \c interval (resp. right of it). - - // \function bool AutoSegment::canDesalignate( AutoContact* contact ) const; - // \sreturn \true if \c contact restrict the slack of the segment. - - //! \function bool AutoSegment::canReduce() const; - //! \sreturn \true if the segment can be reduced. That is: - //! - Source & target are AutoContactTurn. - //! - It is either spin top or spin bottom, that is - //! connecting perpandiculars both in the same layer. - //! - Has a length less or equal one pitch in the perpandicular direction. - //! - Neither of the perpandicular are also reduceds. - - //! \function bool AutoSegment::mustRaise() const; - //! \sreturn \true if the segment must \e be reduced. That is: - //! - It is in reduced state... - //! - It is no longer spin top or spin bottom. - //! - It's length exceed one pitch in the perpandicular direction. - - //! \function bool AutoSegment::canSlacken( unsigned int flags=0 ) const; - //! \sreturn \true if the segment can be slackened. That is, source or target constraints - //! are less than three pitches. - //! - //! If \c flags contains KbPropagate, look on the whole aligned set. - - //! \function bool AutoSegment::_canSlacken() const; - //! \sreturn \true if the segment can be slackened. That is, source or target constraints - //! are less than three pitches. - - //! \function bool AutoSegment::canMoveULeft( float reserve ) const; - //! \return \true if the \e global segment can be moved on the left GCell (for a - //! vertical) or down (for an horizontal). The move is accepted only if - //! it do not change the amount of global wiring. Thus the following - //! conditions: - //! - The segment mustn't be on the leftmost GCell (obvious...). - //! - The segment must be global. - //! - The source and target contacts must be AutoContactTurn(s). - //! - At least one of the perpandicular must be global \b and connected - //! through the \e target. That is, it's a global which extends toward - //! left. - //! - The GCell of maximum density on the left must remains below the - //! current GCell of maximum density, with a margin of \c reserve - //! (expressed in total saturation percentage). - - //! \function bool AutoSegment::canMoveURight( float reserve ) const; - //! \return \true if the \e global segment can be moved on the right GCell (for a - //! vertical) or up (for an horizontal). The move is accepted only if - //! it do not change the amount of global wiring. Thus the following - //! conditions: - //! - The segment mustn't be on the leftmost GCell (obvious...). - //! - The segment must be global. - //! - The source and target contacts must be AutoContactTurn(s). - //! - At least one of the perpandicular must be global \b and connected - //! through the \e source. That is, it's a global which extends toward - //! right. - //! - The GCell of maximum density on the left must remains below the - //! current GCell of maximum density, with a margin of \c reserve - //! (expressed in total saturation percentage). - - //! \function bool AutoSegment::canMoveUp( float reserve, unsigned int flags ) const; - //! \param reserve Number of track that must remains free \e after the move. - //! \param flags Modificate the method behavior, see below. - //! \return \true if the segment can be moved up, that is to the next layer above in - //! the same preferred routing direction. This method will check that in - //! every GCell of the segment, at least \c reserve tracks are still avalaible - //! \e after the segment has been moved up (\c reserve can be less than - //! \c 1.0). - //! - //! Possible (bitwise) value for \c flags : - //! - \c KbAllowTerminal : allow strong terminal to be moved up. - //! - \c KbAllowLocal : allow local segments to be moved up. - //! - \c KbPropagate : perform the check on the whole aligned set. - //! - \c KbWithPerpands : also check the density on the perpandiculars - //! begin & end GCell, there must be at least a \c 0.5 density - //! reserve on them. - - //! \function bool AutoSegment::canPivotUp( float reserve, unsigned int flags ) const; - //! \param reserve Number of track that must remains free \e after the move. - //! \param flags Modificate the method behavior, see below. - //! - //! Checks of the segment can be \e pivoted up. The difference between - //! \c canMoveUp() and \c canPivotUp() lies in the fact that no - //! perpandicular segment needs to be altered if the current segment - //! is moved up. For example an \b M3 segment connected to only \b M4 can - //! be pivoted up (in \b M5), but if connected to \b M2, it cannot. - //! - //! Possible (bitwise) value for \c flags : - //! - \c KbPropagate : perform the check on the whole aligned set. - //! - \c KbIgnoreContacts : do not check the source & target layers - //! to know if the segment can be pivoted up. - - //! \function bool AutoSegment::canPivotDown( float reserve, unsigned int flags ) const; - //! \param reserve Number of track that must remains free \e after the move. - //! \param flags Modificate the method behavior, see below. - //! - //! Checks of the segment can be \e pivoted down. The difference between - //! \c canMoveDown() and \c canPivotDown() lies in the fact that no - //! perpandicular segment needs to be altered if the current segment - //! is moved down. - //! - //! Possible (bitwise) value for \c flags : - //! - \c KbPropagate : perform the check on the whole aligned set. - - //! \function bool AutoSegment::checkPositions() const; - //! \sreturn \true if the relative positions of source & target are coherent. - //! (source <= target). - - //! \function bool AutoSegment::checkConstraints() const; - //! \sreturn \true if the constraint intervel is coherent (non-empty or - //! punctual in the worst case). - - //! \function unsigned long AutoSegment::getId() const; - //! \sreturn The AutoSegment unique identifier. - - //! \function unsigned int AutoSegment::getDirection() const; - //! \sreturn Katabatic::KbHorizontal or Katabatic::KbVertical according to the decorated segment. - - //! \function GCell* AutoSegment::getGCell() const; - //! \sreturn The GCell into which the AutoSegment starts (the one of the source). - - //! \function size_t AutoSegment::getGCells( vector& gcells ) const; - //! \param gcells A vector that will be filled by all the GCells that the - //! segment overlap. In increasing order, from source to target. - //! \return The vector's size. - - //! \function AutoContact* AutoSegment::getAutoSource() const; - //! \sreturn The source AutoContact. - - //! \function AutoContact* AutoSegment::getAutoTarget() const; - //! \sreturn The target AutoContact. - - //! \function AutoContact* AutoSegment::getOppositeAnchor( AutoContact* contact ) const; - //! \sreturn The source or target AutoContact opposite to \c contact. - - //! \function size_t AutoSegment::getPerpandicularsBound( set& bounds ); - //! \param bounds A vector that will be filled by all the AutoSegments perpandicular - //! to this one that induce a constraint. - //! \return The vector's size. - - //! \function AutoSegment* AutoSegment::getParent() const; - //! \sreturn If this segment has been created by a dogleg operation, the parent is - //! the one from which we fragmented. - - //! \function DbU::Unit AutoSegment::getAxis() const; - //! \sreturn The AutoSegment axis position. - - //! \function DbU::Unit AutoSegment::getSourceU() const; - //! \sreturn The AutoSegment \e uniform source position. (X for an horizontal and - //! Y for a Vertical). - - //! \function DbU::Unit AutoSegment::getTargetU() const; - //! \sreturn The AutoSegment \e uniform target position. (X for an horizontal and - //! Y for a Vertical). - - //! \function DbU::Unit AutoSegment::getDuSource() const; - //! \sreturn The AutoSegment \e uniform delta from source. (dX for an horizontal and - //! dY for a Vertical). - - //! \function DbU::Unit AutoSegment::getDuTarget() const; - //! \sreturn The AutoSegment \e uniform delta from source. (dX for an horizontal and - //! dY for a Vertical). - - //! \function DbU::Unit AutoSegment::getOrigin() const; - //! \sreturn The AutoSegment \e uniform source (lowest) GCell coordinate. (dX for an horizontal and - //! dY for a Vertical). - - //! \function DbU::Unit AutoSegment::getExtremity() const; - //! \sreturn The AutoSegment \e uniform target (greatest) GCell coordinate. (dX for an horizontal and - //! dY for a Vertical). - - //! \function Interval AutoSegment::getSpanU() const; - //! \sreturn The AutoSegment \e uniform occupying interval (on X for horizontal and - //! on Y for vertical). - - //! \function Interval AutoSegment::getSourceConstraints( unsigned int flags ) const; - //! \return The Interval into witch the source AutoContact can vary. By default - //! all deduced constraints and user constraints are took into account. - //! If \c flags contains \c KbNativeConstraints the constraint returned is - //! only the enclosing GCell. - - //! \function Interval AutoSegment::getTargetConstraints( unsigned int flags ) const; - //! \return The Interval into witch the target AutoContact can vary. By default - //! all deduced constraints and user constraints are took into account. - //! If \c flags contains \c KbNativeConstraints the constraint returned is - //! only the enclosing GCell. - - //! \function bool AutoSegment::getConstraints( DbU::Unit& min, DbU::Unit& max ) const; - //! \sreturn in \c min & \c max the allowed range for the segment axis. - - //! \function bool AutoSegment::getConstraints( Interval& i ) const; - //! \sreturn in \c i the allowed range for the segment axis. - - //! \function const Interval& AutoSegment::getUserConstraints() const; - //! \sreturn A reference to the additional constraints added to the axis of the segment. - - //! \function DbU::Unit AutoSegment::getSlack() const; - //! \sreturn The length of the axis constraint interval. - - //! \function DbU::Unit AutoSegment::getOptimalMin() const; - //! \sreturn The AutoSegment minimum axis optimal range. - - //! \function DbU::Unit AutoSegment::getOptimalMax() const; - //! \sreturn The AutoSegment maximum axis optimal range. - - //! \function Interval& AutoSegment::getOptimal( Interval& i ) const; - //! Inialize \c i with the AutoSegment axis optimal range. - - //! \function DbU::Unit AutoSegment::getCost( DbU::Unit axis ) const; - //! \return The cost if this segment is placed at \c axis. The cost is null if - //! \c axis is inside the optimal interval and is the distance toward - //! the nearest bound outside. - - //! \function AutoSegment* AutoSegment::getCanonical( Interval& i ); - //! \return The canonical segment associated to this one. Additionnaly compute - //! the source & target position of the whole set of aligned segments. - - //! \function AutoSegment* AutoSegment::getCanonical( DbU::Unit& min, DbU::Unit& max ); - //! \return The canonical segment associated to this one. Additionnaly compute - //! the source & target position of the whole set of aligned segments. - - //! \function unsigned int AutoSegment::_getFlags () const; - //! Sets \c flags given as arguments. - - //! \function void AutoSegment::setFlags ( unsigned int flags ); - //! Sets \c flags given as arguments. - - //! \function void AutoSegment::unsetFlags ( unsigned int flags ); - //! Unsets \c flags given as arguments. - - //! \function void AutoSegment::setDuSource( DbU::Unit du ); - //! Set the \e uniform \c dU from source anchor (dX for Horizontal, - //! dY for Vertical). - - //! \function void AutoSegment::setDuTarget( DbU::Unit du ); - //! Set the \e uniform \c dU from target anchor (dX for Horizontal, - //! dY for Vertical). - - //! \function void AutoSegment::updateOrient (); - //! Ensure that source is lower than target. Swap them if needed. - //! Swap never occurs on global segment because their source and target - //! anchors are from different GCell, which are already ordered. - - //! \function void AutoSegment::computeTerminal (); - //! Recompute the terminal status of an AutoSegment. Initially, a - //! segment which source or target is a terminal is flagged as - //! SegStrongTerminal. After a topological modification, if the - //! segment is no longer directly attached to a terminal, the - //! status is progessively weakened. Once it reaches the weakest - //! level, it stays on it so the algorithm can work out which - //! segments is a start to a path toward a terminal. - //! - //! Status from stronger to weaker: - //! - Katabatic::SegStrongTerminal. - //! - Katabatic::SegWeakTerminal1 - //! - Katabatic::SegWeakTerminal2 - //! - //! \remark The weakening is poorly done. After making a dogleg we do not - //! know which of the segment must be weakened if not directly attached - //! on a terminal. We must examinate source & target. - - //! \function void AutoSegment::updatePositions(); - //! Update the segment begenning and ending positions. The positions - //! takes into account the extension caps and reflect the real space - //! used by the segment under it's long axis. - - //! \function void AutoSegment::mergeUserConstraints( const Interval& constraints ); - //! Constraints applies on the valid axis interval. - //! Merge in \c constraints with the user's constraints. The resulting - //! constraints is the intersection of the former user's contraints and - //! the one given as argument. - - //! \function void AutoSegment::resetUserConstraints(); - //! Constraints applies on the valid axis interval. - //! Suppress all user's constraints. - - //! \function void AutoSegment::setOptimalMin( DbU::Unit min ); - //! Sets the lower bound of the optimal axis interval. - - //! \function void AutoSegment::setOptimalMax( DbU::Unit max ); - //! Sets the lower bound of the optimal axis interval. - - //! \function Interval AutoSegment::_invalidate(); - //! Invalidate this segment. The segment is scheduled into the Session - //! revalidation mechanism. - - //! \function Interval AutoSegment::revalidate(); - //! Mark this segment as valid (unset the Invalidated flag) and update - //! positions. Unlike AutoSegment::invalidate(), it's an atomic method. - - //! \function Interval AutoSegment::getMinSpanU() const; - //! \return The AutoSegment \e uniform minimum occupying interval, computed from the - //! constraints of all the supporting aligned AutoContacts. - //! (on X for horizontal and on Y for vertical). - - //! \function AutoSegment* AutoSegment::canonize ( unsigned int flags=KbNoFlags ); - //! Find and set the canonical AutoSegment from a set of aligneds. For the - //! time beeing we assumes that there is no merging process, so the Segments - //! will only gets more and more fragmented. This implies that a segment can - //! become canonical but it will never revert to normal status. - //! - //! The canonical AutoSegment is the one with the lowest \c Id. This a way - //! of ensuring reproductible results. Note that the canonical one may not - //! be the \e geometrically lowest one. - //! - //! \remark Canonical aware method. - - //! \function Interval AutoSegment::computeOptimal( set& processeds ); - //! \param processeds A set of already processeds AutoSegment. Used by the - //! caller function to avoid doing again the computation - //! on an AutoSegment from an already proccessed aligned set. - //! Compute the optimal axis interval for the aligned set. - //! - //! \remark Canonical aware method. - - //! \function void AutoSegment::invalidate( unsigned int flags=KbPropagate ); - //! Invalidate this AutoSegment, or if the Katabatic::KbPropagate flags - //! is set, the whole set of aligned segments. - //! - //! \remark If Katabatic is in the destruction stage, this function does nothing. - //! \remark Canonical aware method. - - //! \function void AutoSegment::setAxis( DbU::Unit axis, unsigned int flags=0 ); - //! \param axis The new position of the axis. - //! \param flags See KbRealignate. - //! - //! Set the axis of an aligned set. This method does nothing if not called - //! on the canonical AutoSegment of the set. If the new value of the axis - //! is equal to the previous one, nothing is done (non-canonical AutoSegment - //! are not looked after). To force an actual axis set, with invalidation of - //! the whole AutoSegment set, set the KbRealignate flag. - //! - //! \remark Canonical aware method. - - //! \function bool AutoSegment::toConstraintAxis(); - //! If the AutoSegment axis is outside the constraint interval, put it on - //! nearest bound. This method is active only on canonical AutoSegments. - //! - //! \return \true if an actual axis change is made. - //! - //! \remark Canonical aware method. - - //! \function bool AutoSegment::toOptimalAxis(); - //! If the AutoSegment axis is outside the optimal interval, put it on - //! nearest bound. This method is active only on canonical AutoSegments. - //! - //! \return \true if an actual axis change is made. - //! - //! \remark Canonical aware method. - - //! \function AutoSegments AutoSegment::getAligneds ( unsigned int flags ); - //! The Collection of AutoSegments that are aligned on this one - //! through AutoContactHTee or AutoContactVTee. If the \c flags - //! contains Katabatic::KbWithPerpands, the Collection will also - //! includes the AutoSegments directly perpandiculars to the whole - //! aligned set. - - //! \function AutoSegments AutoSegment::getPerpandiculars (); - //! The Collection of all AutoSegments directly perpandiculars to the - //! whole aligned set. - - //! \function AutoSegments AutoSegment::getOnSourceContact ( unsigned int direction ); - //! \sreturn The Collection of AutoSegment in \c direction that are on this segment - //! source contact. - - //! \function AutoSegments AutoSegment::getOnTargetContact ( unsigned int direction ); - //! \sreturn The Collection of AutoSegment in \c direction that are on this segment - //! target contact. - - //! \function AutoSegment::~AutoSegment () - //! AutoSegment destructor. It is not directly accessible, instead use - //! one flavor of the AutoSegment::create(). - - //! \function AutoSegment::AutoSegment ( Segment* segment ); - //! AutoSegment constructor. It is not directly accessible, instead use - //! one flavor of the AutoSegment::create(). - - //! \function void AutoSegment::_preCreate( AutoContact* source, AutoContact* target ); - //! Perform sanity checks before allowing the actual creation of an - //! AutoSegment. If an error occurs throw an exception. - //! - //! Check for: - //! - \c source and \c target must not be \NULL. - //! - \c source and \c target must be different. - - //! \function void AutoSegment::_postCreate (); - //! Perform operations that, given the data structure cannot be done - //! in the constructor. Also allows for sharing code with the derived - //! classes. Currently: - //! - Invalidate the whole net (topology change). - //! - Insert the AutoSegment in the lookup/Session machanism. - //! - Call AutoSegment::invalidate(). - //! - Call AutoSegment::updateOrient(). - //! - Call AutoSegment::updatePositions(). - - //! \function void AutoSegment::_preDestroy (); - //! Perform operations that must be done before the actual destructor is - //! called. Merely whidrawn the AutoSegment from the lookup/Session mechanism. - - //! \function bool AutoSegment::reduce (); - //! Sets the segment into reduced state. - //! - //! \sreturn \true if the operation did succeed. The layer will not be actually changed - //! until the Katabatic database is saved/destroyed. - //! - //! A segment can be reduced if: - //! - Source & target are AutoContactTurn. - //! - It is either spin top or spin bottom, that is - //! connecting perpandiculars both in the same layer. - //! - Has a length less or equal one pitch in the perpandicular direction. - //! - Neither of the perpandicular are also reduceds. - //! - //! \image html reduce-1.png "Reduce Example" - //! - //! If segment \c id:12 is reduced, it prevents \c id:10 & \c id:14 to - //! be also reduced, by increasing the \c _reduced counter. In this - //! example \c id:14 is spin top and \c id:12 is spin bottom. - //! - //! If we reduce two adjacent segments, one will go up while the other - //! will go down (they will actually exchange their layers), it will - //! thus defeat the purpose of creating a same layer dogleg. - //! Besides, the turn contact between them will be changed into a pure - //! metal one, generating a disconnexion... - //! - //! \see AutoSegment::raise() - - //! \function bool AutoSegment::raise (); - //! Get a segment out of \e reduced state. - //! - //! \sreturn \true if a state change did really take place. - //! - //! \see AutoSegment::reduce() - - //! \function AutoSegment* AutoSegment::makeDogleg ( AutoContact* from ); - //! \param from The AutoContact \e from which we want to make a dogleg. - //! - //! This method is dedicated for the restauration of topology connexity on - //! AutoContcact after a layer change on one of their connected AutoSegment. - //! - //! It perform three operations: - //! -# Create a dogleg on the AutoSegment (using the normal GCell variant). - //! -# Adjust the layers of the dogleg according whether we are going \e up - //! or \e down from the AutoContact \c from to the segment. - //! -# Returns the new AutoSegment connected to \c from (it may be the - //! same as before, \b if the AutoContact is the source of the - //! segment). - - //! \function unsigned int AutoSegment::makeDogleg ( GCell* doglegGCell, unsigned int flags=KbNoFlags ); - //! Make a dogleg in a set of aligned segments, thus the dogleg - //! may not be created on \c this segment but in the one which is under - //! \c doglegGCell. - //! - //! \sreturn A flag telling if the above or below layer was used for the - //! perpandicular segment (Katabatic::KbUseAboveLayer or - //! Katabatic::KbUseBelowLayer). - - //! \function unsigned int AutoSegment::makeDogleg ( Interval interval, unsigned int flags=KbNoFlags ); - //! Make a dogleg in a set of aligned segments, thus the dogleg - //! may not be created on \c this segment but in one which span intersect - //! \c interval. - //! - //! \sreturn A set of flags telling if the break has occured on the left candidate - //! (Katabatic::KbDoglegOnLeft) or right (Katabatic::KbDoglegOnRight). - //! it is combined with the flag telling if the above or below layer was - //! used for the dogleg. In case of failure, zero is returned. - //! - //! Break the set of aligned segments so the break point is \e outside - //! \c interval. The break point so can occurs on the \e left of the - //! interval (Katabatic::KbDoglegOnLeft) or on the \e right of the - //! interval (Katabatic::KbDoglegOnRight). When the set of aligned - //! segments fully enclose \c interval, a choice has to be made between - //! the left and right candidate. The rules are as follow: - //! - A \e left candidate include the \e min of the interval into - //! it's span. - //! - A \e right candidate include the \e max of the interval into - //! it's span. - //! - In certain topologies, there can be more than left or right - //! candidates (more than one segment of the set intersect the - //! bounds of the interval). Thoses candidates are ecludeds. - //! - If the two candidates are avalaibles, we choose the one - //! with the greated \e native constraints. - //! - In case of strict equality, the left candidate is choosen. - //! - //! \image html _makeDogleg-4.png "Example Case 4" - - //! \function unsigned int AutoSegment::_makeDogleg ( GCell* doglegGCell, unsigned int flags ); - //! This method is the workhorse for the various dogleg and topology - //! restauration methods. It is the atomic method that actually - //! make the dogleg on \b this segment. - //! - //! \sreturn Katabatic::KbUseAboveLayer if the dogleg is using the \e above layer - //! (Katabatic::KbUseBelowLayer for the below layer). - //! - //! Break the current segment in two (a.k.a. making a dogleg). - //! - The segment is broken inside \c doglegGCell. - //! - Two new segments are createds, one perpandicular and one parallel. - //! - The original segment is always kept attached to the \e source. - //! (the new parallel fragment is attached to the \e target). - //! - The perpandicular segment is in the layer \e above by default. - //! If we are already on the topmost routing layer, the \e below - //! layer is used. - //! - If the segment pass through the breaking GCell, it's axis is set - //! into the center. If the segment is local, the axis is the middle - //! of the segment. - //! - The Local/Global kind of the original segment is updated. - //! The local/global status is computed by the constructor of the AutoSegment - //! for the perpandicular and the new parallel. - //! - The terminal state is updated. If the segment is a strong terminal - //! the part that is no longer directly connected to the terminal is - //! demoted to Katabatic::SegWeakTerminal1. - //! - The perpandicular is obviously a canonical. If the broken segment - //! is canonical, the original \b is left canonical and only the new parallel - //! is re-canonized. Otherwise, we re-canonise both sets of aligned segments - //! (the one on the source and the one on the target). - //! - The three segments are added to the session dogleg stack. - //! - //! \red{After this method call the net topology is guarantee to be valid.} - //! - //! \image html _makeDogleg-1.png "Example Case 1" - //! \image html _makeDogleg-2.png "Example Case 2" - - //! \function bool AutoSegment::moveULeft (); - //! This function do not manage an aligned set. It applies on \c this - //! segment only. - //! - //! Displace an Horizontal or Vertical segment to the GCell below (a.k.a. - //! lower or inferior). Rules for displacement: - //! - The segment must be connected at both end to a turn contact - //! (we do not want to manage more complex cases for the time beeing). - //! - And, of course, the segment must not already by on the bottomost - //! GCell... - //! - //! The displacement take care of: - //! - Managing the status of the various perpandiculars. The stretched - //! one are made global if needed. The shrinked one made local, if - //! needed. - //! - The supporting AutoContact (source & target) are changed of - //! GCell. - //! - If the segment is global, the go-through GCells are updateds. - //! - //! \sreturn \true if the move has succeeded. - //! - //! \image html moveULeft-1.png "moveULeft() for an Horizontal" - - //! \function bool AutoSegment::moveURight (); - //! This function do not manage an aligned set. It applies on \c this - //! segment only. - //! - //! Displace an Horizontal or Vertical segment to the GCell above (a.k.a. - //! upper or superior). Rules for displacement: - //! - //! \sa AutoSegment::moveULeft() for a complete description. - - //! \function void AutoSegment::slacken ( unsigned int flags ); - //! - //! If the the AutoSegment is attached trough source and/or target to a - //! terminal with too tight constraints, create a dogleg on overconstrained - //! extremities. - //! - //! If \c flags contains Katabatic::KbPropagate, not only the current segment will be - //! looked up, but the whole aligned set. Note that due to the structure of - //! the database, there can be no more than two terminal connected segments - //! on the whole set (one on each extremity). - //! - //! If \c flags contains Katabatic::KbHalfSlacken, the number of tracks under which - //! the constraints are considered too tight is 3. Otherwise it is 10, that is a - //! whole GCell side span. This flag should be used when a long set of global - //! wire is overconstrained by only one of it's terminal, the other one offering - //! sufficient slack (typically: 8). - //! - //! The segment will also be slackened from it's terminal if the difference - //! between the current slack (resulting from all the constraints of the - //! aligned set) and the native slack is less than 3 tracks. This case means - //! that we are already near the native slack and it not sufficent enough - //! a degree of freedom. - //! - //! \image html _slacken-1.png "slacken() for an Horizontal" - //! - //! The \c slacken() method reject the slackening of short locals as shown in - //! figure \b 2.a. One way or another, we must connect to the terminal through - //! \b this short local. If we cannot place it, breaking it in two other - //! short local wouldn't help. In fact, it will only clutter more the GCell - //! and make subsequent routing more difficult. - //! - //! The figures \b 2.b and \b 2.c shows the special case of slackening an - //! horizontal from an \e horizontal terminal. In the original configuration, - //! the slack on segment \c id:10 is null, it's only choice is to be aligned - //! with the terminal. If a slackening is requested, it generally implies that - //! the horizontal track is blocked, and close to the terminal. Based on thoses - //! hypothesis, when we slacken the segment \c id:10 we impose that the - //! \e source contact is \b fixed on the terminal itself. That is, the segment - //! \c id:10 will be reduced to a zero-length and we made an immediate turn - //! (see \b 2.c ). - //! - //! \image html _slacken-2.png "slacken() for an Horizontal (special cases)" - - //! \function bool AutoSegment::reduceDoglegLayer (); - //! - //! Perform the actual layer change on a reduced segment. This method is to - //! be called juste before destroying the Katabatic database. - //! - //! \sreturn \true if a change occurs. - -} diff --git a/deprecated/katabatic/doc/AutoSegments.dox b/deprecated/katabatic/doc/AutoSegments.dox deleted file mode 100644 index 7f93d801..00000000 --- a/deprecated/katabatic/doc/AutoSegments.dox +++ /dev/null @@ -1,197 +0,0 @@ - - - // -*- C++ -*- - - namespace Katabatic { - - //! \enum FunctionFlag - - //! \typedef typedef Hurricane::Filter AutoSegmentHF; - //! Shorthand for AutoSegment Hurricane Filter. - - //! \typedef typedef Hurricane::Locator AutoSegmentHL; - //! Shorthand for AutoSegment Hurricane Locator. - - //! \typedef typedef Hurricane::Collection AutoSegmentHC; - //! Shorthand for AutoSegment Hurricane Collection. - - //! \typedef typedef GenericFilter AutoSegmentFilter; - //! Shorthand for AutoSegment Hurricane Generic Filter - //! (filter with \c unique_ptr<> like support). - - //! \typedef typedef GenericLocator AutoSegmentLocator; - //! Shorthand for AutoSegment Hurricane Generic Locator - //! (locator with \c unique_ptr<> like support). - - //! \typedef typedef GenericCollection AutoSegments; - //! Shorthand for AutoSegment Hurricane Generic Collection - //! (collection with \c unique_ptr<> like support). - - /*! \class AutoSegments_OnContact - * \brief All AutoSegment anchored on a Contact - * - * A Collection to iterate over all the AutoSegment anchored on - * \c contact. If supplied, the AutoSegment \c master will be - * excluded from the list. - * - * \remark If a Hurricane::Segment is anchored on the \c contact, but is not - * associated to an AutoSegment, it will be silently skipped. - */ - - //! \function AutoSegments_OnContact::AutoSegments_OnContact ( AutoSegment* master, Contact* contact ); - //! \param master Exclude this AutoSegment from the Collection. - //! \param contact The Hurricane Contact over which to iterate. - //! - //! Construct a Collection of all the AutoSegment anchored on \c contact. - - //! \function AutoSegments_OnContact::AutoSegments_OnContact ( AutoSegment* master, Contact* contact ); - //! Create the collection of all AutoSegments direcly anchored on \c contact, - //! with exclusion of \c master. - - //! \function AutoSegments_OnContact::AutoSegments_OnContact ( const AutoSegments_OnContact& ); - //! Copy constructor. - - //! \function AutoSegmentHC* AutoSegments_OnContact::getClone () const; - //! \sreturn A deep copy of the Collection. - - //! \function AutoSegmentHC* AutoSegments_OnContact::getLocator () const; - //! \sreturn A deep copy of the Collection Locator. - - - /*! \class AutoSegments_Aligneds - * \brief All aligned AutoSegment of a set. - * - * A Collection to iterate over all the AutoSegment aligned with \c master. - * The \c master itself will not be included in the walkthrough. - * If the Katabatic::KbWithPerpands flag is passed as argument, the collection - * will also includes the AutoSegments directly perpandicular to the aligned - * set. - * - * \remark AutoSegments are forced to be aligneds only when connected through - * AutoContactHTee or AutoContactVTee. - * - */ - - //! \function AutoSegments_Aligneds::AutoSegments_Aligneds ( AutoSegment* master, unsigned int flags ); - //! Create a collection of all the AutoSegment aligned on \c master - //! (master itself is excluded from the Collection). If the flag Katabatic::KbWithPerpands - //! is given the directly perpandicular AutoSegment will also be includeds. - - //! \function AutoSegments_Aligneds::AutoSegments_Aligneds ( const AutoSegments_Aligneds& ); - //! Copy constructor. - - //! \function AutoSegmentHC* AutoSegments_Aligneds::getClone () const; - //! \sreturn A deep copy of the Collection. - - //! \function AutoSegmentHC* AutoSegments_Aligneds::getLocator () const; - //! \sreturn A deep copy of the Collection Locator. - - - /*! \class AutoSegments_Perpandiculars - * \brief All perpandicular AutoSegment to a set of aligneds. - * - * A Collection to iterate over all the AutoSegment perpandicular to - * the set of aligned AutoSegment of \c master. - * - * \remark This Collection is canonical aware (work on the aligned set). - * - */ - - //! \function AutoSegments_Perpandiculars::AutoSegments_Perpandiculars ( AutoSegment* master ); - //! Create a collection of all the AutoSegment perpandicular to the aligned - //! set of \c master. - - //! \function AutoSegments_Perpandiculars::AutoSegments_Perpandiculars ( const AutoSegments_Perpandiculars& ); - //! Copy constructor. - - //! \function AutoSegmentHC* AutoSegments_Perpandiculars::getClone () const; - //! \sreturn A deep copy of the Collection. - - //! \function AutoSegmentHC* AutoSegments_Perpandiculars::getLocator () const; - //! \sreturn A deep copy of the Collection Locator. - - - /*! \class AutoSegments_AnchorOnGCell - * \brief All AutoSegment Beginning and/or Stopping in a GCell - * - * A Collection to iterate over all the AutoSegment that begin from and/or - * end in a GCell. - * - */ - - //! \function AutoSegments_AnchorOnGCell::AutoSegments_AnchorOnGCell ( GCell* fcell, unsigned int flags ); - //! Create a collection of all the AutoSegment beginning from and/or - //! ending in \c fcell. The set returned by the Collection is selected - //! through \c flags : - //! - Katabatic::KbBySource : include AutoSegment starting from \c fcell. - //! - Katabatic::KbByTarget : include AutoSegment ending in \c fcell. - //! - Katabatic::KbHorizontal : include horizontal AutoSegment. - //! - Katabatic::KbVertical : include vertical AutoSegment. - - //! \function AutoSegments_AnchorOnGCell::AutoSegments_AnchorOnGCell ( const AutoSegments_AnchorOnGCell& ); - //! Copy constructor. - - //! \function AutoSegmentHC* AutoSegments_AnchorOnGCell::getClone () const; - //! \sreturn A deep copy of the Collection. - - //! \function AutoSegmentHC* AutoSegments_AnchorOnGCell::getLocator () const; - //! \sreturn A deep copy of the Collection Locator. - - - /*! \class AutoSegments_OnContact - * \brief All AutoSegment Beginning from an AutoContact - * - * A Collection to iterate over all the AutoSegment that begin from - * AutoContact. As AutoSegments are kept orienteds (source anchor must - * be lower than target), selecting source anchored AutoSegments - * implies that they are starting from this AutoContact. - */ - - //! \function AutoSegments_CachedOnContact::AutoSegments_CachedOnContact ( AutoContact* source, unsigned int direction=KbHorizontal|KbVertical ); - //! Create a collection of all the AutoSegment anchored on \c source. - //! Use \c direction to select the kind of AutoSegments: - //! - KbHorizontal : include horizontal AutoSegment. - //! - KbVertical : include vertical AutoSegment. - - //! \function AutoSegments_CachedOnContact::AutoSegments_CachedOnContact ( const AutoSegments_CachedOnContact& ); - //! Copy constructor. - - //! \function AutoSegmentHC* AutoSegments_CachedOnContact::getClone () const; - //! \sreturn A deep copy of the Collection. - - //! \function AutoSegmentHC* AutoSegments_CachedOnContact::getLocator () const; - //! \sreturn A deep copy of the Collection Locator. - - - /*! \class AutoSegments_IsAccountable - * \brief Filter to select accoutable AutoSegment. - * - * A Filter to select accoutable AutoSegment. An AutoSegment is said - * to be accountable if it is canonical (in the sense of an aligned set). - */ - - //! \function bool AutoSegments_IsAccountable::accept ( AutoSegment* segment ) const; - //! \sreturn \true if the \c segment is accountable (i.e. canonical). - - //! \function AutoSegmentHF* AutoSegments_IsAccountable::getClone () const; - //! \sreturn A deep copy of the Collection. - - - /*! \class AutoSegments_InDirection - * \brief Filter to select AutoSegment in a given direction. - * - * A Filter to select AutoSegment in a specific direction. - */ - - //! \function AutoSegments_InDirection::AutoSegments_InDirection ( unsigned int direction ); - //! Create a filter for AutoSegment in \c direction (Katabatic::KbHorizontal - //! or Katabatic::KbVertical). - - //! \function bool AutoSegments_InDirection::accept ( AutoSegment* segment ) const; - //! \sreturn \true if the \c segment is in the correct direction. - - //! \function AutoSegmentHF* AutoSegments_InDirection::getClone () const; - //! \sreturn A deep copy of the Collection. - - } - diff --git a/deprecated/katabatic/doc/AutoVertical.dox b/deprecated/katabatic/doc/AutoVertical.dox deleted file mode 100644 index 10f746f4..00000000 --- a/deprecated/katabatic/doc/AutoVertical.dox +++ /dev/null @@ -1,20 +0,0 @@ - - - // -*- C++ -*- - - namespace Katabatic { - - //! \class AutoVertical - //! - //! \brief Concrete Vertical AutoSegment - - //! \function void AutoVertical::_postCreate (); - //! - //! In addition to AutoSegment::_postCreate(), detect whether the - //! segment is global or local and register it in the relevant GCells - //! (if needed). - //! - //! If the segment is anchored directly on a terminal, adjust the - //! axis so it's connected. - - } diff --git a/deprecated/katabatic/doc/CMakeLists.txt b/deprecated/katabatic/doc/CMakeLists.txt deleted file mode 100644 index d765849b..00000000 --- a/deprecated/katabatic/doc/CMakeLists.txt +++ /dev/null @@ -1,21 +0,0 @@ -# -*- mode: CMAKE; explicit-buffer-name: # "CMakeLists.txt" -*- - - set ( htmlInstallDir share/doc/coriolis2/en/html/doc/katabatic ) - set ( latexInstallDir share/doc/coriolis2/en/latex/katabatic ) - set ( doxExtras customHierarchy.html - closed.png - open.png - tabs.css - ) - - if(BUILD_DOC AND DOXYGEN_FOUND) - add_custom_target ( doc ALL - cd ${KATABATIC_SOURCE_DIR}/doc - && ${DOXYGEN_EXECUTABLE} doxyfile - && cp -f ${doxExtras} html - ) - endif() - - install ( DIRECTORY html/ DESTINATION ${htmlInstallDir} ) - install ( DIRECTORY latex/ DESTINATION ${latexInstallDir} ) - install ( FILES asimbook.cls DESTINATION ${latexInstallDir} ) diff --git a/deprecated/katabatic/doc/ChipTools.dox b/deprecated/katabatic/doc/ChipTools.dox deleted file mode 100644 index 74876255..00000000 --- a/deprecated/katabatic/doc/ChipTools.dox +++ /dev/null @@ -1,62 +0,0 @@ - - // -*- C++ -*- - - namespace Katabatic { - - /*! \class ChipTools - * - * \brief Utilities for Chip Level Design - * - * The ChipTools class provides a small set of utilities to ease - * the managment of a complete chip following the Alliance top - * hierarchical structure. - */ - - //! \function ChipTools::ChipTools ( Cell* cell ); - //! Create a ChipTool for \c cell. - - //! \function bool ChipTools::isChip () const; - //! \sreturn \true if the Cell is truly a top level design. If not, this - //! object is useless and does nothing. - - //! \function Cell* ChipTools::getCell () const; - //! \sreturn The top-level design. - - //! \function Instance* ChipTools::getCore () const; - //! \sreturn The instance of the core, that is, the only instance that is - //! \e not a pad... - - //! \function const Box& ChipTools::getChipBb () const; - //! \sreturn The chip complete bounding box, this *is* simply the Cell bounding box. - - //! \function const Box& ChipTools::getLeftPadsBb () const; - //! \sreturn The bounding box enclosing all the pads on the left side of the chip. - //! - //! \remark This box is computed from the chip bounding box and the pad height. - - //! \function const Box& ChipTools::getRightPadsBb () const; - //! \sreturn The bounding box enclosing all the pads on the right side of the chip. - //! - //! \remark This box is computed from the chip bounding box and the pad height. - - //! \function const Box& ChipTools::getTopPadsBb () const; - //! \sreturn The bounding box enclosing all the pads on the top side of the chip. - //! - //! \remark This box is computed from the chip bounding box and the pad height. - - //! \function const Box& ChipTools::getBottomPadsBb () const; - //! \sreturn The bounding box enclosing all the pads on the bottom side of the chip. - //! - //! \remark This box is computed from the chip bounding box and the pad height. - - //! \function const Torus& ChipTools::getCorona () const; - //! \sreturn The torus (in term of manhanttan distance) enclosed between the pad area - //! and the core area. - - //! \function bool ChipTools::intersectVPads ( const Box& ) const; - //! \sreturn \true if \c box intersect either the left or right pad box. - - //! \function bool ChipTools::intersectHPads ( const Box& ) const; - //! \sreturn \true if \c box intersect either the top or bottom pad box. - - } diff --git a/deprecated/katabatic/doc/Constants.dox b/deprecated/katabatic/doc/Constants.dox deleted file mode 100644 index ae66a706..00000000 --- a/deprecated/katabatic/doc/Constants.dox +++ /dev/null @@ -1,64 +0,0 @@ - // -*- mode: C++; explicit-buffer-name: "Constants.dox" -*- - - namespace Katabatic { - - //! \enum FunctionFlag - //! A set of flags to that can be passed to functions/methods througout - //! all Katabatic. - - //! \var KbOpenSession - //! Tells the function to open it's own Session, otherwise use - //! the one that should already have been opened. - - //! \var KbRealignate - //! On AutoSegment axis manipulation, force the realignment of all - //! the segment on an aligned set, even is the axis of the canonical - //! is already at the right coordinate. - - //! \var KbNativeConstraints - //! Ignore user-defined constraints or terminal induced ones (for AutoContacts - //! anchored on terminals) and return the owning GCell alone. - - //! \var KbForceMove - //! Tells the function to force move, even if it is not needed. - - //! \var KbHorizontal - //! Request some action to be done in the horizontal direction. - - //! \var KbVertical - //! Request some action to be done in the vertical direction. - - //! \var KbWithPerpands - //! Request that AutoSegments in perpandicular direction should be includeds. - - //! \var KbSource - //! Request AutoSegments anchored by their source anchor or that some - //! operation has to be performed on the source. - - //! \var KbTarget - //! Request AutoSegments anchored by their target anchor or that some - //! operation has to be performed on the target. - - //! \var KbWarnOnError - //! Display a warning if something has gone wrong. - - //! \var KbPropagate - //! The action will affect all the segments on an aligned set. - - //! \var KbUseAboveLayer - //! Request/tell the a above layer has been used. - - //! \var KbUseBelowLayer - //! Request/tell the a below layer has been used. - - //! \var KbDoglegOnLeft - //! The dogleg has occured on the left of something - - //! \var KbDoglegOnRight - //! The dogleg has occured on the right of something - - //! \var KbHalfSlacken - //! For AutoSegment::slacken(), change the overconstrained limit - //! from 10 tracks down to 3 (hard-wired). - - } diff --git a/deprecated/katabatic/doc/DoxygenLayout.xml b/deprecated/katabatic/doc/DoxygenLayout.xml deleted file mode 100644 index 1618beca..00000000 --- a/deprecated/katabatic/doc/DoxygenLayout.xml +++ /dev/null @@ -1,186 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/deprecated/katabatic/doc/GCell.dox b/deprecated/katabatic/doc/GCell.dox deleted file mode 100644 index 64915d9e..00000000 --- a/deprecated/katabatic/doc/GCell.dox +++ /dev/null @@ -1,535 +0,0 @@ - - - // -*- C++ -*- - - namespace Katabatic { - - /*! \class GCell - * - * \brief Routing Global Cell - * - * - * \section secGCellDescription GCell Description - * - * Please note that there are two kind of Global Cells (or GCell for short): - * - The GCell used by the global router Knik. - * - The GCell used by the detailed router (Katabatic & Kite). - * Although the information they hold is obviously related, they are two - * separate kind of objects. - * - * The area of the design to be routed is divided in a regular grid of - * rectangular area, the GCellGrid. Each rectangular area is a GCell. - * - * The GCell contains the following informations: - * - The AutoSegments that begins or ends in it. The list of segments - * is not avalaible directly but through the AutoContacts that are - * owned by the GCell. - * - The AutoSegments that go straight \e through it (or \e over it). - * Horizontal & Vertical segments are stored in two separeted list. - * Those two lists are sorted by layer depth (the deepest layers - * first). - * - A lot of synthetic information about the density of tracks used - * in the GCell. - * - * AutoContacts are affected to GCells, the area of the GCell is the - * one into which the AutoContact is allowed to be placed. It is this - * that way that the respect of the global routing choosen by Knik is - * enforced. See the AutoContact constraint box. - * - * When tracks are aligned with the GCell boundaries they one exactly on - * the boundary can belong to the GCell on either side of the boundary. - * But we want a clear and mutually exclusive ownership of each GCell - * area. So, we choose that one GCell do not own the topmost and rightmost - * track. And to implement it, we shrink top and right coordinates by - * the amount of GCell::getTopRightShrink(), which must be less than the - * track spacing. - * - * - * \subsection secGCellDensity Saturation & Density Computation - * - * At any depth (i.e. layer), in the preferred routing direction, a GCell - * can pass a finite length of wire. For example on an horizontal preferred - * layer: - \f[ - WL_{max} = width(GCell) \times Htracks(GCell) - \f] - * Then the density, is the ratio between \f$WL_{max}\f$ and the actually - * used wirelength: - \f[ - Wdensity(depth) = \frac{WL_{used}(depth)}{WL_{max}(depth)} - \f] - * Normally, the ratio musn't exceed 1.0, but the occupied wire length computation, - * for now, doesn't merge overlapping wires belonging to the same net, so - * the ratio may be slightly inaccurate. Thus in some pathological cases may - * be greater than 1.0 whithout truly been overloaded. - * - * A Cell is considered as \e saturated if the overall density is above the - * saturation ratio given by Session::getSaturateRatio(). - * - * Contact density is calculated as follow: - \f[ - Cont_{density} = \frac{|Contacts|}{Htracks \times Vtracks \times 4} - \f] - * It is a ratio over the number of actual contacts in the GCell and the maximal - * number. The maximal number being the product of the number of tracks in - * both direction and 4 stands for the hardwired number of layers (the depth). - * - * Should not be hardwired... \red{To be corrected in future versions.} - * - * - * \subsection secGCellFeedthrough Feedthrough Computation - * - * The feedtrough value is an estimate is of how many complete tracks have been used - * on a given layer of the GCell. It varies between zero and the number of track on the - * GCell (complete saturation). As an estimate, it doesn't tell you the actual - * number of free track, but how many you may expect assuming the routing is - * reasonably well done. - * - * Computation is done as follow: - * - *
Wire typeEstimated Cost - *
Straight wire (feedthrough) - * \b 1.0 - *
Beginning or ending global wire - * \b 0.5 - *
Local wire. - * \b 1/3 - *
Blockage wire - * The exact percentage of the track - *
- * - * - * \subsection secGCellTrackComputation Track Computation - * - * The number of track that can go through a GCell in the horizontal - * direction is computed as follow: - \f[ - Htracks = \frac{heigth(GCell)}{Vpitch} + 1 - \f] - * - * The pitch is assumed to be the same for every layer and is hardwired - * to 5.0 lambda. - * - * This is a bad architectural choice. The informations pertaining to - * routing should be held at Kite level, not be hardwired and the pitch - * should be made variable with the layer... - * \red{To be corrected in future versions}. - * - * - * \section secGCellLazyEvaluation GCell Lazy Evaluation - * - * To save processing time, the densities are not recomputed every time a - * segment is modified (added, removed or moved). Instead a lazy evaluation - * mechanism is used. Densities are recomputed each time a density is queried - * \e and the lazy evaluation \e not explicitly disabled (flag NoUpdate). - * - * - * \section secGCellSortingKey GCell Sorting Key - * - * In order to perform a lexicographical sort on the tuple \f$(density(depth),id)\f$ - * of a GCell, a specific slave object GCell::Key is introduced. It is the - * density on one specific depth, not the average density. - * - * - * \section secGCellDesaturation GCell Desaturation / Layer Assignment - * - * In addition to it's geometrical and density functionality, the GCell - * provides \e desaturation capabilities. Desaturation is the operation - * of moving up feedthough AutoSegment from the bottom layers towards - * the upper ones in order to balance the densities in the different - * densities. Thoses operations provides building blocks for the layer - * assignment stage which is provided by the Kabatic tool. - * - * Two strategies are avalaibles, moving one global AutoSegment at a - * time with GCell::stepDesaturate() or, when one AutoSegment is moved - * up, move up the whole net trunk with GCell::stepNetDesaturate(). - * - * \section secGCellImplantation GCell Implantation - * - * GCell derives from Hurricane::ExtensionGo to allow a graphical rendering - * of the routing density. - */ - - //! \function size_t GCell::getAllocateds (); - //! \sreturn The number of allocated GCells. - - //! \function const Name& GCell::getStaticName (); - //! \sreturn The name of the Go slice: \c "Katabatic::GCell". - //! - //! \see Hurricane::ExtensionGo - - //! \function const Name& GCell::getName () const; - //! \sreturn The name of the Go slice: \c "Katabatic::GCell". - //! - //! \see Hurricane::ExtensionGo - - //! \function Box GCell::getBoundingBox () const; - //! \sreturn The bounding box of the GCell, with the top right shrink applied. - - //! \function void GCell::translate ( const DbU::Unit&, const DbU::Unit& ); - //! Required to exists as a Hurricane::Go derived class. But must never - //! be used... - - //! \function GCellGrid* GCell::getGCellGrid () const; - //! \sreturn The Grid of which GCell is part of. - - //! \function unsigned int GCell::getIndex () const; - //! \sreturn The linear index of the GCell in the GCellGrid vector. - //! - //! \see GCellGrid for the meaning of the index. - - //! \function unsigned int GCell::getRow () const; - //! \sreturn The row of the GCell in the GCellGrid. - - //! \function unsigned int GCell::getColumn () const; - //! \sreturn The Column of the GCell in the GCellGrid. - - //! \function GCell* GCell::getLeft () const; - //! \sreturn The left neighbor of the GCell (\c NULL if it is the leftmost GCell). - - //! \function GCell* GCell::getRight () const; - //! \sreturn The right neighbor of the GCell (\c NULL if it is the rightmost GCell). - - //! \function GCell* GCell::getUp () const; - //! \sreturn The top neighbor of the GCell (\c NULL if it is the topmost GCell). - - //! \function GCell* GCell::getDown () const; - //! \sreturn The bottom neighbor of the GCell (\c NULL if it is the bottommost GCell). - - //! \function DbU::Unit GCell::getTopRightShrink (); - //! \sreturn The amount of shrink on the top and right boundaries. - - //! \function unsigned int GCell::getDepth () const; - //! \sreturn The depth (i.e. number of routing layers) of the GCell. - - //! \function bool GCell::isSaturated () const; - //! \sreturn \true if at least one layer exceed a saturation of \c 1.0 (more wirelength - //! that it can hold). - - //! \function bool GCell::isSaturated ( unsigned int depth ) const; - //! \sreturn \true if the saturation ratio of layer \c depth is over the threshold defined - //! for the GCells. - - //! \function bool GCell::isValid () const; - //! \sreturn \true if all the AutoContact/AutoSegment of the GCell are valids. - - //! \function bool GCell::isAboveDensity ( float threshold ) const; - //! \sreturn \true if the overall saturation ratio greater than \c threshold. - - //! \function bool GCell::hasFreeTrack ( size_t depth, float reserve ) const; - //! \sreturn \true if there should be enough wire length to pass a wire completly - //! trough this GCell. - - //! \function DbU::Unit GCell::getX () const; - //! \sreturn The lower left X coordinate of the GCell box. - - //! \function DbU::Unit GCell::getY () const; - //! \sreturn The lower left Y coordinate of the GCell box. - - //! \function DbU::Unit GCell::getXMax () const; - //! \sreturn The upper right X coordinate of the GCell box (top right shrink applied). - - //! \function DbU::Unit GCell::getYMax () const; - //! \sreturn The upper right Y coordinate of the GCell box (top right shrink applied). - - //! \function Interval GCell::getSide ( unsigned int direction ) const; - //! \sreturn The interval corresponding to the side position of the GCell box, - //! in \c direction. - - //! \function float GCell::getHCapacity () const; - //! \return The number of track that can go through the GCell in the horizontal - //! direction. For a detailed explanation of the computation see - //! \ref secGCellTrackComputation. - - //! \function float GCell::getVCapacity () const; - //! \return The number of track that can go through the GCell in the vertical - //! direction. For a detailed explanation of the computation see - //! \ref secGCellTrackComputation. - - //! \function float GCell::getDensity ( unsigned int flags=0 ) const; - //! \sreturn The average density of the GCell, for all the depths. - //! - //! \ref secGCellDensity, \ref secGCellLazyEvaluation. - - //! \function float GCell::getCDensity ( unsigned int flags=0 ) const; - //! \sreturn The density of contacts. - //! - //! \ref secGCellDensity, \ref secGCellLazyEvaluation. - - //! \function float GCell::getWDensity ( unsigned int depth, unsigned int flags=0 ) const; - //! \sreturn The density of wires at \c depth. - //! - //! \ref secGCellDensity, \ref secGCellLazyEvaluation. - - //! \function DbU::Unit GCell::getBlockage ( unsigned int depth ) const; - //! \sreturn The total length of blockage wire on layer at \c depth. - - //! \function float GCell::getFragmentation ( unsigned int depth ) const; - //! \sreturn The longest free fragment size on layer \c depth (in percent). - - //! \function float GCell::getFeedthroughs ( unsigned int depth ) const; - //! \sreturn The estimate number of \e occupied tracks on layer \c depth. - //! - //! \see \ref secGCellFeedthrough - - //! \function float GCell::getGlobalsCount ( unsigned int depth ) const; - //! \sreturn The number of global wires that go completly through the GCell at layer \c depth. - //! This do not includes the global wires that begins or ends in the GCell. - - //! \function const vector& GCell::getHSegments () const; - //! \returns The vector of all horizontal AutoSegments that completly goes through the GCell. - - //! \function const vector& GCell::getVSegments () const; - //! \returns The vector of all vertical AutoSegments that completly goes through the GCell. - - //! \function const vector& GCell::getContacts () const; - //! \returns The vector of all AutoContacts owned by the GCell. - - //! \function AutoSegments GCell::getHStartSegments (); - //! \returns A Collection of the horizontal AutoSegments that starts from this GCell. - - //! \function AutoSegments GCell::getVStartSegments (); - //! \returns A Collection of the vertical AutoSegments that starts from this GCell. - - //! \function AutoSegments GCell::getHStopSegments (); - //! \returns A Collection of the horizontal AutoSegments that stops in this GCell. - - //! \function AutoSegments GCell::getVStopSegments (); - //! \returns A Collection of the vertical AutoSegments that stops in this GCell. - - //! \function AutoSegments GCell::getStartSegments ( unsigned int direction ); - //! \returns A Collection of the horizontal or vertical AutoSegments that starts from this GCell - //! according to \c direction. - - //! \function AutoSegments GCell::getStopSegments ( unsigned int direction ); - //! \returns A Collection of the horizontal or vertical AutoSegments that stops in this GCell - //! according to \c direction. - - //! \function size_t GCell::getRoutingPads ( set& rps ); - //! \returns The size of the RoutingPad set. - //! - //! Fills the \c rps set with all the RoutingPads that appears in this GCell. - //! (looks at all the anchors of the owned AutoContact) - - //! \function const Key& GCell::getKey () const; - //! \returns The sorting key of the GCell. - //! - //! \see \ref secGCellSortingKey - - //! \function size_t GCell::checkDensity () const; - //! \returns \c 1 if the GCell is saturated, 0 otherwise. - //! - //! Check, if the GCell is saturated, layer by layer. Issue a warning - //! if that is the case. - - //! \function bool GCell::checkEdgeSaturation ( float threshold ) const; - //! \returns \true if the Up/Right edge is over the \c threshold. - //! - //! Check if the number of AutoSegments crossing the Up & Right edges of the GCell - //! exceed \c threshold. The \c thresold must be expressed as a percentage of - //! the full capacity of the edges. The overload is computed as a whole and not - //! depth by depth. - - //! \function void GCell::addBlockage ( unsigned int depth, DbU::Unit length ); - //! Adds \c length of wire blockage to layer \c depth. - - //! \function void GCell::addHSegment ( AutoSegment* segment ); - //! Adds \c segment to the list of horizontal feedthroughs. - - //! \function void GCell::addVSegment ( AutoSegment* segment ); - //! Adds \c segment to the list of vertical feedthroughs. - - //! \function void GCell::addContact ( AutoContact* contact ); - //! Adds \c contact to the list of contacts owned by this GCell. - - //! \function void GCell::removeHSegment ( AutoSegment* segment ); - //! Removes \c segment to the list of horizontal feedthroughs. - - //! \function void GCell::removeVSegment ( AutoSegment* segment ); - //! Removes \c segment to the list of vertical feedthroughs. - - //! \function void GCell::removeContact ( AutoContact* contact ); - //! Removes \c contact to the list of contacts owned by this GCell. - - //! \function void GCell::updateContacts (); - //! Force a geometry update on all the AutoContact of the GCell. - - //! \function size_t GCell::updateDensity (); - //! \sreturn \true if the GCell is saturated. - //! - //! Update the various densities of the GCell. No actual computation is - //! performed if the GCell is \e not invalidated. - - //! \function void GCell::updateKey ( unsigned int depth ); - //! Update the GCell key with the new density at layer \c depth. - //! - //! \see \ref secGCellSortingKey. - - //! \function bool GCell::stepDesaturate ( unsigned int depth, set& globalNets, AutoSegment*& moved, unsigned int flags=0 ); - //! \param depth The depth to desaturate. - //! \param globalNets The set of Nets of which at least one segment has been moved up. - //! \param moved The moved up AutoSegment. - //! \param flags If KbForceMove is set, force one AutoSegment to move up, event if - //! the GCell is not saturated in the relevant depth. - //! - //! \sreturn \true if an AutoSegment has actually been moved up. - //! - //! Perform the atomic desaturation, that is move up one AutoSegment from - //! layer \c depth to layer depth+2, longuests AutoSegments are - //! moved first. Only global feedthrough AutoSegments are candidates to be - //! moved up. The Net owning the moved up segment is added to the \c globalNets - //! set. If the GCell is not saturated on layer \c depth, nothing is - //! done. If the \c forced flag is set, one global AutoSegment is moved up - //! regardless of the saturation status. - //! - //! \see \ref secGCellDesaturation - - //! \function bool GCell::stepNetDesaturate ( unsigned int depth, set& globalNets, SetIndex& invalidateds ); - //! \param depth The depth to desaturate. - //! \param globalNets The set of Nets of which at least one segment has been moved up. - //! \param invalidateds The set of GCell ids that have been invalidateds. - //! - //! \sreturn \true if a Net has been moved up. - //! - //! Perform a desaturation by whole Net trunk. Select the longest feedthrough - //! AutoSegment in layer \c depth, then attempt to move up the whole Net (all - //! it's global AutoSegments are moved up). - //! - //! \see \ref secGCellDesaturation - - //! \function bool GCell::rpDesaturate ( set& nets ); - //! If the number of RoutingPad in the first routing layer exceed the - //! Session::getSaturateRp() threshold, force a desaturation of layer - //! \c depth 1 until it is below 0.5. - //! - //! \see \ref secGCellDesaturation - - - /*! \class GCell::CompareByIndex - * - * \brief GCell Index Comparison Functor - * - * A comparison functor for GCell, compare by \c index (the linear - * index in the GCellGrid vector. - */ - - //! \typedef typedef set GCell::SetIndex; - //! Shorthand for a set of GCell sorted on their index. - - - /*! \class GCell::CompareByDensity - * - * \brief GCell Density Comparison Functor - * - * A comparison functor for GCell, compare by density on layer \c depth. - */ - - //! \function GCell::CompareByDensity::CompareByDensity ( unsigned int depth ); - //! Build a density comparator for GCells on layer \c depth. - - - /*! \class GCell::Key - * - * \brief GCell Key - Density Cache - * - * This class is used to create a GCell internal cache on density, mainly - * to be used by GCellDensitySet. - */ - - //! \function GCell::Key::Key ( GCell* owner, unsigned int depth ); - //! \param owner The GCell owning the key. - //! \param depth The layer \c depth of the density to use. - //! - //! Key constructor, with an initial value for the cached density. - - //! \function GCell* GCell::Key::getGCell () const; - //! \sreturn The owning GCell. - - //! \function float GCell::Key::getDensity () const; - //! \sreturn The value of the cached density. - - //! \function void GCell::Key::update ( unsigned int depth ); - //! \sreturn Update the density - - - /*! \class GCellDensitySet - * - * \brief GCell Set, sorted by density - * - * A small container helper to manage a set of GCell sorted by density - * on a specific layer \c depth. - * - * The helper is implemented in term of a set. Once inserted in a set - * an element must not have is sorting key changed. But GCell density - * may change due to AutoSegment modifications during the lifetime of - * the set. To circumvent this problem, the GCell provide a key attribute - * to be used specifically with GCellDensitySet. This key act as a cached - * copy of the GCell density which is updated \e only by a call to - * GCell::updateKey() (and \e not GCell::updateDensity()). GCell which - * density have changed and key has to be updated must be signaled to - * set with the GCellDensityQueue::unqueue() method. When we want to - * update the sorting of the set on the new densities, we call - * GCellDensitySet::requeue() which, for each invalidated GCell do: - * - Remove the GCell from the set. - * - Update the key (call GCell::updateKey()). - * - Reinsert the GCell in the set (thus with the updated key). - * - * Typical usage: -\code - GCellDensitySet gcells ( 2, *(getGCellGrid()->getGCellVector()) ); - - while ( true ) { - bool optimized = false; - - std::set::const_iterator igcell = gcells.getGCells().begin(); - for ( ; igcell != gcells.getGCells().end() ; ++igcell ) { - if ( doSomeOptimization(*igcell) ) { - optimized = true; - gcells.unqueue( *igcell ); - } - } - - if (not optimized) break; - - gcells.requeue(); - } -\endcode - * - */ - - //! \function GCellDensitySet::GCellDensitySet ( unsigned int depth ); - //! Create a new empty GCellDensitySet, sorting on density of layer \c depth. - - //! \function GCellDensitySet::GCellDensitySet ( unsigned int depth, const std::vector& gcells ); - //! Create a new empty GCellDensitySet, sorting on density of layer \c depth. - //! Load the queue with the GCells supplied in the \c gcells vector. - - //! \function GCellDensitySet::~GCellDensitySet (); - //! Delete a GCellDensitySet, if the queue is not empty, issue a warning. - - //! \function bool GCellDensitySet::empty () const; - //! \sreturn \true if the queue is empty. - - //! \function size_t GCellDensitySet::size () const; - //! \sreturn the numbers of elements in the queue. - - //! \function const std::set& GCellDensitySet::getGCells () const; - //! \sreturn the list of GCells currently in the queue. - - //! \function size_t GCellDensitySet::insert ( GCell* gcell ); - //! Insert \c gcell into the set. - - //! \function size_t GCellDensitySet::erase ( GCell* gcell ); - //! Remove \c gcell from the set. - - //! \function void GCellDensitySet::unqueue ( GCell* gcell ); - //! Invalidate \c gcell. The density of \c gcell may have changed and needs to be - //! reinserted into the queue. It is temporarily set asides until the next - //! call to GCellDensitySet::requeue(). - - //! \function void GCellDensitySet::requeue (); - //! Reinsert in the queue all the GCells that have been previously - //! invalidated by a call to GCellDensitySet::unqueue(). This function calls - //! GCell::updateKey() before reinserting the GCell. - - } diff --git a/deprecated/katabatic/doc/GCellGrid.dox b/deprecated/katabatic/doc/GCellGrid.dox deleted file mode 100644 index eedf619b..00000000 --- a/deprecated/katabatic/doc/GCellGrid.dox +++ /dev/null @@ -1,110 +0,0 @@ - - // -*- C++ -*- - - namespace Katabatic { - - /*! \class GCellGrid - * - * \brief GCell Grid - * - * The GCell Grid of Katabatic. Although the base template class - * Grid support irregular grid, the GCellGrid is regular, following - * the Knik global router GCells. Only the topmost row and leftmost - * column may have different height or width to cope with the - * design real size. - * - * Due to the regular nature of the grid, the horizontal & vertical - * edges capacities are all identical, and initialized from the - * Katabatic Configuration. - * - * The grid is build from the Knik global routing, so obviously - * a KnikEngine must be attached to the Cell when building the - * GCellGrid. An error is thrown otherwise. - */ - - //! \function GCellGrid* GCellGrid::create( KatabaticEngine* ktbt ); - //! API-space contructor. - - //! \function void GCellGrid::_postCreate (); - //! Perform the GCell & GCell vector allocation. - //! - Read the horizontal and vertical cut lines from Knik and translate - //! them into BaseGrid::Axis. - //! - From the BaseGrid::Axis, deduces the exact positions of the GCells and - //! allocate them. - //! - The GCell allocation is done in a "row by row" fashion consistent - //! with BaseGrid implicit assumptions. - - //! \function void GCellGrid::_preDestroy (); - //! The GCells are deleted at this point. - - //! \function Cell* GCellGrid::getCell() const; - //! \sreturn The associated Cell. - - //! \function KatabaticEngine* GCellGrid::getKatabatic() const; - //! \sreturn The associated KatabaticEngine. - - //! \function unsigned int GCellGrid::getDensityMode() const; - //! \sreturn The computation mode of the GCell densities. - - //! \function size_t GCellGrid::getHEdgeCapacity() const; - //! \sreturn The horizontal edge capacity. As the matrix is regular it is - //! identical for all horizontal edges. - - //! \function size_t GCellGrid::getVEdgeCapacity() const; - //! \sreturn The vertical edge capacity. As the matrix is regular it is - //! identical for all vertical edges. - - //! \function Interval GCellGrid::getUSide( unsigned int direction ) const; - //! \sreturn The side of the whole grid in \c direction. - - //! \function size_t GCellGrid::checkDensity() const; - //! \sreturn The number of GCell saturateds. - //! - //! Check all GCells for saturations. - - //! \function bool GCellGrid::checkEdgeSaturation( float threshold ) const; - //! \sreturn \true if at least one edge is over \c threshold (percentage - //! of occupation). - //! - //! Check all the edges for saturations. - - //! \function void GCellGrid::setDensityMode( unsigned int mode ); - //! Sets the density computation mode. - - //! \function void GCellGrid::updateContacts( unsigned int flags=KbOpenSession ); - //! Force an update on all AutoContact on all the GCells. - //! if \c openSession is \true, enclose the update in a Session. - - //! \function size_t GCellGrid::updateDensity(); - //! \sreturn The number of GCell saturateds. - //! - //! Force a density update on all the GCells. - - //! \enum GCellGrid::DensityMode - //! Various ways of computing the overall density of a GCell. - - //! \var GCellGrid::AverageHVDensity - //! The average density all depths accounted. - - //! \var GCellGrid::AverageHDensity - //! The average density of horizontal layers. - - //! \var GCellGrid::AverageVDensity - //! The average density of horizontal layers. - - //! \var GCellGrid::MaxHVDensity - //! The maximum of the average horizontal & vertical densities taken - //! as a whole. - - //! \var GCellGrid::MaxVDensity - //! The maximum of the average vertical densities taken depth by depth. - - //! \var GCellGrid::MaxHDensity - //! The maximum of the average horizontal densities taken depth by depth. - - //! \var GCellGrid::MaxDensity - //! The maximum of the average horizontal & vertical densities - //! taken depth by depth. - - } - diff --git a/deprecated/katabatic/doc/GCells.dox b/deprecated/katabatic/doc/GCells.dox deleted file mode 100644 index 0545cd44..00000000 --- a/deprecated/katabatic/doc/GCells.dox +++ /dev/null @@ -1,15 +0,0 @@ - - // -*- C++ -*- - - namespace Katabatic { - - //! \typedef typedef GenericCollection GCells; - //! GCell Collection with auto-pointer like support. - - //! \typedef typedef GenericLocator GCellLocator; - //! GCell Locator with auto-pointer like support. - - //! \typedef typedef GenericFilter GCellFilter; - //! GCell Filter with auto-pointer like support. - - } diff --git a/deprecated/katabatic/doc/Grid.dox b/deprecated/katabatic/doc/Grid.dox deleted file mode 100644 index 1c4ef2e5..00000000 --- a/deprecated/katabatic/doc/Grid.dox +++ /dev/null @@ -1,150 +0,0 @@ - - // -*- C++ -*- - - namespace Katabatic { - - /*! \class BaseGrid - * - * \brief Abstract Base Class for Irregular Grid - * - * An abstract class for a 2-D matrix of objects. The grid is irregular - * in the sense that the horizontal and vertical cut lines may not be - * evenly spaced. - * - * The coordinates of cut lines in horizontal and vertical direction - * are stored BaseGrid::Axis structure. - * - * The BaseGrid contains all the non-template methods of the Grid, - * that is that do not depend of the matrix element type. - * - * The internal storage implemented in derived classes is expected to - * store "row by row" (rows are put one after another in the vector). - */ - - //! \function void BaseGrid::destroy(); - //! The user-level destructor. - - //! \function BaseGrid::BaseGrid ( const Box& bb ); - //! Construct a new BaseGrid on area \c bb. Graduations, rows & columns are - //! sets to zero. - - //! \function const Box& BaseGrid::getBoundingBox() const; - //! \sreturn The grid bounding box. - - //! \function unsigned int BaseGrid::getColumns() const; - //! \sreturn The numbers of columns in the grid. - - //! \function unsigned int BaseGrid::getRows() const; - //! \sreturn The numbers of rows in the grid. - - //! \function unsigned int BaseGrid::getRawSize() const; - //! \sreturn The total number of elements in the grid (i.e. \f$ rows \times columns \f$) - - //! \function unsigned int BaseGrid::getIndex( unsigned int c, unsigned int r ) const; - //! An helper function that compute the linear index in the element - //! vector from a \c (c,r) coordinate pair: - //! \f[ index = c + r \times columns \f] - - //! \function unsigned int BaseGrid::getRow( unsigned int i ) const; - //! An helper function that compute the row number from the linear index in - //! the vector: - //! \f[ row = index / columns \f] - - //! \function unsigned int BaseGrid::getColumn( unsigned int i ) const; - //! An helper function that compute the column number from the linear index in - //! the vector: - //! \f[ column = index \div columns \f] - - //! \function const Axis& BaseGrid::getXGrads() const; - //! \sreturn The graduations on the X axis. - - //! \function const Axis& BaseGrid::getYGrads() const; - //! \sreturn The graduations on the Y axis. - - - - /*! \class BaseGrid::Axis - * - * \brief Graduations on a BaseGrid Axis (H or V). - * - * Describe the list of graduations on either X or Y axis of a - * BaseGrid. Graduations correspond to cut lines and may not be - * evenly spaced. - * - * Graduations are internally stored into a vector that needs to be - * sorted whenever new graduations are added (BaseGrid::Axis::sort()). - */ - - //! \function void BaseGrid::Axis::addGraduation ( DbU::Unit pos ); - //! Adds a new graduation. After adding new graduations, do not forget - //! to perform a sort. - - //! \function void BaseGrid::Axis::sort (); - //! Re-order the graduations after an addition. - - //! \function size_t BaseGrid::Axis::getSize () const; - //! \sreturn The number of graduations on the axis. - - //! \function DbU::Unit BaseGrid::Axis::getGraduationNumber ( DbU::Unit pos, bool& onGraduation ) const; - //! \sreturn The index of the graduation which is immediatly inferior or equal to \c pos. - //! In case of strict equality, \c onGraduation is set to \true. - - //! \function DbU::Unit BaseGrid::Axis::operator[] ( unsigned int index ) const; - //! \sreturn The graduation at \c index. - - - /*! \class Grid - * - * \brief Template Class for Regular Grid - * - * Contains all general purpose methods depending on the GCell type - * and geometrical computations. The internal storage is still not implemented - * in this class. - */ - - //! \function Grid::Grid ( const Box& ); - //! Grid constructor. - - //! \function CGellT* Grid::getGCell ( unsigned int index ) const; - //! \sreturn The grid object at linear index \c index in the vector. - //! If \c index is out of bounds, return \c NULL. - - //! \function CGellT* Grid::getGCell ( const Point p ) const; - //! \sreturn The grid object which is under position \c p. - //! - - //! \function CGellT* Grid::getGCell ( const Point p1, const Point p2 ) const; - //! \sreturn The grid object which is under position \c p1 and \c p2. - //! Not very clear though. - - //! \function CGellT* Grid::getGCellLeft ( const GCellT* gcell ) const; - //! \sreturn The left neighbor of \c gcell, \c NULL if it is the leftmost one. - //! - - //! \function CGellT* Grid::getGCellRight ( const GCellT* gcell ) const; - //! \sreturn The rigth neighbor of \c gcell, \c NULL if it is the rightmost one. - //! - - //! \function CGellT* Grid::getGCellUp ( const GCellT* gcell ) const; - //! \sreturn The upper neighbor of \c gcell, \c NULL if it is the uppermost one. - //! - - //! \function CGellT* Grid::getGCellDown ( const GCellT* gcell ) const; - //! \sreturn The down neighbor of \c gcell, \c NULL if it is the downmost one. - //! - - //! \function GenericCollection Grid::getGCells (); - //! \sreturn A GCellT Hurricane collection built upon the linear GCellT vector of - //! the grid. - - //! \function GenericCollection Grid::getGCellsColumn ( unsigned int column, unsigned int rowStart, unsigned int rowStop ); - //! \sreturn A GCellT Hurricane collection that contains the part of \c column starting - //! from \c rowStart to \c rowStop inclusive. - - //! \function GenericCollection Grid::getGCellsRow ( unsigned int row, unsigned int columnStart, unsigned int columnStop ); - //! \sreturn A GCellT Hurricane collection that contains the part of \c row starting - //! from \c columnStart to \c columnStop inclusive. - - } - - diff --git a/deprecated/katabatic/doc/Katabatic.dox b/deprecated/katabatic/doc/Katabatic.dox deleted file mode 100644 index ed277bb3..00000000 --- a/deprecated/katabatic/doc/Katabatic.dox +++ /dev/null @@ -1,19 +0,0 @@ - // -*- C++ -*- - - //! \mainpage Katabatic Documentation - //! - //! Additionnal documents: - //! - \ref grpSynthHierarchy - //! - //! \defgroup grpSynthHierarchy Synthetic Class Hierarchy - //! \brief Simplificated class hierarchy - //! - //! \htmlinclude customHierarchy.html - - namespace Katabatic { - - /*! \namespace Katabatic - * \brief The namespace dedicated to Katabatic. - */ - - } diff --git a/deprecated/katabatic/doc/KatabaticEngine.dox b/deprecated/katabatic/doc/KatabaticEngine.dox deleted file mode 100644 index 451470fa..00000000 --- a/deprecated/katabatic/doc/KatabaticEngine.dox +++ /dev/null @@ -1,307 +0,0 @@ - - // -*- C++ -*- - - namespace Katabatic { - - /*! \class KatabaticEngine - * - * \brief The Katabatic Tool - * - * - * \section secEngineStates States of KatabaticEngine - * - * During it's lifecycle, the engine go through a serie of states. - * It only can go forward between states. - * - \b EngineCreation : just after C++ object creation until - * the global routing is loaded. - * - \b EngineGlobalLoaded : \e after the global routing has - * been done. This state must be set by an external tool, - * Katabatic cannot know by itself when the global routing - * has been done (see Kite). - * - \b EngineActive : \e after the global routing has been - * converted into the Katabatic data structure. At this point - * the tool is ready to run. - * - \b EngineDriving : \e during the stage of stripping all - * the decorations the tool has added over the Hurricane data - * structure (mostly: AutoContact & AutoSegment). - * - \b EngineGutted : \e after the tool decorations have been - * removed. The tool is now useless and can only be destroyed. - * - \b EnginePreDestroying : this special state is reached when - * going straight from EngineActive to the destructor, that is, - * skipping the EngineDriving state. That means we do not - * want to save whatever routing has been done. In that case, - * not only the tool decorations are destroyeds, but also the - * Hurricane data-structures they relies on (Contact, Segments). - * - * - * \section secEngineImpl KatabaticEngine Implementation Details - * - * Due to the size of the code and the fact that the main body - * of some methods do not need to be present in the class, - * the implementation of KatabaticEngine is split in several - * files. The list below summarize them: - * - \c KatabaticEngine.cpp : the core of the class, methods that really - * need their bodies here. - * - \c PowerRails.cpp : utilities to construct an abstract from all - * the power rails through the hierarchy. - * - \c LayerAssign.cpp : layer assignement related methods and helpers. - * - \c LoadGrByNet.cpp : global routing loader, transform global routing - * into Katabatic data-structure. - * - \c NetConstraints.cpp : compute the topological constraints of all - * AutoSegment/AutoContact of a Net. - * - \c NetOptimals.cpp : compute the optimal positions of all AutoSegment - * of a Net. - */ - - //! \enum EngineState - //! Describe the current state of the KatabaticEngine. - - //! \var EngineCreation - //! The tool is created, but still in the \c _postCreate stage. - - //! \var EngineGlobalLoaded - //! The global routing has been loaded from Knik. - - //! \var EngineActive - //! The Engine is in normal running mode (routing ordinary wires). - - //! \var EngineDriving - //! The Engine is transforming the AutoContact/AutoSegment into - //! normal Contact/Segment (prior to tool deletion). - - //! \var EnginePreDestroying - //! This state is used whenever the tool is destroyed without passing - //! through the EngineDriving state. - - //! \var EngineGutted - //! After the EngineDriving state, all the working structures are - //! removed and the tool can no longer be used. It only awaits clean - //! destruction. - - //! \typedef set KatabaticEngine::NetSet; - //! Set of Net to be routed, alphabetically sorteds. - - - //! \function KatabaticEngine* KatabaticEngine::create ( Cell* cell ); - //! Create a KatabaticEngine on \c cell. - - //! \function const Name& KatabaticEngine::staticGetName (); - //! \sreturn The unique string identifier for the KatabaticEngine class of ToolEngine. - - //! \function bool KatabaticEngine::isGMetal ( const Layer* layer ) const; - //! \sreturn \true if \c layer is one of the special (fake) metals used to build - //! the global routing. - - //! \function bool KatabaticEngine::isChip () const; - //! \sreturn \true if the hierarchy top-level of the Cell matches the one of a complete - //! design (i.e. pads and one core instance). - - //! \function bool KatabaticEngine::isInDemoMode () const; - //! \sreturn \true if the tool is in demo mode, that is suppress almost all warning - //! and debug messages. - - //! \function bool KatabaticEngine::doWarnOnGCellOverload () const; - //! \sreturn \true if the tool should issue a warning when a GCell is overloaded - //! (overload could be transient). - - //! \function bool KatabaticEngine::doDestroyBaseContact () const; - //! \sreturn \true if the EngineDestroyBaseContact is set, meaning that when an - //! AutoContact is destroyed, the Contact it decorates is destroyed - //! altogether. - - //! \function bool KatabaticEngine::doDestroyBaseSegment () const; - //! \sreturn \true if the EngineDestroyBaseSegment is set, meaning that when an - //! AutoSegment is destroyed, the Segment it decorates is destroyed - //! altogether. - - //! \function bool KatabaticEngine::doDestroyTool () const; - //! \sreturn \true if the tool state is beyond EngineStateGutted, that is, only - //! waits for \c destroy() to be called. - - //! \function const Name& KatabaticEngine::getName () const; - //! \sreturn The unique string identifier for the KatabaticEngine class of ToolEngine. - - //! \function EngineState KatabaticEngine::getState () const; - //! \sreturn The state the tool is currently in. - - //! \function unsigned int KatabaticEngine::getFlags ( unsigned int mask ) const; - //! \sreturn The \e anded combination of the tool flags and \c mask. - - //! \function Configuration* KatabaticEngine::getKatabaticConfiguration (); - //! \sreturn The Configuration of Katabatic. In this class it is redundant with - //! getConfiguration(), but may be useful in derived classes. - - //! \function Configuration* KatabaticEngine::getConfiguration (); - //! \sreturn The Configuration of the current ToolEngine. - - //! \function RoutingGauge* KatabaticEngine::getRoutingGauge () const; - //! \sreturn The RoutingGauge (Configuration shortcut). - - //! \function RoutingLayerGauge* KatabaticEngine::getLayerGauge ( size_t depth ) const; - //! \sreturn The RoutingLayerGauge associated to \c depth (Configuration shortcut). - - //! \function const Layer* KatabaticEngine::getRoutingLayer ( size_t depth ) const; - //! \sreturn The routing Layer associated to \c depth (Configuration shortcut). - - //! \function Layer* KatabaticEngine::getContactLayer ( size_t depth ) const; - //! \sreturn The contact Layer associated to \c depth (Configuration shortcut). - - //! \function DbU::Unit KatabaticEngine::getGlobalThreshold () const; - //! \sreturn The length above which a global wire is moved up in the layer assignment - //! stage (Configuration shortcut). - - //! \function float KatabaticEngine::getSaturateRatio () const; - //! \sreturn The ratio above which a GCell is considered to be saturated - //! (Configuration shortcut). - - //! \function DbU::Unit KatabaticEngine::getExtensionCap () const; - //! \sreturn The wires extension cap, same for all layers for the time beeing - //! (Configuration shortcut). - - //! \function size_t KatabaticEngine::getSaturateRp () const; - //! \sreturn The number of RoutingPad above which a GCell is saturated, causing - //! extras global segments to be moved up. - //! (Configuration shortcut). - - //! \function GCellGrid* KatabaticEngine::getGCellGrid () const; - //! \sreturn The GCellGrid. - - //! \function const NetSet& KatabaticEngine::getRoutingNets () const; - //! \sreturn The set of nets to be routeds. - - //! \function const ChipTools& KatabaticEngine::getChipTools () const; - //! \sreturn The chip tools (for whole designs). - - //! \function void KatabaticEngine::xmlWriteGCellGrid ( ostream& ); - //! Write in a stream all informations on the GCells in XML format. - - //! \function void KatabaticEngine::xmlWriteGCellGrid ( const string& ); - //! Write in a file all informations on the GCells in XML format. - - //! \function void KatabaticEngine::setState ( EngineState state ); - //! Force the state of the tool. Must be used with caution, as no sanity - //! checks are performeds. This method is normally invoked from inside - //! the KatabaticEngine various methods. - - //! \function void KatabaticEngine::setFlags ( unsigned int flags ); - //! Set the flags given in \c flags. - - //! \function void KatabaticEngine::unsetFlags ( unsigned int flags ); - //! Reset the flags given in \c flags. - - //! \function void KatabaticEngine::setGlobalThreshold ( DbU::Unit ); - //! (Configuration shortcut). - - //! \function void KatabaticEngine::setSaturateRatio ( float ); - //! (Configuration shortcut). - - //! \function void KatabaticEngine::setSaturateRp ( size_t ); - //! (Configuration shortcut). - - //! \function void KatabaticEngine::startMeasures (); - //! Starts memory consuption & time measurements. - - //! \function void KatabaticEngine::stopMeasures (); - //! Stops memory consuption & time measurements. Recorded measures are - //! kept until the next call to Katabatic::startMeasures(). - - //! \function void KatabaticEngine::printMeasures ( const string& tag ) const; - //! Print memory & time measurement on ``cmess1``. If \c tag is not empty, - //! also adds the measurement to the internal table (with \c tag as label). - - //! \function void KatabaticEngine::refresh ( unsigned int flags=KbOpenSession ); - //! In case the tool is associated with a graphic display, trigger - //! a full redraw of the Cell. Slow the router but allow to see work - //! in progress... If \c flags do not contains \c KbOpenSession - //! the refresh operation will not be enclosed inside it's own session. - //! This assumes that a session is already opened. - - //! \function void KatabaticEngine::makePowerRails (); - //! Detect all the aligned segments of same width that compose power - //! rails, unificate them and copy them at the design top level. - - //! \function void KatabaticEngine::createDetailedGrid (); - //! Allocate the GCellGrid. - - //! \function void KatabaticEngine::loadGlobalRouting ( unsigned int method, NetSet& nets ); - //! \param method the loading algorithm - //! \param nets the set of nets to route. - //! - //! Convert the global routing into the initial detailed routing. For the - //! time beeing, only one loading algorithm is available: net by net - //! (EngineLoadGrByNet). Only Net given in \c nets are routeds. If \c nets is empty - //! then all ordinary nets are routeds. In either cases the set of nets to route - //! is pruned from any power, ground or clock signals. - //! - //! \remark The tool state must be \b EngineGlobalLoaded \e before calling this method - //! and will be set to \b EngineActive on exit. - - //! \function void KatabaticEngine::layerAssign ( unsigned int method ); - //! Perform the layer assignment. The global routing loading stage uses only - //! the two bottom most layers, this method spread them on all the availables - //! routing layers, according to GCell and RoutingPad density criterions. - //! - //! Two algorithms are availables: - //! - \b EngineLayerAssignByLength : the global wires are moved up one by - //! one. - //! - \b EngineLayerAssignByTrunk : if one global wire of a net is to be - //! moved up, then all the global trunk of the net is moved along. - //! This methods gives the best results for now. - - //! \function void KatabaticEngine::finalizeLayout (); - //! Transform the Katabatic wires into the Hurricane data-structure. - //! Mostly by removing the AutoSegment/AutoContact \e without removing - //! their Hurricane conterparts. May also fill gaps that may have appeared. - //! - //! \remark The tool state must be \b EngineActive \e before calling this method - //! and will be set to \b EngineGutted on exit. - - //! \function void KatabaticEngine::slackenBorder ( Box bb, Layer::Mask mask, unsigned int flags ); - //! \param bb The bounding box, defines the edges. - //! \param mask Consider only layers that are fully included in that mask. - //! \param flags Consider only segment in that direction. - //! - //! Perform a preventive break on all global segments going through the - //! \e vertical left and right edges of the \c bb box. The set of global - //! segments to be broken could be further restricted using \c mask and - //! \c flags. - //! - //! The Semantic of \c flags is not clear, must review the - //! code more closely. - - //! \function void KatabaticEngine::slackenBlockIos ( Instance* core ); - //! Perform a preventive break on horizontal segments in the GCell immediatly - //! \e outside the instance \c core area in the routing layer of index \c 1. - //! - //! \red{This method is too much hardwired to the \c SxLib gauge. It's effect is to break all \b METAL2 outside the core (in a chip).} - - //! \function bool KatabaticEngine::moveUpNetTrunk ( AutoSegment* seed, set& globalNets, GCell::SetIndex& invalidateds ); - //! \param seed The AutoSegment to take the net from. - //! \param globalNets The set of nets that has been moved up. - //! \param invalidateds The set of GCells that have been invalidated. - //! \sreturn \true if the net trunk have been moved up. - //! - //! Try to move up a whole net trunk. The net is supplied through the \c seed - //! argument (the segment that triggers the move). If the net is actually moved - //! up, it is added to \c globalNets and all GCells that have been invalidateds - //! are added to \c invalidateds. - //! - //! An individual AutoSegment of the net is moved up if it's length - //! is greater that \c 150 lambdas, that is, three times the side of a GCell. This is - //! hard-wired and should be parametrized in the future. - - //! \function void KatabaticEngine::computeNetConstraints ( Net* net ); - //! Compute the box constraints on AutoContacts (and therefore those applied to - //! AutoSegments). Constraints comes from AutoContacts anchoreds on RoutingPads - //! and transmitted through AutoContactHTee or AutoContactVTee. Constraints are - //! applied to all AutoContacts of an aligned set. - //! - //! \remark The \c net must have been canonized before this function to be called. - - //! \function void KatabaticEngine::toOptimals ( Net* net ); - //! Move all AutoSegment of \c net so that their axis are inside their - //! optimals interval. If a AutoSegment is already inside the interval is - //! not moved, otherwise it is put on the nearest bound of the optimal - //! interval. - - } diff --git a/deprecated/katabatic/doc/Modifications.rst b/deprecated/katabatic/doc/Modifications.rst deleted file mode 100644 index a24debb2..00000000 --- a/deprecated/katabatic/doc/Modifications.rst +++ /dev/null @@ -1,52 +0,0 @@ - -.. -*- Mode: rst -*- - -.. role:: raw-latex(raw) - :format: latex - -.. role:: ul -.. role:: cb -.. role:: sc - - -========================= -Katabatic 3 Modifications -========================= - - -General Structuration -===================== - -* Short-circuit the usage of the Hurricane DataBase. Now AutoContacts - & AutoSegments are cached directly in the relevant objects. This is - way bigger, but should be faster. And anyway simpler to write by - suppressing Ring walkthrough and Session::lookup() calls. - - -AutoContact -=========== - -* Now splitted in four sub-classes: - - * AutoContactTerminal - * AutoContactTurn - * AutoContactHTee - * AutoContactVTee - -* isCorner() renamed isTurn(). -* isTerminal() is now ambiguous. It may be flag an AutoContact which *is* - an AutoContactTurn indeed or an AutoContactTurn leading uniquely toward - a Terminal. - - -AutoHorizontal/AutoVertical -=========================== - -* New AutoSegment::makeTopologyDogLeg() creates dogleg needed by topological - adjustments on AutoContact. They are not counted (nor signaled) as explicit - dogleg request. **To Implement**. - -* The local ``slacken()`` methods are, in fact AutoSegment::makeTopologyDogLeg(). - -* We now must be able to create AutoHorizontal/AutoContact without suppling - the anchor AutoContacts. Allows more supple building constructions. diff --git a/deprecated/katabatic/doc/Observer.dox b/deprecated/katabatic/doc/Observer.dox deleted file mode 100644 index 9f460e07..00000000 --- a/deprecated/katabatic/doc/Observer.dox +++ /dev/null @@ -1,86 +0,0 @@ - // -*- C++ -*- - - namespace Katabatic { - - /*! \class Observable - * - * \brief Observer Design Pattern, Subject part. - * - * - * Observable is the implementation of the \e subject part of the - * Observer design pattern. For the time beeing it's a simplificated - * version that allows only one Observer to watch the subject. - * - * Observable is designed to be an attribute of the subject, not one - * of it's base class. - * - * This implantation is completly generic and has nothing specific - * to Katabatic. It may be moved sometimes in Hurricane at Property - * level in Hurricane::DBo. - * - * Note to Myself: Observer pattern is the one behind signal/slots. - */ - - //! \function Observable::Observable (); - //! Default and only constructor. The copy constructor is disabled - //! (made private and unimplemented). - - //! \function T* Observable::getObserver (); - //! \sreturn The (only) observer, \c NULL if there is none. It is the object - //! of which the Observer is an attribute, that is, it's \e owner, and not - //! the Observer itself which is returned. - - //! \function void Observable::addObserver ( BaseObserver* observer ); - //! Adds an observer. If more than one is added, throw an error. - - //! \function void Observable::removeObserver ( BaseObserver* observer ); - //! Removes an observer. If the observer do not belong to this observable, - //! throw an exception. - - //! \function void Observable::notify ( unsigned int flags ); - //! Used by the subject to signal a change in it's state to the observers. - //! The \c flags parameter can be used to indicates what kind of change - //! is occuring. Values for \c flags are defined between the subject and - //! the observers. - - - /*! \class BaseObserver - * - * \brief Observer Design Pattern, Observer part. - * - * This class is used as a non-template base class for the templatized - * Observer one. It is used to avoid propagating template to the whole - * Observable class. It only contains the Observer::notify() virtual - * method. - */ - - //! \function void BaseObserver::notify ( unsigned int flags ); - //! The method which will be called whenever a change occurs on the Observable. - - - /*! \class Observer - * - * \brief Observer Design Pattern, Observer part. - * - * First, a warning about names: although this class is named - * Observer, it is intended to be an attribute nested inside the - * whole object which is indeed, the true Observer. This nesting object - * is called, most of the time the \b owner in the following. But - * sometimes, for simplification it may also be called the Observer. - * - * \section secImplObserver Observer Implementation Notes - * - * To retrieve the \e owner from the Observer attribute, we uses the - * offset from the attribute in the \e owner. This offset is computed - * once and for all the first time the template constructor is called. - */ - - //! \function Observer::Observer ( const T* owner ); - //! The owner of the oberver is needed to compute, on the first creation - //! only, the offset of the Observer attribute inside the \c owner complete - //! object. - - //! \function T* Observer::getOwner () const; - //! \sreturn The owner of the observer. - - } diff --git a/deprecated/katabatic/doc/Session.dox b/deprecated/katabatic/doc/Session.dox deleted file mode 100644 index 567239f0..00000000 --- a/deprecated/katabatic/doc/Session.dox +++ /dev/null @@ -1,218 +0,0 @@ - // -*- mode: C++; explicit-buffer-name: "Session.dox" -*- - - namespace Katabatic { - - /*! \class Session - * - * \brief Modification Session for Katabatic - * - * To perform modifications, the Katabatic data structure uses a session - * mechanism built on top of the Hurricane::UpdateSession one. Sessions - * obeys very simples rules: - * - Only one Session can be opened at a time with Session::open(). - * - Subsequent calls to Session::open() returns the currently - * opened session until Session::close() is called. - * - Revalidation can take place whithout closing the Session by - * calling Session::revalidate(). - * - * The task of a Session is to keep track of the AutoContact and - * AutoSegment that have been modificateds (i.e. invalidated) and, - * to restore connexity and/or topology when closed. - * - * Two kinds of revalidation could be performed: - *
    - *
  • \b Geometrical : only positions of AutoContacts and AutoSegments - * extensions are recomputed. - *
  • \b Topological : a whole net have been invalidated because of a - * dogleg creation or a move up/move down of a segment. - *
      - *
    • \b Dogleg : needs to insert the newly created AutoSegments - * and AutoContacts. - *
    • Move up/Move down : may needs to create additional - * dogleg to restore connexity (gaps), and then insert them - * like above. - *
    - * After a topological mofication has been done, the net needs to - * be re-canonized then the geometrical step takes place. - *
- * - * The kind of revalidation needed is automatically detected by - * the Session. - * - * In addition to it's main purpose, Session also provides cached - * access to frequently needed variables either from Hurricane - * or Katabatic Configuration and access to the AutoContact & - * AutoSegment LUTs of KatabaticEngine. - * - * From a software point of view, Session is a singleton object. - * - * - * \section secSessionAlgo Session Algorithm - * - * Main attributes of a Session: - * - \c _netInvalidateds, nets on which topology has changed. - * - \c _autoSegments, that have been moved or createds. - * - \c _autoContacts, that have been created or one of their - * slave segment has moved. - * - \c _revalidateds, the list of AutoSegments that have just - * been revalidated (after calling \c revalidate()). - * - * Schematic description of how a Session works: - * - *
    - *
  • If at least one net has been invalidated, meaning that it's - * topology has changed, perform \c _revalidateTopology(). - *
      - *
    • Update net topology: correct the topology of each - * contacts, making dogleg when needed. The AutoContact - * segment caching is updated at this point. - *
    • Compute net constraints (on AutoContacts & AutoSegments). - *
    • Compute net optimal positions (on AutoSegments). - *
    • Compute the state of the segments regarding to terminals. - *
    • Canonize sets of aligneds segments. The canonical segment - * is the one with the lowest \c id. - *
    • If the segments has just been created, put it on its - * optimal axis. - *
    - * This stage can add itself more invalidated AutoSegments and - * AutoContacts as it create doglegs. - * - *
  • Revalidate geometry of AutoContacts. That is, expand or shrink - * the extremities of the invalidated AutoSegments. Note that - * AutoSegments are already at on their final axis position. - * - *
  • Revalidate AutoSegments. Just before this stage, they are - * on the correct axis and their extensions are also correct, - * so we may update the caching of their characteristics - * (mostly the extension). - *
- */ - - //! \function Session* Session::get ( const char* message=NULL ); - //! Return the Session singleton, if no session is currently open - //! throw an exception carrying \c message. - - //! \function Technology* Session::getTechnology (); - //! Hurricane shortcut. - - //! \function KatabaticEngine* Session::getKatabatic (); - //! Katabatic shortcut. - - //! \function const Configuration* Session::getConfiguration (); - //! Katabatic shortcut. - - //! \function RoutingGauge* Session::getRoutingGauge (); - //! Katabatic shortcut. - - //! \function unsigned int Session::getLayerDirection ( const Layer* layer ); - //! Returns the preferred routing direction of \c layer, as per defined - //! in the RoutingGauge. - //! - //! \remark The value returned is transformed from the CRL Constants value - //! into Katabatic constants (Katabatic::KbHorizontal, Katabatic::KbVertical). - - //! \function bool Session::isInDemoMode (); - //! Katabatic shortcut. - - //! \function float Session::getSaturateRatio (); - //! Katabatic shortcut. - - //! \function size_t Session::getSaturateRp (); - //! Katabatic shortcut. - - //! \function bool Session::doWarnGCellOverload (); - //! Katabatic shortcut. - - //! \function DbU::Unit Session::getExtensionCap (); - //! Katabatic shortcut. - - //! \function const Layer* Session::getRoutingLayer ( size_t ); - //! Katabatic shortcut. - - //! \function const Layer* Session::getContactLayer ( size_t ); - //! Katabatic shortcut. - - //! \function size_t Session::getSegmentStackSize (); - //! \sreturn The number of AutoSegment in the invalidated stack. - - //! \function size_t Session::getContactStackSize (); - //! \sreturn The number of AutoSegment in the invalidated stack. - - //! \function const vector& Session::getInvalidateds (); - //! \sreturn The stack (vector) of invalidateds AutoSegments. - - //! \function const vector& Session::getRevalidateds (); - //! \sreturn The stack (vector) of AutoSegments that have been revalidateds. - - //! \function const vector& Session::getDoglegs (); - //! \sreturn The vector of AutoSegments part of a newly created dogleg. - //! The dogleg creation functions in AutoHorizontal and AutoVertical - //! put a triplet (for example in horizontal direction \c (h1,v1,h2) ) - //! for each dogleg composed of: - //! - \b h1 the segment \e before the dogleg (which is also the original one). - //! - \b v1 the segment \b perpandicular (new). - //! - \b h2 the segment \b after (new). - - //! \function const set& Session::getNetsModificateds (); - //! \sreturn The set of Nets that needs either a topological update or a new - //! canonization. - - //! \function Session* Session::open ( KatabaticEngine* ); - //! Opens a new session or returns the already opened one, if any. - - //! \function void Session::close (); - //! Close the Session, triggering the revalidation of the AutoSegemnts - //! and AutoContacts. If no Session is opened, throws an execption. - - //! \function void Session::setKatabaticFlags ( unsigned int ); - //! Katabatic shortcut. - - //! \function void Session::dogleg ( AutoSegment* ); - //! Adds an AutoSegment to the dogleg vector. - - // \function void Session::doglegReset (); - // Clears the dogleg vector. - - //! \function void Session::revalidateTopology (); - //! Revalidate Net that have been invalidateds and re-canonize them. - - //! \function void Session::setInvalidateMask ( unsigned int flags ); - //! Tells what kind of revalidation must be performed. - - //! \function void Session::invalidate ( Net* net ); - //! Schedule \c net for a full revalidation, topological correction - //! and canonization. - - //! \function void Session::invalidate ( AutoSegment* segment ); - //! Schedule \c segment for revalidation. - - //! \function void Session::invalidate ( AutoContact* contact ); - //! Schedule \c contact for revalidation. - - //! \function size_t Session::revalidate (); - //! Perform the revalidation. Returns the sum of AutoContacts and - //! AutoSegemnts that have been revalidated. - - //! \function void Session::link ( AutoContact* ac ); - //! Adds \c ac in the AutoContact lookup table (allow to retrieve an - //! AutoContact by it's base Contact). - - //! \function void Session::link ( AutoSegment* as ); - //! Adds \c as in the AutoSegment lookup table (allow to retrieve an - //! AutoSegment by it's base Segment). - - //! \function void Session::unlink ( AutoContact* ac ); - //! Removes \c ac from the AutoContact lookup table. - - //! \function void Session::unlink ( AutoSegment* as ); - //! Removes \c as from the AutoSegment lookup table. - - //! \function AutoContact* Session::lookup ( Contact* contact ); - //! Lookup the AutoContact associated with \c contact. \c NULL if not found. - - //! \function AutoSegment* Session::lookup ( Segment* segment ); - //! Lookup the AutoSegment associated with \c segment. \c NULL if not found. - - } - - diff --git a/deprecated/katabatic/doc/SoC.css b/deprecated/katabatic/doc/SoC.css deleted file mode 100644 index 14a78b58..00000000 --- a/deprecated/katabatic/doc/SoC.css +++ /dev/null @@ -1,882 +0,0 @@ - - -/* - * +-----------------------------------------------------------------+ - * | HTML Standart Tags | - * +-----------------------------------------------------------------+ - */ - - html, body, th, td, tr, p, li, h1, h2, h3, h4, h5, h6 { - font-size: 11pt; - /* The Open Sans font family is supplied by TexLive. */ - font-family: "Roboto", "Open Sans", Verdana, sans-serif;; - } - - html { - background: #dddddd; - } - - body { - color: black; - background: white; - background-color: white; - background-position: top left; - background-attachment: fixed; - background-repeat: no-repeat; - margin-top: 2em; - width: 600pt; - margin-right: auto; - margin-left: auto; - padding: 30pt; - /* - margin-right: 12%; - margin-left: 12%; - */ - } - - hr { - height: 1px; - border: 0; - color: #004400; - background-color: #004400; - } - - - h1, h2, h3, h4, h5, h6 { - /*font-family: "URW Bookman L", "Liberation Serif", sans-serif;*/ - font-family: "URW Bookman L"; - } - - h1.header { text-align: center; } - h1 { text-align: left; } - h2, h3, h4, h5, h6 { text-align: left; - padding-top: 11pt; - } - h1, h2, h3 { /*font-family: "Liberation Serif", sans-serif; */ - /*color: #09550B;*/ - } - h1 { font-weight: bold; font-size: 170%; /*letter-spacing:0.2em; word-spacing:0.4em;*/ } - h2 { font-weight: bold; font-size: 140%; /*letter-spacing:0.2em; word-spacing:0.4em;*/ } - h3 { font-weight: bold; font-size: 118%; /*letter-spacing:0.2em; word-spacing:0.4em;*/ } - h4 { font-weight: bold; font-size: 100%; } - h5 { font-style: italic; font-size: 100%; } - h6 { font-variant: small-caps; font-size: 100%; } - - h2.classHierarchy { - /*border: 1px none #008500;*/ - border: 1px none #000000; - border-top-width: 1px; - border-top-style: dotted; - padding-top: 1em; - } - - - .hide { - display: none; - color: white; - } - - - p { - margin-top: 0.6em; - margin-bottom: 0.6em; - margin-left: 0.0em; - margin-right: 0.0em; - } - - - address { - text-align: right; - font-weight: bold; - font-style: italic; - font-size: 80%; - } - - - caption { font-weight: bold } - - - blockquote { - margin-left: 4em; - margin-right: 4em; - margin-top: 0.8em; - margin-bottom: 0.8em; - font-style: italic; - color: #003300; - } - - blockquote p { - margin-bottom: 0; - } - - blockquote address { - margin: 0; - } - - - table { - border-collapse: collapse; - } - - dt, dd { margin-top: 0; margin-bottom: 0; } - dt { font-weight: bold; } - - - pre, tt, code { - /*font-family: "andale mono", monospace;*/ - font-size: 100%; - white-space: pre; - } - - pre { - font-size: 80%; - /*border: dashed;*/ - border-width: thin; - border-color: #003300; - /*background-color: #EEEEEE;*/ - background-color: #FCFCE1; - padding: 0.5em; - margin-left: 2em; - margin-right: 2em - } - -/* - tt { color: green; } - */ - em { font-style: italic; - font-weight: normal; } - strong { font-weight: bold; } - - span.textit { font-style: italic; } - span.textbf { font-weight: bold; } - - .small { font-size: 90%; } - .white { color: #FFFFFF; } - - - ul.toc { - list-style: disc; - list-style: none; - } - - - a:link img, a:visited img { border-style: none; } - a img { color: white; } - - a { - color: black; - border-bottom: 1px solid black; - text-decoration: none; - } - - a:link, a:active, a:visited { - /*color: #09550B;*/ - /*text-decoration: none;*/ - } - - a:hover, a:focus { - /*color: #FF9900; */ - border-bottom: 2px solid black; - } - - -/* - * +-----------------------------------------------------------------+ - * | Doxygen Specific Classes | - * +-----------------------------------------------------------------+ - */ - - -/* ------------------------------------------------------------------- - * Header & Footer Classes (customized top page navigation bar). - */ - - h1.header { - font-size: 200%; - /*font-family: times, verdana, sans-serif;*/ - } - - h2.memtitle { - display: none; - } - - center.header { - background-color: #CCE6CA; - } - - table.header { - /*width: 100%;*/ - /*background-color: #EEEEEE;*/ - background-color: #CCE6CA; - } - - div.header { - text-align: center; - margin: 14pt 0pt 0pt 0pt; - } - - div.summary { - color: white; - background-color: black; - border: 4px solid black; - } - - div.summary a { - font-size: 90%; - color: white; - padding: 2px 0px; - text-align: center; - background-color: black; - border-bottom: none; - } - - table.header td { - padding: 2px 14px; - text-align: center; - font-weight: bold; - /*font-family: verdana, sans-serif;*/ - font-size: 110%; - } - - table.UserDefined { - border: 1px solid; - } - - table.UserDefined th { - border: 1px solid; - } - - table.UserDefined td { - padding: 0px 5px; - } - - table.DoxUser td, table.DoxUser th { - padding: 0px 5px; - border: 0px; - } - - table.DoxUser th { - background-color: #CCE6CA; - } - - table.footer1, table.footer2 { width: 100%; } - td.LFooter { text-align: left; } - td.RFooter { text-align: right; } - td.CFooter { text-align: center;} - table.footer2 td.RFooter { font-weight: bold; width: 35% } - table.footer2 td.CFooter { width: 30% } - table.footer2 td.LFooter { font-weight: bold; width: 35%; /*font-family: time;*/ } - - table.classHierarchy { - border-collapse: separate; - border-spacing: 5px; - font-size: 110%; - } - - table.classHierarchy a { - border-style: none; - border-bottom: none; - } - - table.classHierarchy tr { - border: 1px solid blue; - } - - table.classHierarchy td.normal { - border: 1px solid #dddddd; - width: 140pt; - text-align: center; - font-weight: bold; - background-color: #dddddd; - } - - table.classHierarchy td.virtual { - border: 1px solid black; - width: 140pt; - text-align: center; - font-weight: bold; - } - - table.classHierarchy td.wnormal { - border: 1px solid #dddddd; - width: 240pt; - text-align: center; - font-weight: bold; - background-color: #dddddd; - } - - table.classHierarchy td.wvirtual { - border: 1px solid black; - width: 240pt; - text-align: center; - font-weight: bold; - } - - div.ah, span.ah { - font-family: Times; - font-size: 300%; - font-weight: bold; - padding: 20px; - } - - div.title { - text-align: center; - font-size: 200%; - font-weight: bold; - padding: 20px; - border: 2px solid black; - } - - div.center, div.image { - text-align: center; - } - - -/* ------------------------------------------------------------------- - * Top navigation lists. - */ - - span.mlabels { - font-size: 90%; - font-style: italic; - padding-left: 10pt; - margin: 10pt; - border-left: 1px solid black - } - - div.contents { - padding-top: 20pt; - } - - div.tabs { - border-top: 1px solid black; - } - - div.tabs, div.tabs1, div.tabs2, div.tabs3, div.tabs4 { - border-left: 1px solid black; - } - - ul.tablist { - /* - padding: 5pt; - background-color: red; - */ - margin: 0pt; - padding: 0pt; - border-top: none; - border-bottom: none; - border-left: none; - border-right: none; - } - - ul.tablist li { - /* - margin-left: auto; - margin-right: auto; - overflow: auto; - display: inline; - background-color: yellow; - */ - font-size: 90%; - border-top: none; - border-bottom: 1px solid black; - border-left: none; - border-right: 1px solid black; - display: table-cell; - text-align: center; - padding: 2pt; - width: 5%; - } - - ul.tablist li:hover { - background-color: black; - color: white; - } - - ul.tablist li:hover a { - background-color: black; - color: white; - } - - ul.tablist * a { border-bottom: none; } - - ul.tablist * a:link img, ul.tablist * a:visited img { border-style: none; border-bottom: none; } - - ul.tablist * a:link, ul.tablist * a:visited { - color: black; - text-decoration: none; - } - - ul.tablist * a:hover, ul.tablist * a:focus, ul.tablist * a:active { - color: white; - text-decoration: underline; - } - - div.navpath { - padding: 5pt 0pt 0pt 0pt; - } - - .navpath ul { - text-align: center; - } - - .navpath ul li { - display: inline; - list-style-type: none; - padding-left: 20px; - padding-right: 10px; - background-image: url('closed.png'); - background-repeat: no-repeat; - background-position: left; - color: #364D7C; - } - - .navpath ul li a { - border: 2px solid black; - padding-left: 10px; - padding-right: 10px; - font-weight: bold; - color: black; - } - - -/* ------------------------------------------------------------------- - * Quick Index Class (top page navigation bar). - */ - - div.qindex, div.nav { - width: 100%-4px; - /*background-color: #DADAEF;*/ - /*background-color: #eeeeff;*/ - background-color: #cccccc; - /*background-color: #CCE6CA;*/ - border: 0px solid #003300; - text-align: center; - margin: 0px; - padding: 2px; - line-height: 140%; - } - - a.qindex, a.qindex:visited, a.qindex:hover, a.qindexHL, a.el, a.elRef { - text-decoration: none; - /*font-family: Courier;*/ - font-weight: normal; - /*font-size: 110%;*/ - } - - a.qindex, a.qindex:visited { - /*color: #09550B;*/ - color: black; - border: 2px solid #cccccc; - padding: 2px 2px; - border-bottom: none; - } - - a.qindex:hover { - /*background-color: #ddddff;*/ - font-weight: bold; - padding: 2px 2px; - border: 2px solid black; - } - - a.qindexHL, a.qindexHL:hover, a.qindexHL:visited { - background-color: #0c780c; - color: #ffffff; - border: 1px double #9295C2; - } - - a.code:link, a.code:visited, a.codeRef:link, a.codeRef:visited { - text-decoration: none; - font-weight: normal; - color: #0000ff; - } - - .indexkey { - background-color: #eeeeff; - border: 1px solid #b0b0b0; - padding: 2px 15px; - } - - .indexkey, .indexvalue { - background-color: #eeeeff; - border: 1px solid #b0b0b0; - padding: 2px 15px; - } - - .indexkey { - width: 40%; - } - - .indexvalue { - width: 80%; - } - - h3 a[name="index__"], - h3 a[name="index_a"], - h3 a[name="index_b"], - h3 a[name="index_c"], - h3 a[name="index_d"], - h3 a[name="index_e"], - h3 a[name="index_f"], - h3 a[name="index_g"], - h3 a[name="index_h"], - h3 a[name="index_i"], - h3 a[name="index_j"], - h3 a[name="index_k"], - h3 a[name="index_l"], - h3 a[name="index_m"], - h3 a[name="index_n"], - h3 a[name="index_o"], - h3 a[name="index_p"], - h3 a[name="index_q"], - h3 a[name="index_r"], - h3 a[name="index_s"], - h3 a[name="index_t"], - h3 a[name="index_u"], - h3 a[name="index_v"], - h3 a[name="index_w"], - h3 a[name="index_x"], - h3 a[name="index_y"], - h3 a[name="index_z"], - h3 a[name="index_0"], - h3 a[name="index_1"], - h3 a[name="index_2"], - h3 a[name="index_3"], - h3 a[name="index_4"], - h3 a[name="index_5"], - h3 a[name="index_6"], - h3 a[name="index_7"], - h3 a[name="index_8"], - h3 a[name="index_9"] - h3 a[id="index__"], - h3 a#index_a, - h3 a#index_b, - h3 a#index_c, - h3 a#index_d, - h3 a#index_e, - h3 a#index_f, - h3 a#index_g, - h3 a#index_h, - h3 a#index_i, - h3 a#index_j, - h3 a#index_k, - h3 a#index_l, - h3 a#index_m, - h3 a#index_n, - h3 a#index_o, - h3 a#index_p, - h3 a#index_q, - h3 a#index_r, - h3 a#index_s, - h3 a#index_t, - h3 a#index_u, - h3 a#index_v, - h3 a#index_w, - h3 a#index_x, - h3 a#index_y, - h3 a#index_z, - h3 a#index_0, - h3 a#index_1, - h3 a#index_2, - h3 a#index_3, - h3 a#index_4, - h3 a#index_5, - h3 a#index_6, - h3 a#index_7, - h3 a#index_8, - h3 a#index_9, - h3 a#index_0x7e - { - font-family: time; - font-size: 250%; - text-align: center; - } - - -/* ------------------------------------------------------------------- - * Verbatim Source Code / Examples. - */ - - div.fragment { - font-family: "Roboto Mono", "Monospace"; - font-size: 80%; - border: none; - /*border-width: thin; */ - /*border-color: #003300;*/ - /*background-color: #FCFCE1;*/ - background-color: #fefefe; - padding: 0.5em; - margin-left: 5%; - margin-right: 5% - } - - div.fragment a.code:link, - div.fragment a.code:visited, - div.fragment a.codeRef:link, - div.fragment a.codeRef:visited { - text-decoration: none; - font-weight: bold; - color: black; - border: none; - } - - div.line { - white-space: pre; - padding: 0pt; - margin: 0pt; - } - - span.keyword { color: #008000 } - span.keywordtype { color: #604020 } - span.keywordflow { color: #e08000 } - span.comment { color: #800000 } - span.preprocessor { color: #806020 } - span.stringliteral { color: #002080 } - span.charliteral { color: #008080 } - span.red { color: red } - - -/* ------------------------------------------------------------------- - * Attributes Listing. - */ - - a.el, a.elRef { - font-family: "Roboto Mono", Courier; - font-weight: bold; - font-size: 110%; - color: black; - border-bottom: none; - } - - p.formulaDsp { - text-align: center; - } - - .mdTable { - /*border: 1px solid #868686;*/ - /*background-color: #DADAEF;*/ - /*background-color: #F4F4FB;*/ - border: 1px none #008500; - border-left-width: 1px; - border-left-style: solid; - /*background-color: #B8E6B8;*/ - /*background-color: #CCE6CA;*/ - margin-top: 25px; - font-size: 105%; - } - - .mdRow { - padding: 5px 10px; - } - - /* This Mozilla/Firefox bug has been corrected from v1.5. - * .mdname1 { - * padding: 3px 0px 0px 0px; - * } - */ - - .mdescLeft, .mdescRight { - padding: 0px 8px 4px 8px; - font-size: 11px; - font-style: italic; - /*background-color: #FAFAFA;*/ - border-top: 1px none #E0E0E0; - border-right: 1px none #E0E0E0; - border-bottom: 1px none #E0E0E0; - border-left: 1px none #E0E0E0; - margin: 0px; - } - - .memitem { - margin-bottom: 30px; - border: 1px none #008500; - } - - .memproto { - /*background-color: #CCE6CA;*/ - background-color: #cccccc; - border-left-width: 4px; - border-left-style: solid; - /*border-color: #008500;*/ - border-color: black; - } - - .memname { - white-space: nowrap; - padding-left: 5px; - font-size: 105%; - } - - table.memname * { - font-family: "Roboto Mono", "Monospace"; - } - - - .memdoc{ - padding-left: 5px; - /*margin-top: -8px;*/ - border-left-width: 1px; - border-left-style: solid; - /*border-color: #008500;*/ - border-color: black; - } - - div.contents * table tr { - padding: 3px 3px 3px 8px; - } - - .memSeparator { - font-size: 1pt; - } - - .memItemLeft, .memItemRight, .memTemplItemLeft, .memTemplItemRight { - vertical-align: top; - /*padding: 1px 0px 0px 8px;*/ - padding: 3px 3px 3px 8px; - margin: 4px; - border-top-width: 1px; - border-right-width: 1px; - border-bottom-width: 1px; - border-left-width: 1px; - /* - border-top-color: #0c0c0c; - border-right-color: #0c0c0c; - border-bottom-color: #0c0c0c; - border-left-color: #0c0c0c; - */ - border-top-style: none; - border-right-style: none; -/* - border-bottom-style: dotted; -*/ - border-left-style: none; - /*background-color: #DADAEF;*/ - /*background-color: #eeeeff;*/ - /*background-color: #EEEEEE;*/ - /*background-color: #CCE6CA;*/ - font-family: "Roboto Mono", "Monospace"; - } - - .memTemplItemLeft, .memTemplItemRight { - border-bottom-width: 2px; - border-bottom-style: solid; - font-weight: bold; - } - - .memItemLeft { font-size: 11px; width: 100pt; } - .memItemRight { font-size: 12px; } - .memTemplItemLeft { font-size: 11px; } - .memTemplItemRight { font-size: 12px; } - - .memTemplParams { - color: #FFFFFF; - background-color: #000000; - font-size: 11px; - font-weight: bold; - } - - .groupText, .groupHeader { - color: #09550B; - font-size: 130%; - font-weight: bold; - margin-top: 15px; - } - - .groupHeader { - margin-bottom: -30pt; - } - - .inherit { - display: none; - } - - -/* ------------------------------------------------------------------- - * General Classes Index. - */ - - span.icona { - margin-right: 10pt; - } - - div.toc li.level1 { - margin-left: 0px; - } - - div.toc li.level2 { - margin-left: 15px; - display: none; - } - - div.toc li.level3 { - margin-left: 30px; - display: none; - } - - div.toc li.level4 { - margin-left: 45px; - display: none; - } - - .directory .levels { - white-space: nowrap; - width: 100%; - text-align: right; - font-size: 9pt; - } - - .directory .levels span { - cursor: pointer; - padding-left: 2px; - padding-right: 2px; - color: #3D578C; - } - - - div.directory { - margin: 10px 0px; - border-top: 2px solid black; - border-bottom: 2px solid black; - width: 100%; - } - - .directory table { - border-collapse: collapse; - } - - .directory td { - margin: 0px; - padding: 0px; - vertical-align: top; - } - - .directory td.entry { - white-space: nowrap; - padding-right: 6px; - padding-top: 3px; - } - - .directory td.entry a { - outline: none; - } - - .directory td.entry a img { - border: none; - } - - .directory td.desc { - width: 100%; - padding-left: 6px; - padding-right: 6px; - padding-top: 3px; - border-left: 1px solid rgba(0,0,0,0.05); - } - - .directory tr.even { - padding-left: 6px; - background-color: #F7F8FB; - } - - .directory img { - vertical-align: -30%; - } diff --git a/deprecated/katabatic/doc/asimbook.cls b/deprecated/katabatic/doc/asimbook.cls deleted file mode 100644 index 54270780..00000000 --- a/deprecated/katabatic/doc/asimbook.cls +++ /dev/null @@ -1,798 +0,0 @@ -%% -%% This is file `book.cls', -%% generated with the docstrip utility. -%% -%% The original source files were: -%% -%% classes.dtx (with options: `book') -%% -%% This is a generated file. -%% -%% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 -%% The LaTeX3 Project and any individual authors listed elsewhere -%% in this file. -%% -%% This file was generated from file(s) of the LaTeX base system. -%% -------------------------------------------------------------- -%% -%% It may be distributed and/or modified under the -%% conditions of the LaTeX Project Public License, either version 1.2 -%% of this license or (at your option) any later version. -%% The latest version of this license is in -%% http://www.latex-project.org/lppl.txt -%% and version 1.2 or later is part of all distributions of LaTeX -%% version 1999/12/01 or later. -%% -%% This file may only be distributed together with a copy of the LaTeX -%% base system. You may however distribute the LaTeX base system without -%% such generated files. -%% -%% The list of all files belonging to the LaTeX base distribution is -%% given in the file `manifest.txt'. See also `legal.txt' for additional -%% information. -%% -%% \CharacterTable -%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z -%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z -%% Digits \0\1\2\3\4\5\6\7\8\9 -%% Exclamation \! Double quote \" Hash (number) \# -%% Dollar \$ Percent \% Ampersand \& -%% Acute accent \' Left paren \( Right paren \) -%% Asterisk \* Plus \+ Comma \, -%% Minus \- Point \. Solidus \/ -%% Colon \: Semicolon \; Less than \< -%% Equals \= Greater than \> Question mark \? -%% Commercial at \@ Left bracket \[ Backslash \\ -%% Right bracket \] Circumflex \^ Underscore \_ -%% Grave accent \` Left brace \{ Vertical bar \| -%% Right brace \} Tilde \~} -\NeedsTeXFormat{LaTeX2e}[1995/12/01] -\ProvidesClass{asimbook} - [2005/11/21 v1.0 - ASIM LaTeX document class] -\newcommand\@ptsize{} -\newif\if@restonecol -\newif\if@titlepage -\@titlepagetrue -\newif\if@openright -\newif\if@mainmatter \@mainmattertrue -\if@compatibility\else -\DeclareOption{a4paper} - {\setlength\paperheight {297mm}% - \setlength\paperwidth {210mm}} -\DeclareOption{a5paper} - {\setlength\paperheight {210mm}% - \setlength\paperwidth {148mm}} -\DeclareOption{b5paper} - {\setlength\paperheight {250mm}% - \setlength\paperwidth {176mm}} -\DeclareOption{letterpaper} - {\setlength\paperheight {11in}% - \setlength\paperwidth {8.5in}} -\DeclareOption{legalpaper} - {\setlength\paperheight {14in}% - \setlength\paperwidth {8.5in}} -\DeclareOption{executivepaper} - {\setlength\paperheight {10.5in}% - \setlength\paperwidth {7.25in}} -\DeclareOption{landscape} - {\setlength\@tempdima {\paperheight}% - \setlength\paperheight {\paperwidth}% - \setlength\paperwidth {\@tempdima}} -\fi -\if@compatibility - \renewcommand\@ptsize{0} -\else -\DeclareOption{10pt}{\renewcommand\@ptsize{0}} -\fi -\DeclareOption{11pt}{\renewcommand\@ptsize{1}} -\DeclareOption{12pt}{\renewcommand\@ptsize{2}} -\if@compatibility\else -\DeclareOption{oneside}{\@twosidefalse \@mparswitchfalse} -\fi -\DeclareOption{twoside}{\@twosidetrue \@mparswitchtrue} -\DeclareOption{draft}{\setlength\overfullrule{5pt}} -\if@compatibility\else -\DeclareOption{final}{\setlength\overfullrule{0pt}} -\fi -\DeclareOption{titlepage}{\@titlepagetrue} -\if@compatibility\else -\DeclareOption{notitlepage}{\@titlepagefalse} -\fi -\if@compatibility -\@openrighttrue -\else -\DeclareOption{openright}{\@openrighttrue} -\DeclareOption{openany}{\@openrightfalse} -\fi -\if@compatibility\else -\DeclareOption{onecolumn}{\@twocolumnfalse} -\fi -\DeclareOption{twocolumn}{\@twocolumntrue} -\DeclareOption{leqno}{\input{leqno.clo}} -\DeclareOption{fleqn}{\input{fleqn.clo}} -\DeclareOption{openbib}{% - \AtEndOfPackage{% - \renewcommand\@openbib@code{% - \advance\leftmargin\bibindent - \itemindent -\bibindent - \listparindent \itemindent - \parsep \z@ - }% - \renewcommand\newblock{\par}}% -} -\ExecuteOptions{letterpaper,10pt,twoside,onecolumn,final,openright} -\ProcessOptions -\input{bk1\@ptsize.clo} -\setlength\lineskip{1\p@} -\setlength\normallineskip{1\p@} -\renewcommand\baselinestretch{} -\setlength\parskip{0\p@ \@plus \p@} -\@lowpenalty 51 -\@medpenalty 151 -\@highpenalty 301 -\setcounter{topnumber}{2} -\renewcommand\topfraction{.7} -\setcounter{bottomnumber}{1} -\renewcommand\bottomfraction{.3} -\setcounter{totalnumber}{3} -\renewcommand\textfraction{.2} -\renewcommand\floatpagefraction{.5} -\setcounter{dbltopnumber}{2} -\renewcommand\dbltopfraction{.7} -\renewcommand\dblfloatpagefraction{.5} -%%%% Select Chapter font. -\newcommand \textchapter [1] {\textsf{\textbf{#1}}} -\newcommand \fontchapter {\sffamily \bfseries} -\if@twoside - \def\ps@headings{% - \let\@oddfoot\@empty\let\@evenfoot\@empty - \def\@evenhead{\thepage\hfil\slshape\leftmark}% - \def\@oddhead{{\slshape\rightmark}\hfil\thepage}% - \let\@mkboth\markboth - \def\chaptermark##1{% - \markboth {\MakeUppercase{% - \ifnum \c@secnumdepth >\m@ne - \if@mainmatter - \@chapapp\ \thechapter. \ % - \fi - \fi - ##1}}{}}% - \def\sectionmark##1{% - \markright {\MakeUppercase{% - \ifnum \c@secnumdepth >\z@ - \thesection. \ % - \fi - ##1}}}} -\else - \def\ps@headings{% - \let\@oddfoot\@empty - \def\@oddhead{{\slshape\rightmark}\hfil\thepage}% - \let\@mkboth\markboth - \def\chaptermark##1{% - \markright {\MakeUppercase{% - \ifnum \c@secnumdepth >\m@ne - \if@mainmatter - \@chapapp\ \thechapter. \ % - \fi - \fi - ##1}}}} -\fi -\def\ps@myheadings{% - \let\@oddfoot\@empty\let\@evenfoot\@empty - \def\@evenhead{\thepage\hfil\slshape\leftmark}% - \def\@oddhead{{\slshape\rightmark}\hfil\thepage}% - \let\@mkboth\@gobbletwo - \let\chaptermark\@gobble - \let\sectionmark\@gobble - } - \if@titlepage - \newcommand\maketitle{\begin{titlepage}% - \let\footnotesize\small - \let\footnoterule\relax - \let \footnote \thanks - \null\vfil - \vskip 60\p@ - \begin{center}% - {\LARGE \@title \par}% - \vskip 3em% - {\large - \lineskip .75em% - \begin{tabular}[t]{c}% - \@author - \end{tabular}\par}% - \vskip 1.5em% - {\large \@date \par}% % Set date in \large size. - \end{center}\par - \@thanks - \vfil\null - \end{titlepage}% - \setcounter{footnote}{0}% - \global\let\thanks\relax - \global\let\maketitle\relax - \global\let\@thanks\@empty - \global\let\@author\@empty - \global\let\@date\@empty - \global\let\@title\@empty - \global\let\title\relax - \global\let\author\relax - \global\let\date\relax - \global\let\and\relax -} -\else -\newcommand\maketitle{\par - \begingroup - \renewcommand\thefootnote{\@fnsymbol\c@footnote}% - \def\@makefnmark{\rlap{\@textsuperscript{\normalfont\@thefnmark}}}% - \long\def\@makefntext##1{\parindent 1em\noindent - \hb@xt@1.8em{% - \hss\@textsuperscript{\normalfont\@thefnmark}}##1}% - \if@twocolumn - \ifnum \col@number=\@ne - \@maketitle - \else - \twocolumn[\@maketitle]% - \fi - \else - \newpage - \global\@topnum\z@ % Prevents figures from going at top of page. - \@maketitle - \fi - \thispagestyle{plain}\@thanks - \endgroup - \setcounter{footnote}{0}% - \global\let\thanks\relax - \global\let\maketitle\relax - \global\let\@maketitle\relax - \global\let\@thanks\@empty - \global\let\@author\@empty - \global\let\@date\@empty - \global\let\@title\@empty - \global\let\title\relax - \global\let\author\relax - \global\let\date\relax - \global\let\and\relax -} -\def\@maketitle{% - \newpage - \null - \vskip 2em% - \begin{center}% - \let \footnote \thanks - {\LARGE \@title \par}% - \vskip 1.5em% - {\large - \lineskip .5em% - \begin{tabular}[t]{c}% - \@author - \end{tabular}\par}% - \vskip 1em% - {\large \@date}% - \end{center}% - \par - \vskip 1.5em} -\fi -\newcommand*\chaptermark[1]{} -\setcounter{secnumdepth}{2} -\newcounter {part} -\newcounter {chapter} -\newcounter {section}[chapter] -\newcounter {subsection}[section] -\newcounter {subsubsection}[subsection] -\newcounter {paragraph}[subsubsection] -\newcounter {subparagraph}[paragraph] -\renewcommand \thepart {\@Roman\c@part} -\renewcommand \thechapter {\@arabic\c@chapter} -\renewcommand \thesection {\thechapter.\@arabic\c@section} -\renewcommand\thesubsection {\thesection.\@arabic\c@subsection} -\renewcommand\thesubsubsection{\thesubsection .\@arabic\c@subsubsection} -\renewcommand\theparagraph {\thesubsubsection.\@arabic\c@paragraph} -\renewcommand\thesubparagraph {\theparagraph.\@arabic\c@subparagraph} -\newcommand\@chapapp{\chaptername} -\newcommand\frontmatter{% - \cleardoublepage - \@mainmatterfalse - \pagenumbering{roman}} -\newcommand\mainmatter{% - \cleardoublepage - \@mainmattertrue - \pagenumbering{arabic}} -\newcommand\backmatter{% - \if@openright - \cleardoublepage - \else - \clearpage - \fi - \@mainmatterfalse} -\newcommand\part{% - \if@openright - \cleardoublepage - \else - \clearpage - \fi - \thispagestyle{plain}% - \if@twocolumn - \onecolumn - \@tempswatrue - \else - \@tempswafalse - \fi - \null\vfil - \secdef\@part\@spart} - -\def\@part[#1]#2{% - \ifnum \c@secnumdepth >-2\relax - \refstepcounter{part}% - \addcontentsline{toc}{part}{\thepart\hspace{1em}#1}% - \else - \addcontentsline{toc}{part}{#1}% - \fi - \markboth{}{}% - {\centering - \interlinepenalty \@M - \normalfont - \ifnum \c@secnumdepth >-2\relax - \huge\bfseries \partname\nobreakspace\thepart - \par - \vskip 20\p@ - \fi - \Huge \bfseries #2\par}% - \@endpart} -\def\@spart#1{% - {\centering - \interlinepenalty \@M - \normalfont - \Huge \bfseries #1\par}% - \@endpart} -\def\@endpart{\vfil\newpage - \if@twoside - \if@openright - \null - \thispagestyle{empty}% - \newpage - \fi - \fi - \if@tempswa - \twocolumn - \fi} -\newcommand\chapter{\if@openright\cleardoublepage\else\clearpage\fi - \thispagestyle{plain}% - \global\@topnum\z@ - \@afterindentfalse - \secdef\@chapter\@schapter} -\def\@chapter[#1]#2{\ifnum \c@secnumdepth >\m@ne - \if@mainmatter - \refstepcounter{chapter}% - \typeout{\@chapapp\space\thechapter.}% - \addcontentsline{toc}{chapter}% - {\protect\numberline{\thechapter}#1}% - \else - \addcontentsline{toc}{chapter}{#1}% - \fi - \else - \addcontentsline{toc}{chapter}{#1}% - \fi - \chaptermark{#1}% - \addtocontents{lof}{\protect\addvspace{10\p@}}% - \addtocontents{lot}{\protect\addvspace{10\p@}}% - \if@twocolumn - \@topnewpage[\@makechapterhead{#2}]% - \else - \@makechapterhead{#2}% - \@afterheading - \fi} -%%%%\def\@makechapterhead#1{% -%%%% \vspace*{50\p@}% -%%%% {\parindent \z@ \raggedright \normalfont -%%%% \ifnum \c@secnumdepth >\m@ne -%%%% \if@mainmatter -%%%% \huge\bfseries \@chapapp\space \thechapter -%%%% \par\nobreak -%%%% \vskip 20\p@ -%%%% \fi -%%%% \fi -%%%% \interlinepenalty\@M -%%%% \Huge \bfseries #1\par\nobreak -%%%% \vskip 40\p@ -%%%% }} - \newlength \titlewidth - \setlength \titlewidth {\textwidth} - \addtolength \titlewidth {\marginparwidth} - \addtolength \titlewidth {\marginparsep} - \def\@makechapterhead#1{% - \vspace*{50\p@}% - {\parindent \z@ \raggedleft \fontchapter - \ifnum \c@secnumdepth >\m@ne - \if@mainmatter - \huge \@chapapp\space \thechapter - \par\nobreak - \vskip 20\p@ - \fi - \fi - \interlinepenalty\@M - \hsize=\titlewidth - \Huge #1 \par\nobreak - \hsize=\textwidth - \vskip 40\p@ - }} -\def\@schapter#1{\if@twocolumn - \@topnewpage[\@makeschapterhead{#1}]% - \else - \@makeschapterhead{#1}% - \@afterheading - \fi} -%%%%\def\@makeschapterhead#1{% -%%%% \vspace*{50\p@}% -%%%% {\parindent \z@ \raggedright -%%%% \normalfont -%%%% \interlinepenalty\@M -%%%% \Huge \bfseries #1\par\nobreak -%%%% \vskip 40\p@ -%%%% }} - \def\@makeschapterhead#1{% - \vspace*{50\p@}% - {\parindent \z@ \raggedright - \normalfont - \interlinepenalty\@M - \hsize=\titlewidth - \flushright - \Huge \bfseries #1\par\nobreak - \hsize=\textwidth - \vskip 40\p@ - }} -\newcommand\section{\@startsection {section}{1}{\z@}% - {-3.5ex \@plus -1ex \@minus -.2ex}% - {2.3ex \@plus.2ex}% - {\normalfont\Large\bfseries}} -\newcommand\subsection{\@startsection{subsection}{2}{\z@}% - {-3.25ex\@plus -1ex \@minus -.2ex}% - {1.5ex \@plus .2ex}% - {\normalfont\large\bfseries}} -\newcommand\subsubsection{\@startsection{subsubsection}{3}{\z@}% - {-3.25ex\@plus -1ex \@minus -.2ex}% - {1.5ex \@plus .2ex}% - {\normalfont\normalsize\bfseries}} -\newcommand\paragraph{\@startsection{paragraph}{4}{\z@}% - {3.25ex \@plus1ex \@minus.2ex}% - {-1em}% - {\normalfont\normalsize\bfseries}} -\newcommand\subparagraph{\@startsection{subparagraph}{5}{\parindent}% - {3.25ex \@plus1ex \@minus .2ex}% - {-1em}% - {\normalfont\normalsize\bfseries}} -\if@twocolumn - \setlength\leftmargini {2em} -\else - \setlength\leftmargini {2.5em} -\fi -\leftmargin \leftmargini -\setlength\leftmarginii {2.2em} -\setlength\leftmarginiii {1.87em} -\setlength\leftmarginiv {1.7em} -\if@twocolumn - \setlength\leftmarginv {.5em} - \setlength\leftmarginvi {.5em} -\else - \setlength\leftmarginv {1em} - \setlength\leftmarginvi {1em} -\fi -\setlength \labelsep {.5em} -\setlength \labelwidth{\leftmargini} -\addtolength\labelwidth{-\labelsep} -\@beginparpenalty -\@lowpenalty -\@endparpenalty -\@lowpenalty -\@itempenalty -\@lowpenalty -\renewcommand\theenumi{\@arabic\c@enumi} -\renewcommand\theenumii{\@alph\c@enumii} -\renewcommand\theenumiii{\@roman\c@enumiii} -\renewcommand\theenumiv{\@Alph\c@enumiv} -\newcommand\labelenumi{\theenumi.} -\newcommand\labelenumii{(\theenumii)} -\newcommand\labelenumiii{\theenumiii.} -\newcommand\labelenumiv{\theenumiv.} -\renewcommand\p@enumii{\theenumi} -\renewcommand\p@enumiii{\theenumi(\theenumii)} -\renewcommand\p@enumiv{\p@enumiii\theenumiii} -\newcommand\labelitemi{\textbullet} -\newcommand\labelitemii{\normalfont\bfseries \textendash} -\newcommand\labelitemiii{\textasteriskcentered} -\newcommand\labelitemiv{\textperiodcentered} -\newenvironment{description} - {\list{}{\labelwidth\z@ \itemindent-\leftmargin - \let\makelabel\descriptionlabel}} - {\endlist} -\newcommand*\descriptionlabel[1]{\hspace\labelsep - \normalfont\bfseries #1} -\newenvironment{verse} - {\let\\\@centercr - \list{}{\itemsep \z@ - \itemindent -1.5em% - \listparindent\itemindent - \rightmargin \leftmargin - \advance\leftmargin 1.5em}% - \item\relax} - {\endlist} -\newenvironment{quotation} - {\list{}{\listparindent 1.5em% - \itemindent \listparindent - \rightmargin \leftmargin - \parsep \z@ \@plus\p@}% - \item\relax} - {\endlist} -\newenvironment{quote} - {\list{}{\rightmargin\leftmargin}% - \item\relax} - {\endlist} -\if@compatibility -\newenvironment{titlepage} - {% - \cleardoublepage - \if@twocolumn - \@restonecoltrue\onecolumn - \else - \@restonecolfalse\newpage - \fi - \thispagestyle{empty}% - \setcounter{page}\z@ - }% - {\if@restonecol\twocolumn \else \newpage \fi - } -\else -\newenvironment{titlepage} - {% - \cleardoublepage - \if@twocolumn - \@restonecoltrue\onecolumn - \else - \@restonecolfalse\newpage - \fi - \thispagestyle{empty}% - \setcounter{page}\@ne - }% - {\if@restonecol\twocolumn \else \newpage \fi - \if@twoside\else - \setcounter{page}\@ne - \fi - } -\fi -\newcommand\appendix{\par - \setcounter{chapter}{0}% - \setcounter{section}{0}% - \gdef\@chapapp{\appendixname}% - \gdef\thechapter{\@Alph\c@chapter}} -\setlength\arraycolsep{5\p@} -\setlength\tabcolsep{6\p@} -\setlength\arrayrulewidth{.4\p@} -\setlength\doublerulesep{2\p@} -\setlength\tabbingsep{\labelsep} -\skip\@mpfootins = \skip\footins -\setlength\fboxsep{3\p@} -\setlength\fboxrule{.4\p@} -\@addtoreset {equation}{chapter} -\renewcommand\theequation - {\ifnum \c@chapter>\z@ \thechapter.\fi \@arabic\c@equation} -\newcounter{figure}[chapter] -\renewcommand \thefigure - {\ifnum \c@chapter>\z@ \thechapter.\fi \@arabic\c@figure} -\def\fps@figure{tbp} -\def\ftype@figure{1} -\def\ext@figure{lof} -\def\fnum@figure{\figurename\nobreakspace\thefigure} -\newenvironment{figure} - {\@float{figure}} - {\end@float} -\newenvironment{figure*} - {\@dblfloat{figure}} - {\end@dblfloat} -\newcounter{table}[chapter] -\renewcommand \thetable - {\ifnum \c@chapter>\z@ \thechapter.\fi \@arabic\c@table} -\def\fps@table{tbp} -\def\ftype@table{2} -\def\ext@table{lot} -\def\fnum@table{\tablename\nobreakspace\thetable} -\newenvironment{table} - {\@float{table}} - {\end@float} -\newenvironment{table*} - {\@dblfloat{table}} - {\end@dblfloat} -\newlength\abovecaptionskip -\newlength\belowcaptionskip -\setlength\abovecaptionskip{10\p@} -\setlength\belowcaptionskip{0\p@} -\long\def\@makecaption#1#2{% - \vskip\abovecaptionskip - \sbox\@tempboxa{#1: #2}% - \ifdim \wd\@tempboxa >\hsize - #1: #2\par - \else - \global \@minipagefalse - \hb@xt@\hsize{\hfil\box\@tempboxa\hfil}% - \fi - \vskip\belowcaptionskip} -\DeclareOldFontCommand{\rm}{\normalfont\rmfamily}{\mathrm} -\DeclareOldFontCommand{\sf}{\normalfont\sffamily}{\mathsf} -\DeclareOldFontCommand{\tt}{\normalfont\ttfamily}{\mathtt} -\DeclareOldFontCommand{\bf}{\normalfont\bfseries}{\mathbf} -\DeclareOldFontCommand{\it}{\normalfont\itshape}{\mathit} -\DeclareOldFontCommand{\sl}{\normalfont\slshape}{\@nomath\sl} -\DeclareOldFontCommand{\sc}{\normalfont\scshape}{\@nomath\sc} -\DeclareRobustCommand*\cal{\@fontswitch\relax\mathcal} -\DeclareRobustCommand*\mit{\@fontswitch\relax\mathnormal} -\newcommand\@pnumwidth{1.55em} -\newcommand\@tocrmarg{2.55em} -\newcommand\@dotsep{4.5} -\setcounter{tocdepth}{2} -\newcommand\tableofcontents{% - \if@twocolumn - \@restonecoltrue\onecolumn - \else - \@restonecolfalse - \fi - \chapter*{\contentsname - \@mkboth{% - \MakeUppercase\contentsname}{\MakeUppercase\contentsname}}% - \@starttoc{toc}% - \if@restonecol\twocolumn\fi - } -\newcommand*\l@part[2]{% - \ifnum \c@tocdepth >-2\relax - \addpenalty{-\@highpenalty}% - \addvspace{2.25em \@plus\p@}% - \setlength\@tempdima{3em}% - \begingroup - \parindent \z@ \rightskip \@pnumwidth - \parfillskip -\@pnumwidth - {\leavevmode - \large \bfseries #1\hfil \hb@xt@\@pnumwidth{\hss #2}}\par - \nobreak - \global\@nobreaktrue - \everypar{\global\@nobreakfalse\everypar{}}% - \endgroup - \fi} -%%%%\newcommand*\l@chapter[2]{% -%%%% \ifnum \c@tocdepth >\m@ne -%%%% \addpenalty{-\@highpenalty}% -%%%% \vskip 1.0em \@plus\p@ -%%%% \setlength\@tempdima{1.5em}% -%%%% \begingroup -%%%% \parindent \z@ \rightskip \@pnumwidth -%%%% \parfillskip -\@pnumwidth -%%%% \leavevmode \bfseries -%%%% \advance\leftskip\@tempdima -%%%% \hskip -\leftskip -%%%% #1\nobreak\hfil \nobreak\hb@xt@\@pnumwidth{\hss #2}\par -%%%% \penalty\@highpenalty -%%%% \endgroup -%%%% \fi} -\newcommand\l@chapter[2]{% - \ifnum \c@tocdepth >\m@ne - \addpenalty{-\@highpenalty}% - \vskip 1.0em \@plus\p@ - \setlength\@tempdima{1.5em}% - \begingroup - \parindent \z@ \rightskip \@pnumwidth - \parfillskip -\@pnumwidth - \leavevmode \fontchapter - \advance\leftskip\@tempdima - \hskip -\leftskip - #1\nobreak\hfil \nobreak\hb@xt@\@pnumwidth{\hss #2}\par - \penalty\@highpenalty - \endgroup - \fi} -\newcommand*\l@section{\@dottedtocline{1}{1.5em}{2.3em}} -\newcommand*\l@subsection{\@dottedtocline{2}{3.8em}{3.2em}} -\newcommand*\l@subsubsection{\@dottedtocline{3}{7.0em}{4.1em}} -\newcommand*\l@paragraph{\@dottedtocline{4}{10em}{5em}} -\newcommand*\l@subparagraph{\@dottedtocline{5}{12em}{6em}} -\newcommand\listoffigures{% - \if@twocolumn - \@restonecoltrue\onecolumn - \else - \@restonecolfalse - \fi - \chapter*{\listfigurename}% - \@mkboth{\MakeUppercase\listfigurename}% - {\MakeUppercase\listfigurename}% - \@starttoc{lof}% - \if@restonecol\twocolumn\fi - } -\newcommand*\l@figure{\@dottedtocline{1}{1.5em}{2.3em}} -\newcommand\listoftables{% - \if@twocolumn - \@restonecoltrue\onecolumn - \else - \@restonecolfalse - \fi - \chapter*{\listtablename}% - \@mkboth{% - \MakeUppercase\listtablename}% - {\MakeUppercase\listtablename}% - \@starttoc{lot}% - \if@restonecol\twocolumn\fi - } -\let\l@table\l@figure -\newdimen\bibindent -\setlength\bibindent{1.5em} -\newenvironment{thebibliography}[1] - {\chapter*{\bibname}% - \@mkboth{\MakeUppercase\bibname}{\MakeUppercase\bibname}% - \list{\@biblabel{\@arabic\c@enumiv}}% - {\settowidth\labelwidth{\@biblabel{#1}}% - \leftmargin\labelwidth - \advance\leftmargin\labelsep - \@openbib@code - \usecounter{enumiv}% - \let\p@enumiv\@empty - \renewcommand\theenumiv{\@arabic\c@enumiv}}% - \sloppy - \clubpenalty4000 - \@clubpenalty \clubpenalty - \widowpenalty4000% - \sfcode`\.\@m} - {\def\@noitemerr - {\@latex@warning{Empty `thebibliography' environment}}% - \endlist} -\newcommand\newblock{\hskip .11em\@plus.33em\@minus.07em} -\let\@openbib@code\@empty -\newenvironment{theindex} - {\if@twocolumn - \@restonecolfalse - \else - \@restonecoltrue - \fi - \columnseprule \z@ - \columnsep 35\p@ - \twocolumn[\@makeschapterhead{\indexname}]% - \@mkboth{\MakeUppercase\indexname}% - {\MakeUppercase\indexname}% - \thispagestyle{plain}\parindent\z@ - \parskip\z@ \@plus .3\p@\relax - \let\item\@idxitem} - {\if@restonecol\onecolumn\else\clearpage\fi} -\newcommand\@idxitem{\par\hangindent 40\p@} -\newcommand\subitem{\@idxitem \hspace*{20\p@}} -\newcommand\subsubitem{\@idxitem \hspace*{30\p@}} -\newcommand\indexspace{\par \vskip 10\p@ \@plus5\p@ \@minus3\p@\relax} -\renewcommand\footnoterule{% - \kern-3\p@ - \hrule\@width.4\columnwidth - \kern2.6\p@} -\@addtoreset{footnote}{chapter} -\newcommand\@makefntext[1]{% - \parindent 1em% - \noindent - \hb@xt@1.8em{\hss\@makefnmark}#1} -\newcommand\contentsname{Contents} -\newcommand\listfigurename{List of Figures} -\newcommand\listtablename{List of Tables} -\newcommand\bibname{Bibliography} -\newcommand\indexname{Index} -\newcommand\figurename{Figure} -\newcommand\tablename{Table} -\newcommand\partname{Part} -\newcommand\chaptername{Chapter} -\newcommand\appendixname{Appendix} -\def\today{\ifcase\month\or - January\or February\or March\or April\or May\or June\or - July\or August\or September\or October\or November\or December\fi - \space\number\day, \number\year} -\setlength\columnsep{10\p@} -\setlength\columnseprule{0\p@} -\pagestyle{headings} -\pagenumbering{arabic} -\if@twoside -\else - \raggedbottom -\fi -\if@twocolumn - \twocolumn - \sloppy - \flushbottom -\else - \onecolumn -\fi -\endinput -%% -%% End of file `book.cls'. diff --git a/deprecated/katabatic/doc/closed.png b/deprecated/katabatic/doc/closed.png deleted file mode 100644 index e4e2b25a..00000000 Binary files a/deprecated/katabatic/doc/closed.png and /dev/null differ diff --git a/deprecated/katabatic/doc/customHierarchy.html b/deprecated/katabatic/doc/customHierarchy.html deleted file mode 100644 index 3c5a145b..00000000 --- a/deprecated/katabatic/doc/customHierarchy.html +++ /dev/null @@ -1,65 +0,0 @@ -
-

The complete class hierarchy could be accessed here.

-

All the classes below are in the Katabatic namespace.

-

The inheritance tree has been splitted/simplificated.

- Legend :
-
-      
-        
-        
-      
ClassA  ClassA is abstract
ClassB  ClassB is instanciable
-
-
- -

Utilities

- -
BaseObserver -
- -
Observer -
- -
Observable -
- -

Katabatic Engine

- -
Katabatic -
ChipTools -
KatabaticEngine -
Session -
DataAlgorithm -
- -

Contacts

- -
AutoContact -
- -
AutoContactTerminal -
AutoContactTurn -
AutoContactHTee -
AutoContactVTee -
- -

Segments

- -
AutoSegment -
- -
AutoHorizontal -
AutoVertical -
- -

GCell

- -
GCell -
BaseGrid::Axis -
BaseGrid -
- -
Grid -
- -
GCellGrid -
diff --git a/deprecated/katabatic/doc/customSummary.html b/deprecated/katabatic/doc/customSummary.html deleted file mode 100644 index 4e0c9a7f..00000000 --- a/deprecated/katabatic/doc/customSummary.html +++ /dev/null @@ -1,81 +0,0 @@ - - - - - - Katabatic Documentation - - -

Katabatic Documentation

-
- - - - - - - - - -
SummaryNamespacesClass HierarchyClassesMember Index
-
-
-
- - - -

Katabatic Documentation Summary

-
-

The classical Doxygen module documentation could be accessed here.

- - - -

API documentations

- -
- - -
- - - - - -
Customized Concepts (a.k.a. modules)Return to top of page
- - - - - -
Katabatic DocumentationCopyright © 2005-2007 LIP6. All rights reserved
- - diff --git a/deprecated/katabatic/doc/doxyfile b/deprecated/katabatic/doc/doxyfile deleted file mode 100644 index 4105f071..00000000 --- a/deprecated/katabatic/doc/doxyfile +++ /dev/null @@ -1,290 +0,0 @@ -# -*- explicit-buffer-name: "doxyfile" -*- -# Doxyfile 1.3.4 - -# -------------------------------------------------------------------- -# Project related configuration options - -PROJECT_NAME = "Katabatic - Routing Toolbox" -PROJECT_NUMBER = 1.0 -OUTPUT_DIRECTORY = . -OUTPUT_LANGUAGE = English -MARKDOWN_SUPPORT = NO -#USE_WINDOWS_ENCODING = NO -#LAYOUT_FILE = DoxygenLayout.xml -BRIEF_MEMBER_DESC = YES -REPEAT_BRIEF = YES -ALWAYS_DETAILED_SEC = NO -INLINE_INHERITED_MEMB = NO -FULL_PATH_NAMES = NO -STRIP_FROM_PATH = -SHORT_NAMES = NO -JAVADOC_AUTOBRIEF = NO -MULTILINE_CPP_IS_BRIEF = NO -#DETAILS_AT_TOP = YES -INHERIT_DOCS = YES -DISTRIBUTE_GROUP_DOC = NO -TAB_SIZE = 2 -ALIASES = "function=\fn"\ - "important=\par Important:\n"\ - "remark=\par Remark:\n"\ - "sreturn=\b Returns:"\ - "True=\b True"\ - "true=\b true"\ - "False=\b False"\ - "false=\b false"\ - "VERTICAL=\b VERTICAL"\ - "HORIZONTAL=\b HORIZONTAL"\ - "NULL=\c NULL"\ - "vector=\c vector"\ - "Collection=\c Collection"\ - "Collections=\c Collections"\ - "Box=\c Box"\ - "box=\c box"\ - "Layer=\c Layer"\ - "Layers=\c Layers"\ - "Net=\c Net"\ - "Nets=\c Nets"\ - "Pin=\c Pin"\ - "Pins=\c Pins"\ - "Plug=\c Plug"\ - "Plugs=\c Plugs"\ - "RoutingPad=\c RoutingPad"\ - "RoutingPads=\c RoutingPads"\ - "Cell=\c Cell"\ - "Cells=\c Cells"\ - "ToolEngine=\c ToolEngine"\ - "ToolEngines=\c ToolEngines"\ - "GCell=\c GCell"\ - "GCells=\c GCells"\ - "Splitter=\c Splitter"\ - "Splitters=\c Splitters"\ - "SplitterContact=\c SplitterContact"\ - "SplitterContacts=\c SplitterContacts"\ - "Hurricane=Hurricane"\ - "STL=STL"\ - "red{1}=\1" -OPTIMIZE_OUTPUT_FOR_C = NO -OPTIMIZE_OUTPUT_JAVA = NO -SUBGROUPING = YES - -# -------------------------------------------------------------------- -# Build related configuration options - -EXTRACT_ALL = NO -EXTRACT_PRIVATE = YES -EXTRACT_STATIC = YES -EXTRACT_LOCAL_CLASSES = YES -EXTRACT_ANON_NSPACES = YES -HIDE_UNDOC_MEMBERS = YES -HIDE_UNDOC_CLASSES = YES -HIDE_FRIEND_COMPOUNDS = NO -HIDE_IN_BODY_DOCS = NO -INTERNAL_DOCS = NO -CASE_SENSE_NAMES = YES -HIDE_SCOPE_NAMES = YES -SHOW_INCLUDE_FILES = YES -INLINE_INFO = YES -SORT_MEMBER_DOCS = NO -GENERATE_TODOLIST = YES -GENERATE_TESTLIST = YES -GENERATE_BUGLIST = YES -GENERATE_DEPRECATEDLIST= YES -ENABLED_SECTIONS = -MAX_INITIALIZER_LINES = 1 -SHOW_USED_FILES = YES - -# -------------------------------------------------------------------- -# Configuration options related to warning and progress messages - -QUIET = YES -WARNINGS = YES -WARN_IF_UNDOCUMENTED = NO -WARN_IF_DOC_ERROR = YES -WARN_FORMAT = "$file:$line: $text" -WARN_LOGFILE = - -# -------------------------------------------------------------------- -# Configuration options related to the input files - -INPUT = \ - Katabatic.dox \ - ../src/katabatic/Observer.h ../src/Observer.cpp Observer.dox \ - ../src/katabatic/Constants.h Constants.dox \ - ../src/katabatic/AutoContact.h ../src/AutoContact.cpp AutoContact.dox \ - ../src/katabatic/AutoContactTerminal.h ../src/AutoContactTerminal.cpp AutoContactTerminal.dox \ - ../src/katabatic/AutoContactTurn.h ../src/AutoContactTurn.cpp AutoContactTurn.dox \ - ../src/katabatic/AutoContactHTee.h ../src/AutoContactHTee.cpp AutoContactHTee.dox \ - ../src/katabatic/AutoContactVTee.h ../src/AutoContactVTee.cpp AutoContactVTee.dox \ - ../src/katabatic/AutoSegment.h ../src/AutoSegment.cpp AutoSegment.dox \ - ../src/katabatic/AutoSegments.h AutoSegments.dox \ - ../src/katabatic/AutoHorizontal.h ../src/AutoHorizontal.cpp AutoHorizontal.dox \ - ../src/katabatic/AutoVertical.h ../src/AutoVertical.cpp AutoVertical.dox \ - ../src/katabatic/GCell.h ../src/GCell.cpp GCell.dox \ - ../src/katabatic/GCells.h GCells.dox \ - ../src/katabatic/Grid.h ../src/Grid.cpp Grid.dox \ - ../src/katabatic/GCellGrid.h ../src/GCellGrid.cpp GCellGrid.dox \ - ../src/katabatic/Session.h ../src/Session.cpp Session.dox \ - ../src/katabatic/ChipTools.h ../src/ChipTools.cpp ChipTools.dox \ - ../src/LoadGrByNet.cpp \ - ../src/katabatic/KatabaticEngine.h ../src/KatabaticEngine.cpp KatabaticEngine.dox - -FILE_PATTERNS = *.h \ - *.cpp \ - *.dox - -RECURSIVE = YES - -EXCLUDE = -EXCLUDE_SYMLINKS = NO -EXCLUDE_PATTERNS = -EXAMPLE_PATH = . -EXAMPLE_PATTERNS = -EXAMPLE_RECURSIVE = NO -IMAGE_PATH = images -INPUT_FILTER = -FILTER_SOURCE_FILES = YES - -# -------------------------------------------------------------------- -# Configuration options related to source browsing - -SOURCE_BROWSER = NO -INLINE_SOURCES = NO -STRIP_CODE_COMMENTS = YES -REFERENCED_BY_RELATION = YES -REFERENCES_RELATION = YES -VERBATIM_HEADERS = YES - -# -------------------------------------------------------------------- -# Configuration options related to the alphabetical class index - -ALPHABETICAL_INDEX = YES -COLS_IN_ALPHA_INDEX = 2 -IGNORE_PREFIX = - -# -------------------------------------------------------------------- -# Configuration options related to the HTML output - -GENERATE_HTML = YES -#HTML_DYNAMIC_SECTIONS = YES -HTML_OUTPUT = html -HTML_FILE_EXTENSION = .html -HTML_HEADER = header.html -HTML_FOOTER = footer.html -HTML_STYLESHEET = SoC.css -GENERATE_HTMLHELP = NO -CHM_FILE = -HHC_LOCATION = -GENERATE_CHI = NO -BINARY_TOC = NO -TOC_EXPAND = NO -DISABLE_INDEX = NO -ENUM_VALUES_PER_LINE = 1 -GENERATE_TREEVIEW = NO -TREEVIEW_WIDTH = 250 - -# -------------------------------------------------------------------- -# Configuration options related to the LaTeX output - -GENERATE_LATEX = YES -LATEX_OUTPUT = latex -LATEX_CMD_NAME = latex -MAKEINDEX_CMD_NAME = makeindex -COMPACT_LATEX = NO -PAPER_TYPE = a4wide -EXTRA_PACKAGES = -LATEX_HEADER = header.tex -PDF_HYPERLINKS = YES -USE_PDFLATEX = YES -LATEX_BATCHMODE = NO -LATEX_HIDE_INDICES = NO - -# -------------------------------------------------------------------- -# Configuration options related to the RTF output - -GENERATE_RTF = YES -RTF_OUTPUT = rtf -COMPACT_RTF = NO -RTF_HYPERLINKS = NO -RTF_STYLESHEET_FILE = -RTF_EXTENSIONS_FILE = - -# -------------------------------------------------------------------- -# Configuration options related to the man page output - -GENERATE_MAN = YES -MAN_OUTPUT = man -MAN_EXTENSION = .3 -MAN_LINKS = NO - -# -------------------------------------------------------------------- -# Configuration options related to the XML output - -GENERATE_XML = NO -XML_OUTPUT = xml -XML_SCHEMA = -XML_DTD = - -# -------------------------------------------------------------------- -# Configuration options for the AutoGen Definitions output - -GENERATE_AUTOGEN_DEF = NO - -# -------------------------------------------------------------------- -# Configuration options related to the Perl module output - -GENERATE_PERLMOD = NO -PERLMOD_LATEX = NO -PERLMOD_PRETTY = YES -PERLMOD_MAKEVAR_PREFIX = - -# -------------------------------------------------------------------- -# Configuration options related to the preprocessor - -ENABLE_PREPROCESSING = YES -MACRO_EXPANSION = NO -EXPAND_ONLY_PREDEF = NO -SEARCH_INCLUDES = YES -INCLUDE_PATH = -INCLUDE_FILE_PATTERNS = -PREDEFINED = __DOXYGEN__ -EXPAND_AS_DEFINED = -SKIP_FUNCTION_MACROS = YES - -# -------------------------------------------------------------------- -# Configuration::addtions related to external references - -TAGFILES = ../../hurricane/doc/hurricane/html/hurricane.tag=../hurricane \ - ../../hurricane/doc/viewer/html/viewer.tag=../viewer \ - ../../crlcore/doc/crlcore/html/crlcore.tag=../crlcore -GENERATE_TAGFILE = html/katabatic.tag -ALLEXTERNALS = NO -EXTERNAL_GROUPS = YES -PERL_PATH = /usr/bin/perl - -# -------------------------------------------------------------------- -# Configuration options related to the dot tool - -CLASS_DIAGRAMS = NO -HIDE_UNDOC_RELATIONS = YES -HAVE_DOT = YES -CLASS_GRAPH = YES -COLLABORATION_GRAPH = NO -UML_LOOK = NO -TEMPLATE_RELATIONS = NO -INCLUDE_GRAPH = YES -INCLUDED_BY_GRAPH = YES -CALL_GRAPH = NO -GRAPHICAL_HIERARCHY = NO -DOT_IMAGE_FORMAT = png -DOT_PATH = -DOTFILE_DIRS = -#MAX_DOT_GRAPH_WIDTH = 512 -#MAX_DOT_GRAPH_HEIGHT = 1024 -#MAX_DOT_GRAPH_DEPTH = 0 -GENERATE_LEGEND = YES -DOT_CLEANUP = YES - -# -------------------------------------------------------------------- -# Configuration::addtions related to the search engine - -SEARCHENGINE = NO diff --git a/deprecated/katabatic/doc/dynsections.js b/deprecated/katabatic/doc/dynsections.js deleted file mode 100644 index ed092c7f..00000000 --- a/deprecated/katabatic/doc/dynsections.js +++ /dev/null @@ -1,97 +0,0 @@ -function toggleVisibility(linkObj) -{ - var base = $(linkObj).attr('id'); - var summary = $('#'+base+'-summary'); - var content = $('#'+base+'-content'); - var trigger = $('#'+base+'-trigger'); - var src=$(trigger).attr('src'); - if (content.is(':visible')===true) { - content.hide(); - summary.show(); - $(linkObj).addClass('closed').removeClass('opened'); - $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); - } else { - content.show(); - summary.hide(); - $(linkObj).removeClass('closed').addClass('opened'); - $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); - } - return false; -} - -function updateStripes() -{ - $('table.directory tr'). - removeClass('even').filter(':visible:even').addClass('even'); -} -function toggleLevel(level) -{ - $('table.directory tr').each(function(){ - var l = this.id.split('_').length-1; - var i = $('#img'+this.id.substring(3)); - var a = $('#arr'+this.id.substring(3)); - if (l -
- - - - - -
Generated by doxygen $doxygenversion on $dateReturn to top of page
- - - - - -
Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
- - diff --git a/deprecated/katabatic/doc/header.html b/deprecated/katabatic/doc/header.html deleted file mode 100644 index fb9adbaf..00000000 --- a/deprecated/katabatic/doc/header.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

Katabatic - Routing Toolbox

- -
- diff --git a/deprecated/katabatic/doc/header.tex b/deprecated/katabatic/doc/header.tex deleted file mode 100644 index ec779312..00000000 --- a/deprecated/katabatic/doc/header.tex +++ /dev/null @@ -1,47 +0,0 @@ - - - \documentclass[a4paper]{asimbook} - - \usepackage{a4wide} - \usepackage{makeidx} - \usepackage{fancyhdr} - \usepackage{graphicx} - \usepackage{multicol} - \usepackage{float} - \usepackage{textcomp} - \usepackage{alltt} - \usepackage{times} - \ifx\pdfoutput\undefined - \usepackage[ps2pdf,pagebackref=true,colorlinks=true,linkcolor=blue]{hyperref} - \usepackage{pspicture} - \else - \usepackage[pdftex,pagebackref=true,colorlinks=true,linkcolor=blue]{hyperref} - \fi - \usepackage{doxygen} - - \makeindex - \setcounter{tocdepth}{1} - \renewcommand{\footrulewidth}{0.4pt} - \raggedbottom - - - \begin{document} - - \begin{titlepage} - \vspace*{7cm} - \begin{center} - {\Large $projectname Reference Manual\\[1ex]\large $projectnumber }\\ - \vspace*{1cm} - {\large Generated by Doxygen $doxygenversion}\\ - \vspace*{0.5cm} - {\small $datetime}\\ - \end{center} - \end{titlepage} - - \clearemptydoublepage - \pagenumbering{roman} - - \tableofcontents - \clearemptydoublepage - - \pagenumbering{arabic} diff --git a/deprecated/katabatic/doc/html.entry b/deprecated/katabatic/doc/html.entry deleted file mode 100644 index 08e4fdf5..00000000 --- a/deprecated/katabatic/doc/html.entry +++ /dev/null @@ -1 +0,0 @@ -
  • Katabatic
    Routing Database

    diff --git a/deprecated/katabatic/doc/html/AutoContactHTee_8h_source.html b/deprecated/katabatic/doc/html/AutoContactHTee_8h_source.html deleted file mode 100644 index 70d9b73f..00000000 --- a/deprecated/katabatic/doc/html/AutoContactHTee_8h_source.html +++ /dev/null @@ -1,79 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - - -
    -
    -
    AutoContactHTee.h
    -
    -
    -
    1 // -*- C++ -*-
    2 //
    3 // This file is part of the Coriolis Software.
    4 // Copyright (c) UPMC 2012-2018, All Rights Reserved
    5 //
    6 // +-----------------------------------------------------------------+
    7 // | C O R I O L I S |
    8 // | K a t a b a t i c - Routing Toolbox |
    9 // | |
    10 // | Author : Jean-Paul CHAPUT |
    11 // | E-mail : Jean-Paul.Chaput@lip6.fr |
    12 // | =============================================================== |
    13 // | C++ Header : "./katabatic/AutoContactHTee.h" |
    14 // +-----------------------------------------------------------------+
    15 
    16 
    17 #ifndef KATABATIC_AUTOCONTACT_HTEE_H
    18 #define KATABATIC_AUTOCONTACT_HTEE_H
    19 
    20 #include "katabatic/AutoContact.h"
    21 
    22 
    23 namespace Katabatic {
    24 
    25  class AutoHorizontal;
    26  class AutoVertical;
    27 
    28 
    29 // -------------------------------------------------------------------
    30 // Class : "Katabatic::AutoContactHTee".
    31 
    32 
    33  class AutoContactHTee : public AutoContact {
    34  friend class AutoContact;
    35  public:
    36  static AutoContactHTee* create ( GCell*, Net*, const Layer* );
    37  protected:
    38  // Constructors & Destructors.
    40  virtual ~AutoContactHTee ();
    41  virtual void _invalidate ( unsigned int flags );
    42  public:
    43  inline AutoHorizontal* getHorizontal1 () const;
    44  inline AutoHorizontal* getHorizontal2 () const;
    45  inline AutoVertical* getVertical1 () const;
    46  virtual AutoSegment* getOpposite ( const AutoSegment* ) const;
    47  virtual AutoSegment* getPerpandicular ( const AutoSegment* ) const;
    48  virtual AutoSegment* getSegment ( unsigned int ) const;
    49  virtual void updateGeometry ();
    50  virtual void updateTopology ();
    51  virtual void cacheDetach ( AutoSegment* );
    52  virtual void cacheAttach ( AutoSegment* );
    53  virtual void updateCache ();
    54  virtual string _getTypeName () const;
    55  private:
    57  AutoContactHTee& operator= ( const AutoContactHTee& );
    58  private:
    59  AutoHorizontal* _horizontal1;
    60  AutoHorizontal* _horizontal2;
    61  AutoVertical* _vertical1;
    62  };
    63 
    64 
    65  inline AutoHorizontal* AutoContactHTee::getHorizontal1 () const { return _horizontal1; };
    66  inline AutoHorizontal* AutoContactHTee::getHorizontal2 () const { return _horizontal2; };
    67  inline AutoVertical* AutoContactHTee::getVertical1 () const { return _vertical1; };
    68 
    69 
    70 } // Katabatic namespace.
    71 
    72 
    73 INSPECTOR_P_SUPPORT(Katabatic::AutoContactHTee);
    74 
    75 
    76 #endif // KATABATIC_AUTOCONTACT_HTEE_H
    virtual void updateTopology()
    Definition: AutoContactHTee.cpp:266
    -
    virtual AutoSegment * getOpposite(const AutoSegment *) const
    Definition: AutoContactHTee.cpp:84
    -
    Concrete Horizontal AutoSegment.
    Definition: AutoHorizontal.h:31
    - -
    static AutoContactHTee * create(GCell *, Net *, const Layer *)
    Definition: AutoContactHTee.cpp:50
    -
    Routing Global Cell.
    Definition: GCell.h:74
    -
    Abstract base class for AutoSegment.
    Definition: AutoSegment.h:104
    -
    The namespace dedicated to Katabatic.
    Definition: Katabatic.dox:13
    -
    virtual AutoSegment * getSegment(unsigned int) const
    Definition: AutoContactHTee.cpp:96
    -
    virtual void updateGeometry()
    Definition: AutoContactHTee.cpp:239
    - -
    Concrete Vertical AutoSegment.
    Definition: AutoVertical.h:32
    -
    virtual AutoSegment * getPerpandicular(const AutoSegment *) const
    Definition: AutoContactHTee.cpp:92
    -
    Abstract base class for AutoContact.
    Definition: AutoContact.h:70
    - -
    AutoContact H-Tee (two H, one V)
    Definition: AutoContactHTee.h:33
    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/AutoContactTerminal_8h_source.html b/deprecated/katabatic/doc/html/AutoContactTerminal_8h_source.html deleted file mode 100644 index 7f66f726..00000000 --- a/deprecated/katabatic/doc/html/AutoContactTerminal_8h_source.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - - -
    -
    -
    AutoContactTerminal.h
    -
    -
    -
    1 // -*- C++ -*-
    2 //
    3 // This file is part of the Coriolis Software.
    4 // Copyright (c) UPMC/LIP6 2012-2018, All Rights Reserved
    5 //
    6 // +-----------------------------------------------------------------+
    7 // | C O R I O L I S |
    8 // | K a t a b a t i c - Routing Toolbox |
    9 // | |
    10 // | Author : Jean-Paul CHAPUT |
    11 // | E-mail : Jean-Paul.Chaput@lip6.fr |
    12 // | =============================================================== |
    13 // | C++ Header : "./katabatic/AutoContactTerminal.h" |
    14 // +-----------------------------------------------------------------+
    15 
    16 
    17 #ifndef KATABATIC_AUTOCONTACT_TERMINAL_H
    18 #define KATABATIC_AUTOCONTACT_TERMINAL_H
    19 
    20 #include "katabatic/AutoContact.h"
    21 
    22 
    23 namespace Katabatic {
    24 
    25 
    26 // -------------------------------------------------------------------
    27 // Class : "Katabatic::AutoContactTerminal".
    28 
    29 
    31  friend class AutoContact;
    32  public:
    33  static AutoContactTerminal* create ( GCell* gcell
    34  , Component* anchor
    35  , const Layer* layer
    36  , Point point
    37  , DbU::Unit width
    38  , DbU::Unit height
    39  );
    40  static AutoContactTerminal* create ( GCell* gcell
    41  , Component* anchor
    42  , const Layer* layer
    43  , const DbU::Unit dx
    44  , const DbU::Unit dy
    45  , const DbU::Unit width
    46  , const DbU::Unit height
    47  );
    48  protected:
    49  // Constructors & Destructors.
    51  virtual ~AutoContactTerminal ();
    52  virtual void _invalidate ( unsigned int flags );
    53  public:
    54  virtual Box getNativeConstraintBox () const;
    55  inline AutoSegment* getSegment () const;
    56  virtual AutoSegment* getSegment ( unsigned int ) const;
    57  virtual AutoSegment* getOpposite ( const AutoSegment* ) const;
    58  virtual AutoSegment* getPerpandicular ( const AutoSegment* ) const;
    59  virtual void updateGeometry ();
    60  virtual void updateTopology ();
    61  virtual void cacheDetach ( AutoSegment* );
    62  virtual void cacheAttach ( AutoSegment* );
    63  virtual void updateCache ();
    64  virtual string _getTypeName () const;
    65  private:
    67  AutoContactTerminal& operator= ( const AutoContactTerminal& );
    68  protected:
    69  AutoSegment* _segment;
    70  };
    71 
    72 
    73  inline AutoSegment* AutoContactTerminal::getSegment () const { return _segment; }
    74 
    75 
    76 } // Katabatic namespace.
    77 
    78 
    79 INSPECTOR_P_SUPPORT(Katabatic::AutoContactTerminal);
    80 
    81 
    82 #endif // KATABATIC_AUTOCONTACT_TERMINAL_H
    - -
    virtual void updateGeometry()
    Definition: AutoContactTerminal.cpp:313
    -
    std::int64_t Unit
    -
    static AutoContactTerminal * create(GCell *gcell, Component *anchor, const Layer *layer, Point point, DbU::Unit width, DbU::Unit height)
    Definition: AutoContactTerminal.cpp:55
    - -
    Routing Global Cell.
    Definition: GCell.h:74
    -
    Abstract base class for AutoSegment.
    Definition: AutoSegment.h:104
    -
    The namespace dedicated to Katabatic.
    Definition: Katabatic.dox:13
    - -
    virtual AutoSegment * getOpposite(const AutoSegment *) const
    Definition: AutoContactTerminal.cpp:122
    - -
    AutoContact Terminal (S/T is a Terminal)
    Definition: AutoContactTerminal.h:30
    -
    virtual void updateTopology()
    Definition: AutoContactTerminal.cpp:362
    -
    Abstract base class for AutoContact.
    Definition: AutoContact.h:70
    -
    virtual AutoSegment * getPerpandicular(const AutoSegment *) const
    Definition: AutoContactTerminal.cpp:126
    -
    virtual Box getNativeConstraintBox() const
    Definition: AutoContactTerminal.cpp:142
    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/AutoContactTurn_8h_source.html b/deprecated/katabatic/doc/html/AutoContactTurn_8h_source.html deleted file mode 100644 index 16a7404c..00000000 --- a/deprecated/katabatic/doc/html/AutoContactTurn_8h_source.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - - -
    -
    -
    AutoContactTurn.h
    -
    -
    -
    1 // -*- C++ -*-
    2 //
    3 // This file is part of the Coriolis Software.
    4 // Copyright (c) UPMC 2012-2018, All Rights Reserved
    5 //
    6 // +-----------------------------------------------------------------+
    7 // | C O R I O L I S |
    8 // | K a t a b a t i c - Routing Toolbox |
    9 // | |
    10 // | Author : Jean-Paul CHAPUT |
    11 // | E-mail : Jean-Paul.Chaput@lip6.fr |
    12 // | =============================================================== |
    13 // | C++ Header : "./katabatic/AutoContactTurn.h" |
    14 // +-----------------------------------------------------------------+
    15 
    16 
    17 #ifndef KATABATIC_AUTOCONTACT_TURN_H
    18 #define KATABATIC_AUTOCONTACT_TURN_H
    19 
    20 #include "katabatic/AutoContact.h"
    21 
    22 
    23 namespace Katabatic {
    24 
    25  class AutoContactTerminal;
    26 
    27 
    28 // -------------------------------------------------------------------
    29 // Class : "Katabatic::AutoContactTurn".
    30 
    31 
    32  class AutoContactTurn : public AutoContact {
    33  friend class AutoContact;
    34  public:
    35  static AutoContactTurn* create ( GCell*, Net*, const Layer* );
    36  static void insert ( AutoContactTerminal* );
    37  protected:
    38  // Constructors & Destructors.
    40  virtual ~AutoContactTurn ();
    41  virtual void _invalidate ( unsigned int flags );
    42  public:
    43  inline AutoHorizontal* getHorizontal1 () const;
    44  inline AutoVertical* getVertical1 () const;
    45  virtual AutoSegment* getOpposite ( const AutoSegment* ) const;
    46  virtual AutoSegment* getPerpandicular ( const AutoSegment* ) const;
    47  virtual AutoSegment* getSegment ( unsigned int ) const;
    48  virtual void updateGeometry ();
    49  virtual void updateTopology ();
    50  virtual void cacheDetach ( AutoSegment* );
    51  virtual void cacheAttach ( AutoSegment* );
    52  virtual void updateCache ();
    53  virtual string _getTypeName () const;
    54  private:
    56  AutoContactTurn& operator= ( const AutoContactTurn& );
    57  private:
    58  AutoHorizontal* _horizontal1;
    59  AutoVertical* _vertical1;
    60  };
    61 
    62 
    63  inline AutoHorizontal* AutoContactTurn::getHorizontal1 () const { return _horizontal1; };
    64  inline AutoVertical* AutoContactTurn::getVertical1 () const { return _vertical1; };
    65 
    66 
    67 
    68 } // Katabatic namespace.
    69 
    70 
    71 INSPECTOR_P_SUPPORT(Katabatic::AutoContactTurn);
    72 
    73 
    74 #endif // KATABATIC_AUTOCONTACT_TURN_H
    virtual void updateTopology()
    Definition: AutoContactTurn.cpp:216
    -
    virtual AutoSegment * getSegment(unsigned int) const
    Definition: AutoContactTurn.cpp:97
    -
    virtual void updateGeometry()
    Definition: AutoContactTurn.cpp:189
    -
    Concrete Horizontal AutoSegment.
    Definition: AutoHorizontal.h:31
    - -
    virtual AutoSegment * getPerpandicular(const AutoSegment *) const
    Definition: AutoContactTurn.cpp:89
    -
    virtual AutoSegment * getOpposite(const AutoSegment *) const
    Definition: AutoContactTurn.cpp:85
    -
    Routing Global Cell.
    Definition: GCell.h:74
    -
    Abstract base class for AutoSegment.
    Definition: AutoSegment.h:104
    -
    The namespace dedicated to Katabatic.
    Definition: Katabatic.dox:13
    -
    static AutoContactTurn * create(GCell *, Net *, const Layer *)
    Definition: AutoContactTurn.cpp:50
    -
    AutoContact Turn (one H, one V)
    Definition: AutoContactTurn.h:32
    - -
    AutoContact Terminal (S/T is a Terminal)
    Definition: AutoContactTerminal.h:30
    -
    Concrete Vertical AutoSegment.
    Definition: AutoVertical.h:32
    -
    Abstract base class for AutoContact.
    Definition: AutoContact.h:70
    - -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/AutoContactVTee_8h_source.html b/deprecated/katabatic/doc/html/AutoContactVTee_8h_source.html deleted file mode 100644 index 88afa6ca..00000000 --- a/deprecated/katabatic/doc/html/AutoContactVTee_8h_source.html +++ /dev/null @@ -1,79 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - - -
    -
    -
    AutoContactVTee.h
    -
    -
    -
    1 // -*- C++ -*-
    2 //
    3 // This file is part of the Coriolis Software.
    4 // Copyright (c) UPMC 2012-2018, All Rights Reserved
    5 //
    6 // +-----------------------------------------------------------------+
    7 // | C O R I O L I S |
    8 // | K a t a b a t i c - Routing Toolbox |
    9 // | |
    10 // | Author : Jean-Paul CHAPUT |
    11 // | E-mail : Jean-Paul.Chaput@lip6.fr |
    12 // | =============================================================== |
    13 // | C++ Header : "./katabatic/AutoContactVTee.h" |
    14 // +-----------------------------------------------------------------+
    15 
    16 
    17 #ifndef KATABATIC_AUTOCONTACT_VTEE_H
    18 #define KATABATIC_AUTOCONTACT_VTEE_H
    19 
    20 #include "katabatic/AutoContact.h"
    21 
    22 
    23 namespace Katabatic {
    24 
    25 
    26 // -------------------------------------------------------------------
    27 // Class : "Katabatic::AutoContactVTee".
    28 
    29 
    30  class AutoContactVTee : public AutoContact {
    31  friend class AutoContact;
    32  public:
    33  static AutoContactVTee* create ( GCell*, Net*, const Layer* );
    34  protected:
    35  // Constructors & Destructors.
    37  virtual ~AutoContactVTee ();
    38  virtual void _invalidate ( unsigned int flags );
    39  public:
    40  inline AutoHorizontal* getHorizontal1 () const;
    41  inline AutoVertical* getVertical1 () const;
    42  inline AutoVertical* getVertical2 () const;
    43  virtual AutoSegment* getOpposite ( const AutoSegment* ) const;
    44  virtual AutoSegment* getPerpandicular ( const AutoSegment* ) const;
    45  virtual AutoSegment* getSegment ( unsigned int ) const;
    46  virtual void updateGeometry ();
    47  virtual void updateTopology ();
    48  virtual void cacheDetach ( AutoSegment* );
    49  virtual void cacheAttach ( AutoSegment* );
    50  virtual void updateCache ();
    51  virtual string _getTypeName () const;
    52  private:
    54  AutoContactVTee& operator= ( const AutoContactVTee& );
    55  private:
    56  AutoHorizontal* _horizontal1;
    57  AutoVertical* _vertical1;
    58  AutoVertical* _vertical2;
    59  };
    60 
    61 
    62  inline AutoHorizontal* AutoContactVTee::getHorizontal1 () const { return _horizontal1; };
    63  inline AutoVertical* AutoContactVTee::getVertical1 () const { return _vertical1; };
    64  inline AutoVertical* AutoContactVTee::getVertical2 () const { return _vertical2; };
    65 
    66 
    67 } // Katabatic namespace.
    68 
    69 
    70 INSPECTOR_P_SUPPORT(Katabatic::AutoContactVTee);
    71 
    72 
    73 #endif // KATABATIC_AUTOCONTACT_VTEE_H
    virtual void updateGeometry()
    Definition: AutoContactVTee.cpp:206
    -
    virtual AutoSegment * getSegment(unsigned int) const
    Definition: AutoContactVTee.cpp:96
    -
    Concrete Horizontal AutoSegment.
    Definition: AutoHorizontal.h:31
    - -
    virtual AutoSegment * getPerpandicular(const AutoSegment *) const
    Definition: AutoContactVTee.cpp:92
    -
    virtual void updateTopology()
    Definition: AutoContactVTee.cpp:233
    -
    Routing Global Cell.
    Definition: GCell.h:74
    -
    Abstract base class for AutoSegment.
    Definition: AutoSegment.h:104
    -
    The namespace dedicated to Katabatic.
    Definition: Katabatic.dox:13
    -
    virtual AutoSegment * getOpposite(const AutoSegment *) const
    Definition: AutoContactVTee.cpp:84
    - -
    static AutoContactVTee * create(GCell *, Net *, const Layer *)
    Definition: AutoContactVTee.cpp:50
    -
    AutoContact V-Tee (one H, two V)
    Definition: AutoContactVTee.h:30
    -
    Concrete Vertical AutoSegment.
    Definition: AutoVertical.h:32
    -
    Abstract base class for AutoContact.
    Definition: AutoContact.h:70
    - -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/AutoContact_8h_source.html b/deprecated/katabatic/doc/html/AutoContact_8h_source.html deleted file mode 100644 index 5f9a2216..00000000 --- a/deprecated/katabatic/doc/html/AutoContact_8h_source.html +++ /dev/null @@ -1,205 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - - -
    -
    -
    AutoContact.h
    -
    -
    -
    1 // -*- C++ -*-
    2 //
    3 // This file is part of the Coriolis Software.
    4 // Copyright (c) UPMC 2008-2018, All Rights Reserved
    5 //
    6 // +-----------------------------------------------------------------+
    7 // | C O R I O L I S |
    8 // | K a t a b a t i c - Routing Toolbox |
    9 // | |
    10 // | Author : Jean-Paul CHAPUT |
    11 // | E-mail : Jean-Paul.Chaput@lip6.fr |
    12 // | =============================================================== |
    13 // | C++ Header : "./katabatic/AutoContact.h" |
    14 // +-----------------------------------------------------------------+
    15 
    16 
    17 #ifndef KATABATIC_AUTOCONTACT_H
    18 #define KATABATIC_AUTOCONTACT_H
    19 
    20 #include <vector>
    21 #include <map>
    22 #include "hurricane/Contact.h"
    23 #include "hurricane/ExtensionGo.h"
    24 #include "katabatic/Constants.h"
    25 #include "katabatic/AutoSegment.h"
    26 #include "katabatic/GCell.h"
    27 
    28 
    29 namespace Katabatic {
    30 
    31 
    32  using std::cerr;
    33  using std::endl;
    34  using Hurricane::tab;
    35  using Hurricane::Name;
    36  using Hurricane::Net;
    39  using Hurricane::Layer;
    40  using Hurricane::Contact;
    41  using Hurricane::ExtensionGo;
    42 
    43  class GCell;
    44  class KatabaticEngine;
    45  class AutoHorizontal;
    46  class AutoVertical;
    47  class AutoContact;
    48 
    49 
    50  typedef std::map<Contact*,AutoContact*> AutoContactLut;
    51 
    52 
    53 // -------------------------------------------------------------------
    54 // Class : "Katabatic::AutoContact".
    55 
    56  enum AutoContactFlag { CntFixed = 0x00000001
    57  , CntTerminal = 0x00000002
    58  , CntTurn = 0x00000004
    59  , CntHTee = 0x00000008
    60  , CntVTee = 0x00000010
    61  , CntInvalidated = 0x00000020
    62  , CntInvalidatedCache = 0x00000040
    63  , CntInCreationStage = 0x00000080
    64  , CntBadTopology = 0x00000100
    65  , CntIgnoreAnchor = 0x00000200
    66  , CntWeakTerminal = 0x00000400
    67  , CntUserNativeConstraints = 0x00000800
    68  };
    69 
    70  class AutoContact {
    71  public:
    72  static AutoContact* createFrom ( Contact* );
    73  public:
    74  // Wrapped Contact Accessors.
    75  inline Hook* getBodyHook ();
    76  inline Hook* getAnchorHook ();
    77  inline Component* getAnchor () const;
    78  inline Net* getNet () const;
    79  inline const Layer* getLayer () const;
    80  inline DbU::Unit getX () const;
    81  inline DbU::Unit getY () const;
    82  inline DbU::Unit getDx () const;
    83  inline DbU::Unit getDy () const;
    84  inline Point getCenter () const;
    85  inline Point getPosition () const;
    86  inline DbU::Unit getWidth () const;
    87  inline DbU::Unit getHalfWidth () const;
    88  inline DbU::Unit getHeight () const;
    89  inline DbU::Unit getHalfHeight () const;
    90  inline Components getSlaveComponents () const;
    91  // Wrapped Contact Modifiers.
    92  inline void setLayer ( const Layer* );
    93  inline void setWidth ( DbU::Unit );
    94  inline void setHeight ( DbU::Unit );
    95  inline void setSizes ( DbU::Unit width, DbU::Unit height );
    96  inline void setX ( DbU::Unit );
    97  inline void setY ( DbU::Unit );
    98  inline void setPosition ( DbU::Unit width, DbU::Unit height );
    99  inline void setPosition ( const Point& );
    100  inline void setDx ( DbU::Unit );
    101  inline void setDy ( DbU::Unit );
    102  inline void setOffset ( DbU::Unit dx, DbU::Unit dy );
    103  virtual void translate ( const DbU::Unit& tx, const DbU::Unit& ty );
    104  // Predicates.
    105  inline bool isInCreationStage () const;
    106  inline bool isInvalidated () const;
    107  inline bool isInvalidatedCache () const;
    108  inline bool isTerminal () const;
    109  inline bool isTurn () const;
    110  bool isTee ( unsigned int direction ) const;
    111  inline bool isHTee () const;
    112  inline bool isVTee () const;
    113  inline bool isFixed () const;
    114  inline bool isUserNativeConstraints () const;
    115  inline bool hasBadTopology () const;
    116  bool canDestroy ( unsigned int flags=0 ) const;
    117  bool canMoveUp ( const AutoSegment* moved ) const;
    118  // Accessors.
    119  inline Contact* base () const;
    120  static size_t getAllocateds ();
    121  static const Name& getStaticName ();
    122  virtual const Name& getName () const;
    123  inline size_t getId () const;
    124  virtual Box getBoundingBox () const;
    125  inline GCell* getGCell () const;
    126  virtual AutoSegment* getOpposite ( const AutoSegment* ) const = 0;
    127  virtual AutoSegment* getPerpandicular ( const AutoSegment* ) const = 0;
    128  virtual AutoSegment* getSegment ( unsigned int ) const = 0;
    129  unsigned int getMinDepth () const;
    130  unsigned int getMaxDepth () const;
    131  void getLengths ( DbU::Unit* lengths, AutoSegment::DepthLengthSet& );
    132  virtual Box getNativeConstraintBox () const;
    133  Interval getNativeUConstraints ( unsigned int direction ) const;
    134  Interval getUConstraints ( unsigned int direction ) const;
    135  inline DbU::Unit getCBXMin () const;
    136  inline DbU::Unit getCBXMax () const;
    137  inline DbU::Unit getCBYMin () const;
    138  inline DbU::Unit getCBYMax () const;
    139  inline Box getConstraintBox () const;
    140  Box& intersectConstraintBox ( Box& box ) const;
    141  // Collections.
    142  AutoSegments getAutoSegments ();
    143  // Modifiers.
    144  void invalidate ( unsigned int flags=0 );
    145  virtual void cacheDetach ( AutoSegment* ) = 0;
    146  virtual void cacheAttach ( AutoSegment* ) = 0;
    147  virtual void updateCache () = 0;
    148  virtual void updateGeometry () = 0;
    149  virtual void updateTopology () = 0;
    150  void showTopologyError ( const std::string&, unsigned int flags=0 );
    151  virtual void checkTopology ();
    152  inline void setFlags ( unsigned int );
    153  inline void unsetFlags ( unsigned int );
    154  void setGCell ( GCell* );
    155  inline void setCBXMin ( DbU::Unit xMin );
    156  inline void setCBXMax ( DbU::Unit xMax );
    157  inline void setCBYMin ( DbU::Unit yMin );
    158  inline void setCBYMax ( DbU::Unit yMax );
    159  void setConstraintBox ( const Box& box );
    160  bool restrictConstraintBox ( DbU::Unit constraintMin
    161  , DbU::Unit constraintMax
    162  , unsigned int flags=KbWarnOnError );
    163  void restoreNativeConstraintBox ();
    164  void migrateConstraintBox ( AutoContact* other );
    165  void destroy ();
    166  // Inspector Management.
    167  Record* _getRecord () const;
    168  virtual string _getString () const;
    169  virtual string _getTypeName () const;
    170 
    171  private:
    172  // Internal: Attributes.
    173  static size_t _maxId;
    174  static size_t _allocateds;
    175  static const Name _goName;
    176 
    177  protected:
    178  size_t _id;
    179  Contact* _contact;
    180  GCell* _gcell;
    181  unsigned int _flags;
    182  int _dxMin:8;
    183  int _dxMax:8;
    184  int _dyMin:8;
    185  int _dyMax:8;
    186 
    187  protected:
    188  // Constructors & Destructors.
    189  AutoContact ( GCell*, Contact* );
    190  virtual ~AutoContact ();
    191  static void _preCreate ( GCell*, Net*, const Layer* );
    192  virtual void _postCreate ();
    193  virtual void _preDestroy ();
    194  private:
    195  AutoContact ( const AutoContact& );
    196  AutoContact& operator= ( const AutoContact& );
    197 
    198  protected:
    199  inline int _getDeltaMin ( DbU::Unit x, DbU::Unit xMin );
    200  inline int _getDeltaMax ( DbU::Unit x, DbU::Unit xMin, DbU::Unit xMax );
    201  static void _getTopology ( Contact*, Component*& anchor, Horizontal**&, Vertical**&, size_t );
    202  virtual void _invalidate ( unsigned int flags ) = 0;
    203  };
    204 
    205 
    206 // Wrapped Contact Inline Functions.
    207  inline Hook* AutoContact::getBodyHook () { return _contact->getBodyHook(); }
    208  inline Hook* AutoContact::getAnchorHook () { return _contact->getAnchorHook(); }
    209  inline Component* AutoContact::getAnchor () const { return _contact->getAnchor(); }
    210  inline Net* AutoContact::getNet () const { return _contact->getNet(); }
    211  inline const Layer* AutoContact::getLayer () const { return _contact->getLayer(); }
    212  inline DbU::Unit AutoContact::getX () const { return _contact->getX(); }
    213  inline DbU::Unit AutoContact::getY () const { return _contact->getY(); }
    214  inline DbU::Unit AutoContact::getDx () const { return _contact->getDx(); }
    215  inline DbU::Unit AutoContact::getDy () const { return _contact->getDy(); }
    216  inline Point AutoContact::getCenter () const { return _contact->getCenter(); }
    217  inline Point AutoContact::getPosition () const { return _contact->getPosition(); }
    218  inline DbU::Unit AutoContact::getWidth () const { return _contact->getWidth(); }
    219  inline DbU::Unit AutoContact::getHalfWidth () const { return _contact->getHalfWidth(); }
    220  inline DbU::Unit AutoContact::getHeight () const { return _contact->getHeight(); }
    221  inline DbU::Unit AutoContact::getHalfHeight () const { return _contact->getHalfHeight(); }
    222  inline Components AutoContact::getSlaveComponents () const { return _contact->getSlaveComponents(); }
    223  inline void AutoContact::setLayer ( const Layer* layer ) { _contact->setLayer(layer); }
    224  inline void AutoContact::setWidth ( DbU::Unit w ) { _contact->setWidth(w); }
    225  inline void AutoContact::setHeight ( DbU::Unit h ) { _contact->setHeight(h); }
    226  inline void AutoContact::setSizes ( DbU::Unit w, DbU::Unit h ) { _contact->setSizes(w,h); }
    227  inline void AutoContact::setX ( DbU::Unit x ) { _contact->setX(x); }
    228  inline void AutoContact::setY ( DbU::Unit y ) { _contact->setY(y); }
    229  inline void AutoContact::setPosition ( DbU::Unit x, DbU::Unit y ) { _contact->setPosition(x,y); }
    230  inline void AutoContact::setPosition ( const Point& p ) { _contact->setPosition(p); }
    231  inline void AutoContact::setDx ( DbU::Unit dx ) { _contact->setDx(dx); }
    232  inline void AutoContact::setDy ( DbU::Unit dy ) { _contact->setDy(dy); }
    233  inline void AutoContact::setOffset ( DbU::Unit dx, DbU::Unit dy ) { _contact->setOffset(dx,dy); }
    234 // AutoContact Inline Functions.
    235  inline bool AutoContact::isInCreationStage () const { return _flags&CntInCreationStage; }
    236  inline bool AutoContact::isInvalidated () const { return _flags&CntInvalidated; }
    237  inline bool AutoContact::isInvalidatedCache () const { return _flags&CntInvalidatedCache; }
    238  inline bool AutoContact::isTurn () const { return _flags&CntTurn; }
    239  inline bool AutoContact::isFixed () const { return _flags&CntFixed; }
    240  inline bool AutoContact::isUserNativeConstraints () const { return _flags&CntUserNativeConstraints; }
    241  inline bool AutoContact::isTerminal () const { return _flags&CntTerminal; }
    242  inline bool AutoContact::isHTee () const { return _flags&CntHTee; }
    243  inline bool AutoContact::isVTee () const { return _flags&CntVTee; }
    244  inline bool AutoContact::hasBadTopology () const { return _flags&CntBadTopology; }
    245  inline size_t AutoContact::getId () const { return _id; }
    246  inline Contact* AutoContact::base () const { return _contact; }
    247  inline GCell* AutoContact::getGCell () const { return _gcell; }
    249  inline void AutoContact::setCBXMin ( DbU::Unit xMin ) { _dxMin = _getDeltaMin(xMin,_gcell->getX()); }
    250  inline void AutoContact::setCBXMax ( DbU::Unit xMax ) { _dxMax = _getDeltaMax(xMax,_gcell->getX(),_gcell->getXMax()); }
    251  inline void AutoContact::setCBYMin ( DbU::Unit yMin ) { _dyMin = _getDeltaMin(yMin,_gcell->getY()); }
    252  inline void AutoContact::setCBYMax ( DbU::Unit yMax ) { _dyMax = _getDeltaMax(yMax,_gcell->getY(),_gcell->getYMax()); }
    253  inline void AutoContact::setFlags ( unsigned int flags ) { _flags|= flags; }
    254  inline void AutoContact::unsetFlags ( unsigned int flags ) { _flags&=~flags; }
    255  inline int AutoContact::_getDeltaMin ( DbU::Unit x, DbU::Unit xMin ) { if (x<xMin) return 0; return (int)DbU::toLambda(x-xMin); }
    256  inline int AutoContact::_getDeltaMax ( DbU::Unit x, DbU::Unit xMin, DbU::Unit xMax ) { if (x>xMax) x=xMax; return (int)DbU::toLambda(x-xMin); }
    257 
    259  { return isFixed() ? _contact->getX() : DbU::fromLambda(_dxMin) + _gcell->getX(); }
    260 
    262  { return isFixed() ? _contact->getX() : DbU::fromLambda(_dxMax) + _gcell->getX(); }
    263 
    265  { return isFixed() ? _contact->getY() : DbU::fromLambda(_dyMin) + _gcell->getY(); }
    266 
    268  { return isFixed() ? _contact->getY() : DbU::fromLambda(_dyMax) + _gcell->getY(); }
    269 
    270 // -------------------------------------------------------------------
    271 // Class : "Katabatic::LocatorHelper".
    272 
    274  public:
    275  inline LocatorHelper ( AutoContact*, unsigned int flags=0 );
    276  inline bool isValid () const;
    277  inline AutoSegment* getSegment () const;
    278  inline void progress ();
    279  private:
    280  inline unsigned int _min () const;
    281  inline unsigned int _max () const;
    282  private:
    283  unsigned int _flags;
    284  unsigned int _index;
    285  AutoContact* _contact;
    286  };
    287 
    288 
    289  inline LocatorHelper::LocatorHelper ( AutoContact* contact, unsigned int flags )
    290  : _flags(flags), _index(_min()), _contact(contact)
    291  {
    292  cdebug_tabw(145,1);
    293  cdebug_log(145,0) << "CTOR LocatorHelper " << contact->_getString() << endl;
    294  cdebug_log(145,0) << "+ _min():" << _min() << endl;
    295  cdebug_log(145,0) << "+ _max():" << _max() << endl;
    296  cdebug_log(145,0) << "+ getSegment(_min()):" << _contact->getSegment(_min()) << endl;
    297  if (not _contact->getSegment(_index)) progress();
    298  cdebug_tabw(145,-1);
    299  }
    300 
    301  inline bool LocatorHelper::isValid () const
    302  { return _index < _max(); }
    303 
    304  inline unsigned int LocatorHelper::_min () const
    305  { return (_flags & (KbHorizontal|KbWithPerpands)) ? 0 : 2; }
    306 
    307  inline unsigned int LocatorHelper::_max () const
    308  { return ((_flags & KbHorizontal) and not (_flags & KbWithPerpands)) ? 2 : 4; }
    309 
    311  {
    312  cdebug_log(145,0) << "LocatorHelper::getSegment(" << _index << ") - " << _contact->getSegment(_index) << endl;
    313  return (_index < _max()) ? _contact->getSegment(_index) : NULL;
    314  }
    315 
    316  inline void LocatorHelper::progress ()
    317  {
    318  cdebug_tabw(145,1);
    319  ++_index;
    320  cdebug_log(145,0) << "LocatorHelper::progress() [" << _index << "] " << _contact->getSegment(_index) << endl;
    321  while ((_index < _max()) and (_contact->getSegment(_index) == NULL)) {
    322  ++_index;
    323  cdebug_log(145,0) << "LocatorHelper::progress() [" << _index << "] " << _contact->getSegment(_index) << endl;
    324  }
    325  cdebug_tabw(145,-1);
    326  }
    327 
    328 
    329 // -------------------------------------------------------------------
    330 // Helper Functions.
    331 
    332 
    333  template<typename Type>inline void order ( Type& a, Type& b ) { if (a>b) std::swap(a,b); }
    334 
    335  inline DbU::Unit setInBound ( DbU::Unit lower, DbU::Unit upper, DbU::Unit& value )
    336  {
    337  if ( lower > value ) value = lower;
    338  if ( upper < value ) value = upper;
    339 
    340  return value;
    341  }
    342 
    343  inline size_t abssub ( size_t a, size_t b ) { return (a>b) ? a-b : b-a; }
    344 
    345 
    346 } // Katabatic namespace.
    347 
    348 
    349 INSPECTOR_P_SUPPORT(Katabatic::AutoContact);
    350 
    351 
    352 #endif // KATABATIC_AUTOCONTACT_H
    Definition: AutoContact.h:63
    -
    Net * getNet() const
    Definition: AutoContact.h:210
    -
    DbU::Unit getY() const
    Definition: GCell.h:245
    -
    static size_t getAllocateds()
    Definition: AutoContact.cpp:153
    -
    static void _getTopology(Contact *, Component *&anchor, Horizontal **&, Vertical **&, size_t)
    Definition: AutoContact.cpp:339
    -
    Definition: Constants.h:29
    -
    bool isInvalidatedCache() const
    Definition: AutoContact.h:237
    -
    void setDy(DbU::Unit)
    Definition: AutoContact.h:232
    -
    virtual AutoSegment * getSegment(unsigned int) const =0
    -
    DbU::Unit getHalfWidth() const
    -
    static const Name & getStaticName()
    Definition: AutoContact.cpp:157
    -
    virtual void checkTopology()
    Definition: AutoContact.cpp:400
    -
    void setOffset(DbU::Unit dx, DbU::Unit dy)
    Definition: AutoContact.h:233
    -
    Net * getNet() const
    -
    void setSizes(DbU::Unit width, DbU::Unit height)
    -
    AutoContactFlag
    Definition: AutoContact.h:56
    -
    Hook * getAnchorHook()
    Definition: AutoContact.h:208
    - -
    DbU::Unit getDx() const
    Definition: AutoContact.h:214
    -
    void setLayer(const Layer *)
    -
    DbU::Unit getCBXMin() const
    Definition: AutoContact.h:258
    -
    Definition: AutoContact.h:56
    -
    DbU::Unit getWidth() const
    Definition: AutoContact.h:218
    -
    bool isInCreationStage() const
    Definition: AutoContact.h:235
    - -
    Definition: AutoContact.h:58
    -
    DbU::Unit getDy() const
    -
    DbU::Unit getCBYMax() const
    Definition: AutoContact.h:267
    -
    void setCBXMax(DbU::Unit xMax)
    Definition: AutoContact.h:250
    -
    virtual DbU::Unit getX() const=0
    -
    bool isFixed() const
    Definition: AutoContact.h:239
    - - -
    virtual const Layer * getLayer() const=0
    -
    void setPosition(DbU::Unit width, DbU::Unit height)
    Definition: AutoContact.h:229
    -
    void setConstraintBox(const Box &box)
    Definition: AutoContact.cpp:442
    - -
    static Unit fromLambda(double value)
    -
    std::int64_t Unit
    -
    Components getSlaveComponents() const
    -
    void invalidate(unsigned int flags=0)
    Definition: AutoContact.cpp:296
    -
    LocatorHelper(AutoContact *, unsigned int flags=0)
    Definition: AutoContact.h:289
    -
    virtual Box getNativeConstraintBox() const
    Definition: AutoContact.cpp:261
    -
    Definition: AutoContact.h:59
    - -
    Point getCenter() const
    Definition: AutoContact.h:216
    -
    void setLayer(const Layer *)
    Definition: AutoContact.h:223
    -
    bool canMoveUp(const AutoSegment *moved) const
    Definition: AutoContact.cpp:413
    - -
    void setWidth(DbU::Unit)
    Definition: AutoContact.h:224
    - -
    void setDx(DbU::Unit)
    Definition: AutoContact.h:231
    -
    DbU::Unit getHalfHeight() const
    - - -
    void setPosition(DbU::Unit x, DbU::Unit y)
    -
    void setCBYMax(DbU::Unit yMax)
    Definition: AutoContact.h:252
    -
    void setHeight(DbU::Unit)
    -
    bool isInvalidated() const
    Definition: AutoContact.h:236
    -
    virtual void translate(const DbU::Unit &tx, const DbU::Unit &ty)
    Definition: AutoContact.cpp:532
    -
    Routing Global Cell.
    Definition: GCell.h:74
    -
    bool isHTee() const
    Definition: AutoContact.h:242
    -
    Component * getAnchor() const
    -
    Abstract base class for AutoSegment.
    Definition: AutoSegment.h:104
    - -
    Definition: Constants.h:32
    -
    Interval getUConstraints(unsigned int direction) const
    Definition: AutoContact.cpp:283
    -
    DbU::Unit getHeight() const
    Definition: AutoContact.h:220
    -
    void migrateConstraintBox(AutoContact *other)
    Definition: AutoContact.cpp:511
    -
    DbU::Unit getDx() const
    -
    void setY(DbU::Unit)
    Definition: AutoContact.h:228
    -
    void setDx(DbU::Unit)
    -
    void setSizes(DbU::Unit width, DbU::Unit height)
    Definition: AutoContact.h:226
    -
    virtual DbU::Unit getY() const=0
    -
    unsigned int getMaxDepth() const
    Definition: AutoContact.cpp:205
    -
    Box getConstraintBox() const
    Definition: AutoContact.h:248
    - -
    virtual AutoSegment * getPerpandicular(const AutoSegment *) const =0
    Definition: AutoContact.cpp:183
    -
    void setWidth(DbU::Unit)
    -
    virtual Box getBoundingBox() const
    Definition: AutoContact.cpp:528
    -
    Definition: AutoContact.h:64
    -
    The namespace dedicated to Katabatic.
    Definition: Katabatic.dox:13
    -
    virtual void updateTopology()=0
    -
    Locator Helper Collection&#39;s Locators.
    Definition: AutoContact.h:273
    -
    Hook * getAnchorHook()
    - -
    DbU::Unit getY() const
    Definition: AutoContact.h:213
    -
    void setOffset(DbU::Unit dx, DbU::Unit dy)
    -
    Component * getAnchor() const
    Definition: AutoContact.h:209
    -
    DbU::Unit getWidth() const
    -
    const Layer * getLayer() const
    Definition: AutoContact.h:211
    -
    DbU::Unit getDy() const
    Definition: AutoContact.h:215
    -
    DbU::Unit getXMax() const
    Definition: GCell.h:246
    -
    void setDy(DbU::Unit)
    -
    void setY(DbU::Unit)
    -
    bool isTurn() const
    Definition: AutoContact.h:238
    - -
    void setHeight(DbU::Unit)
    Definition: AutoContact.h:225
    -
    Point getPosition() const
    Definition: AutoContact.h:217
    -
    Definition: AutoContact.h:62
    -
    DbU::Unit getHalfHeight() const
    Definition: AutoContact.h:221
    -
    Definition: Constants.h:27
    -
    void setX(DbU::Unit)
    -
    size_t getId() const
    Definition: AutoContact.h:245
    -
    unsigned int getMinDepth() const
    Definition: AutoContact.cpp:187
    -
    bool isVTee() const
    Definition: AutoContact.h:243
    -
    Definition: AutoContact.h:60
    -
    DbU::Unit getYMax() const
    Definition: GCell.h:247
    -
    bool canDestroy(unsigned int flags=0) const
    Definition: AutoContact.cpp:161
    -
    Definition: AutoContact.h:57
    -
    bool isTee(unsigned int direction) const
    Definition: AutoContact.cpp:406
    -
    DbU::Unit getX() const
    Definition: AutoContact.h:212
    -
    DbU::Unit getCBYMin() const
    Definition: AutoContact.h:264
    -
    bool hasBadTopology() const
    Definition: AutoContact.h:244
    -
    Box & intersectConstraintBox(Box &box) const
    Definition: AutoContact.cpp:507
    -
    virtual const Name & getName() const
    Definition: AutoContact.cpp:175
    -
    Components getSlaveComponents() const
    Definition: AutoContact.h:222
    -
    bool restrictConstraintBox(DbU::Unit constraintMin, DbU::Unit constraintMax, unsigned int flags=KbWarnOnError)
    Definition: AutoContact.cpp:453
    -
    Abstract base class for AutoContact.
    Definition: AutoContact.h:70
    -
    void setCBYMin(DbU::Unit yMin)
    Definition: AutoContact.h:251
    -
    void showTopologyError(const std::string &, unsigned int flags=0)
    Definition: AutoContact.cpp:363
    -
    void getLengths(DbU::Unit *lengths, AutoSegment::DepthLengthSet &)
    Definition: AutoContact.cpp:223
    -
    void progress()
    Definition: AutoContact.h:316
    -
    Definition: AutoContact.h:61
    -
    DbU::Unit getX() const
    Definition: GCell.h:244
    -
    AutoSegment * getSegment() const
    Definition: AutoContact.h:310
    -
    DbU::Unit getCBXMax() const
    Definition: AutoContact.h:261
    -
    virtual Point getPosition() const
    -
    Hook * getBodyHook()
    Definition: AutoContact.h:207
    -
    void setCBXMin(DbU::Unit xMin)
    Definition: AutoContact.h:249
    -
    virtual void updateGeometry()=0
    -
    DbU::Unit getHeight() const
    - -
    void setGCell(GCell *)
    Definition: AutoContact.cpp:314
    -
    virtual AutoSegment * getOpposite(const AutoSegment *) const =0
    -
    DbU::Unit getHalfWidth() const
    Definition: AutoContact.h:219
    -
    void setX(DbU::Unit)
    Definition: AutoContact.h:227
    -
    static double toLambda(Unit u)
    -
    GCell * getGCell() const
    Definition: AutoContact.h:247
    -
    bool isValid() const
    Definition: AutoContact.h:301
    -
    Contact * base() const
    Definition: AutoContact.h:246
    - -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/AutoHorizontal_8h_source.html b/deprecated/katabatic/doc/html/AutoHorizontal_8h_source.html deleted file mode 100644 index 598097d1..00000000 --- a/deprecated/katabatic/doc/html/AutoHorizontal_8h_source.html +++ /dev/null @@ -1,98 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - - -
    -
    -
    AutoHorizontal.h
    -
    -
    -
    1 // -*- C++ -*-
    2 //
    3 // This file is part of the Coriolis Software.
    4 // Copyright (c) UPMC 2008-2013, All Rights Reserved
    5 //
    6 // +-----------------------------------------------------------------+
    7 // | C O R I O L I S |
    8 // | K a t a b a t i c - Routing Toolbox |
    9 // | |
    10 // | Author : Jean-Paul CHAPUT |
    11 // | E-mail : Jean-Paul.Chaput@lip6.fr |
    12 // | =============================================================== |
    13 // | C++ Header : "./katabatic/AutoHorizontal.h" |
    14 // +-----------------------------------------------------------------+
    15 
    16 
    17 #ifndef KATABATIC_AUTOHORIZONTAL_H
    18 #define KATABATIC_AUTOHORIZONTAL_H
    19 
    20 #include "hurricane/Horizontal.h"
    21 #include "katabatic/AutoSegment.h"
    22 
    23 
    24 namespace Katabatic {
    25 
    26 
    27 // -------------------------------------------------------------------
    28 // Class : "AutoHorizontal".
    29 
    30 
    31  class AutoHorizontal : public AutoSegment {
    32  friend class AutoSegment;
    33 
    34  public:
    35  // Predicates.
    36  virtual bool _canSlacken () const;
    37  virtual bool canMoveULeft ( float reserve=0.0 ) const;
    38  virtual bool canMoveURight ( float reserve=0.0 ) const;
    39  // Accessors.
    40  virtual Segment* base ();
    41  virtual Segment* base () const;
    42  virtual Horizontal* getHorizontal ();
    43  virtual DbU::Unit getSourceU () const;
    44  virtual DbU::Unit getTargetU () const;
    45  virtual DbU::Unit getDuSource () const;
    46  virtual DbU::Unit getDuTarget () const;
    47  virtual Interval getSpanU () const;
    48  virtual bool getConstraints ( DbU::Unit& min , DbU::Unit& max ) const;
    49  virtual Interval getSourceConstraints ( unsigned int flags=0 ) const;
    50  virtual Interval getTargetConstraints ( unsigned int flags=0 ) const;
    51  virtual unsigned int getDirection () const;
    52  virtual size_t getGCells ( vector<GCell*>& ) const;
    53  // Modifiers.
    54  virtual void setDuSource ( DbU::Unit );
    55  virtual void setDuTarget ( DbU::Unit );
    56  virtual void _setAxis ( DbU::Unit );
    57  virtual void updateOrient ();
    58  virtual void updatePositions ();
    59  virtual bool checkPositions () const;
    60  virtual bool checkConstraints () const;
    61  virtual unsigned int _makeDogleg ( GCell*, unsigned int flags );
    62  virtual bool moveULeft ();
    63  virtual bool moveURight ();
    64  virtual bool _slacken ( unsigned int flags );
    65 #if THIS_IS_DISABLED
    66  virtual void desalignate ( AutoContact* );
    67 #endif
    68  // Inspector Management.
    69  virtual Record* _getRecord () const;
    70  virtual string _getString () const;
    71  virtual string _getTypeName () const;
    72 
    73  // Internal: Attributes.
    74  protected:
    75  Horizontal* _horizontal;
    76 
    77  // Internal: Constructors.
    78  protected:
    80  virtual ~AutoHorizontal ();
    81  virtual void _postCreate ();
    82  virtual void _preDestroy ();
    83  private:
    84  AutoHorizontal ( const AutoHorizontal& );
    85  AutoHorizontal& operator= ( const AutoHorizontal& );
    86  };
    87 
    88 
    89 } // End of Katabatic namespace.
    90 
    91 
    92 INSPECTOR_P_SUPPORT(Katabatic::AutoHorizontal);
    93 
    94 
    95 #endif // KATABATIC_AUTOHORIZONTAL_H
    virtual bool getConstraints(DbU::Unit &min, DbU::Unit &max) const
    Definition: AutoHorizontal.cpp:174
    -
    virtual void setDuTarget(DbU::Unit)
    Definition: AutoHorizontal.cpp:54
    -
    Concrete Horizontal AutoSegment.
    Definition: AutoHorizontal.h:31
    -
    virtual DbU::Unit getTargetU() const
    Definition: AutoHorizontal.cpp:49
    -
    virtual void updateOrient()
    Definition: AutoHorizontal.cpp:417
    -
    virtual bool checkConstraints() const
    Definition: AutoHorizontal.cpp:480
    -
    std::int64_t Unit
    - -
    virtual DbU::Unit getDuTarget() const
    Definition: AutoHorizontal.cpp:51
    - -
    virtual size_t getGCells(vector< GCell *> &) const
    Definition: AutoHorizontal.cpp:215
    -
    virtual DbU::Unit getSourceU() const
    Definition: AutoHorizontal.cpp:48
    -
    Routing Global Cell.
    Definition: GCell.h:74
    -
    Abstract base class for AutoSegment.
    Definition: AutoSegment.h:104
    -
    virtual bool moveURight()
    Definition: AutoHorizontal.cpp:644
    -
    virtual bool canMoveULeft(float reserve=0.0) const
    Definition: AutoHorizontal.cpp:503
    -
    The namespace dedicated to Katabatic.
    Definition: Katabatic.dox:13
    -
    virtual bool canMoveURight(float reserve=0.0) const
    Definition: AutoHorizontal.cpp:543
    -
    virtual unsigned int _makeDogleg(GCell *, unsigned int flags)
    Definition: AutoHorizontal.cpp:715
    - -
    virtual void _preDestroy()
    Definition: AutoHorizontal.cpp:108
    -
    virtual bool moveULeft()
    Definition: AutoHorizontal.cpp:584
    -
    virtual Interval getSourceConstraints(unsigned int flags=0) const
    Definition: AutoHorizontal.cpp:154
    -
    virtual bool checkPositions() const
    Definition: AutoHorizontal.cpp:450
    -
    virtual DbU::Unit getDuSource() const
    Definition: AutoHorizontal.cpp:50
    -
    virtual void updatePositions()
    Definition: AutoHorizontal.cpp:443
    -
    virtual Segment * base()
    Definition: AutoHorizontal.cpp:45
    -
    virtual Horizontal * getHorizontal()
    Definition: AutoHorizontal.cpp:47
    -
    virtual Interval getTargetConstraints(unsigned int flags=0) const
    Definition: AutoHorizontal.cpp:164
    -
    Abstract base class for AutoContact.
    Definition: AutoContact.h:70
    -
    virtual void setDuSource(DbU::Unit)
    Definition: AutoHorizontal.cpp:53
    -
    virtual Interval getSpanU() const
    Definition: AutoHorizontal.cpp:52
    -
    virtual unsigned int getDirection() const
    Definition: AutoHorizontal.cpp:211
    -
    virtual bool _canSlacken() const
    Definition: AutoHorizontal.cpp:234
    -
    virtual void _postCreate()
    Definition: AutoHorizontal.cpp:67
    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/AutoSegment_8h_source.html b/deprecated/katabatic/doc/html/AutoSegment_8h_source.html deleted file mode 100644 index fe6579e0..00000000 --- a/deprecated/katabatic/doc/html/AutoSegment_8h_source.html +++ /dev/null @@ -1,271 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - - -
    -
    -
    AutoSegment.h
    -
    -
    -
    1 // -*- C++ -*-
    2 //
    3 // This file is part of the Coriolis Software.
    4 // Copyright (c) UPMC 2008-2018, All Rights Reserved
    5 //
    6 // +-----------------------------------------------------------------+
    7 // | C O R I O L I S |
    8 // | K a t a b a t i c - Routing Toolbox |
    9 // | |
    10 // | Author : Jean-Paul CHAPUT |
    11 // | E-mail : Jean-Paul.Chaput@lip6.fr |
    12 // | =============================================================== |
    13 // | C++ Header : "./katabatic/AutoSegment.h" |
    14 // +-----------------------------------------------------------------+
    15 
    16 
    17 #ifndef KATABATIC_AUTOSEGMENT_H
    18 #define KATABATIC_AUTOSEGMENT_H
    19 
    20 #include <set>
    21 #include <iostream>
    22 #include <functional>
    23 #include "hurricane/Interval.h"
    24 #include "hurricane/Segment.h"
    25 #include "hurricane/Components.h"
    26 #include "hurricane/Contact.h"
    27 namespace Hurricane {
    28  class Layer;
    29  class Horizontal;
    30  class Vertical;
    31  class Cell;
    32 }
    33 #include "crlcore/RoutingGauge.h"
    34 #include "katabatic/Constants.h"
    35 #include "katabatic/Observer.h"
    36 #include "katabatic/GCell.h"
    37 #include "katabatic/AutoSegments.h"
    38 #include "katabatic/Session.h"
    39 
    40 
    41 namespace Katabatic {
    42 
    43 
    44  using std::set;
    45  using std::cerr;
    46  using std::endl;
    47  using std::binary_function;
    48  using Hurricane::tab;
    49  using Hurricane::Interval;
    50  using Hurricane::Layer;
    53  using Hurricane::Vertical;
    54  using Hurricane::Cell;
    55  using CRL::RoutingGauge;
    56 
    57  class AutoHorizontal;
    58  class AutoVertical;
    59 
    60 // -------------------------------------------------------------------
    61 // Class : "AutoSegment".
    62 
    63  enum AutoSegmentFlag { SegNoFlags = 0x0
    64  , SegHorizontal = (1<< 0)
    65  , SegFixed = (1<< 1)
    66  , SegGlobal = (1<< 2)
    67  , SegWeakGlobal = (1<< 3)
    68  , SegCanonical = (1<< 4)
    69  , SegBipoint = (1<< 5)
    70  , SegDogleg = (1<< 6)
    71  , SegStrap = (1<< 7)
    72  , SegSourceTop = (1<< 8)
    73  , SegSourceBottom = (1<< 9)
    74  , SegTargetTop = (1<<10)
    75  , SegTargetBottom = (1<<11)
    76  , SegIsReduced = (1<<12)
    77  , SegLayerChange = (1<<13)
    78  , SegSourceTerminal = (1<<14) // Replace Terminal.
    79  , SegTargetTerminal = (1<<15) // Replace Terminal.
    80  , SegStrongTerminal = SegSourceTerminal|SegTargetTerminal
    81  , SegWeakTerminal1 = (1<<16) // Replace TopologicalEnd.
    82  , SegWeakTerminal2 = (1<<17) // Replace TopologicalEnd.
    83  , SegNotSourceAligned = (1<<18)
    84  , SegNotTargetAligned = (1<<19)
    85  , SegUnbound = (1<<20)
    86  , SegHalfSlackened = (1<<21)
    87  , SegSlackened = (1<<22)
    88  , SegAxisSet = (1<<23)
    89  , SegInvalidated = (1<<24)
    90  , SegInvalidatedSource = (1<<25)
    91  , SegInvalidatedTarget = (1<<26)
    92  , SegInvalidatedLayer = (1<<27)
    93  , SegCreated = (1<<28)
    94  , SegUserDefined = (1<<29)
    95  // Masks.
    98  , SegSpinTop = SegSourceTop |SegTargetTop
    99  , SegSpinBottom = SegSourceBottom |SegTargetBottom
    100  , SegDepthSpin = SegSpinTop |SegSpinBottom
    101  };
    102 
    103 
    104  class AutoSegment {
    105  friend class AutoHorizontal;
    106  friend class AutoVertical;
    107 
    108  public:
    109  enum ObserverFlag { Create = 0x000000001
    110  , Destroy = 0x000000002
    111  , Invalidate = 0x000000004
    112  , Revalidate = 0x000000008
    113  , RevalidatePPitch = 0x000000010
    114  };
    115  public:
    116  typedef std::function< void(AutoSegment*) > RevalidateCb_t;
    117  public:
    118  static void setDestroyMode ( bool );
    119  static AutoSegment* create ( AutoContact* source
    120  , AutoContact* target
    121  , Segment* hurricaneSegment
    122  );
    123  static AutoSegment* create ( AutoContact* source
    124  , AutoContact* target
    125  , unsigned int dir
    126  , size_t depth=RoutingGauge::nlayerdepth
    127  );
    128  void destroy ();
    129  // Wrapped Segment Functions.
    130  virtual Segment* base () const = 0;
    131  virtual Segment* base () = 0;
    132  virtual Horizontal* getHorizontal () { return NULL; };
    133  virtual Vertical* getVertical () { return NULL; };
    134  inline Cell* getCell () const;
    135  inline Net* getNet () const;
    136  inline const Layer* getLayer () const;
    137  inline Box getBoundingBox () const;
    138  inline Hook* getSourceHook ();
    139  inline Hook* getTargetHook ();
    140  inline Contact* getSource () const;
    141  inline Contact* getTarget () const;
    142  inline Component* getOppositeAnchor ( Component* ) const;
    143  inline Components getAnchors () const;
    144  virtual DbU::Unit getX () const;
    145  virtual DbU::Unit getY () const;
    146  inline DbU::Unit getWidth () const;
    147  inline DbU::Unit getLength () const;
    148  inline DbU::Unit getSourcePosition () const;
    149  inline DbU::Unit getTargetPosition () const;
    150  inline DbU::Unit getSourceX () const;
    151  inline DbU::Unit getSourceY () const;
    152  inline DbU::Unit getTargetX () const;
    153  inline DbU::Unit getTargetY () const;
    154  inline void invert ();
    155  inline void setLayer ( const Layer* );
    156  // Predicates.
    157  inline bool isHorizontal () const;
    158  inline bool isVertical () const;
    159  inline bool isGlobal () const;
    160  inline bool isWeakGlobal () const;
    161  inline bool isLocal () const;
    162  inline bool isFixed () const;
    163  inline bool isBipoint () const;
    164  inline bool isWeakTerminal () const;
    165  inline bool isWeakTerminal1 () const;
    166  inline bool isWeakTerminal2 () const;
    167  inline bool isTerminal () const;
    168  inline bool isNotSourceAligned () const;
    169  inline bool isNotTargetAligned () const;
    170  inline bool isNotAligned () const;
    171  bool isStrongTerminal ( unsigned int flags=0 ) const;
    172  inline bool isSourceTerminal () const;
    173  inline bool isTargetTerminal () const;
    174  inline bool isLayerChange () const;
    175  inline bool isSpinTop () const;
    176  inline bool isSpinBottom () const;
    177  inline bool isSpinTopOrBottom () const;
    178  inline bool isReduced () const;
    179  inline bool isStrap () const;
    180  inline bool isDogleg () const;
    181  inline bool isUnbound () const;
    182  inline bool isInvalidated () const;
    183  inline bool isInvalidatedLayer () const;
    184  inline bool isCreated () const;
    185  inline bool isCanonical () const;
    186  inline bool isUnsetAxis () const;
    187  inline bool isSlackened () const;
    188  inline bool isUserDefined () const;
    189  bool isReduceCandidate () const;
    190  bool isUTurn () const;
    191  virtual bool _canSlacken () const = 0;
    192  bool canReduce () const;
    193  bool mustRaise () const;
    194  unsigned int canDogleg ( Interval );
    195  virtual bool canMoveULeft ( float reserve=0.0 ) const = 0;
    196  virtual bool canMoveURight ( float reserve=0.0 ) const = 0;
    197  bool canMoveUp ( float reserve=0.0, unsigned int flags=0 ) const;
    198  bool canPivotUp ( float reserve=0.0, unsigned int flags=0 ) const;
    199  bool canPivotDown ( float reserve=0.0, unsigned int flags=0 ) const;
    200  bool canSlacken ( unsigned int flags=0 ) const;
    201  virtual bool checkPositions () const = 0;
    202  virtual bool checkConstraints () const = 0;
    203  bool checkDepthSpin () const;
    204  // Accessors.
    205  template< typename T >
    206  inline T* getObserver ();
    207  inline unsigned long getId () const;
    208  inline unsigned int getFlags () const;
    209  virtual unsigned int getDirection () const = 0;
    210  inline GCell* getGCell () const;
    211  virtual size_t getGCells ( vector<GCell*>& ) const = 0;
    212  inline AutoContact* getAutoSource () const;
    213  inline AutoContact* getAutoTarget () const;
    215  size_t getPerpandicularsBound ( set<AutoSegment*>& );
    216  inline AutoSegment* getParent () const;
    217  inline unsigned int getDepth () const;
    218  inline DbU::Unit getPitch () const;
    219  DbU::Unit getPPitch () const;
    220  inline DbU::Unit getAxis () const;
    221  virtual DbU::Unit getSourceU () const = 0;
    222  virtual DbU::Unit getTargetU () const = 0;
    223  virtual DbU::Unit getDuSource () const = 0;
    224  virtual DbU::Unit getDuTarget () const = 0;
    225  inline DbU::Unit getOrigin () const;
    226  inline DbU::Unit getExtremity () const;
    227  virtual Interval getSpanU () const = 0;
    228  Interval getMinSpanU () const;
    229  virtual Interval getSourceConstraints ( unsigned int flags=0 ) const = 0;
    230  virtual Interval getTargetConstraints ( unsigned int flags=0 ) const = 0;
    231  virtual bool getConstraints ( DbU::Unit& min, DbU::Unit& max ) const = 0;
    232  inline bool getConstraints ( Interval& i ) const;
    233  inline const Interval& getUserConstraints () const;
    234  virtual DbU::Unit getSlack () const;
    235  inline DbU::Unit getOptimalMin () const;
    236  inline DbU::Unit getOptimalMax () const;
    237  Interval& getOptimal ( Interval& i ) const;
    238  virtual DbU::Unit getCost ( DbU::Unit axis ) const;
    239  virtual AutoSegment* getCanonical ( DbU::Unit& min , DbU::Unit& max );
    240  inline AutoSegment* getCanonical ( Interval& i );
    241  float getMaxUnderDensity ( unsigned int flags );
    242  // Modifiers.
    243  inline void addObserver ( BaseObserver* );
    244  inline void removeObserver ( BaseObserver* );
    245  inline void unsetFlags ( unsigned int );
    246  inline void setFlags ( unsigned int );
    247  void setFlagsOnAligneds ( unsigned int );
    248  inline void incReduceds ();
    249  inline void decReduceds ();
    250  virtual void setDuSource ( DbU::Unit du ) = 0;
    251  virtual void setDuTarget ( DbU::Unit du ) = 0;
    252  void computeTerminal ();
    253  virtual void updateOrient () = 0;
    254  virtual void updatePositions () = 0;
    255  void updateSourceSpin ();
    256  void updateTargetSpin ();
    257  void sourceDetach ();
    258  void targetDetach ();
    259  void sourceAttach ( AutoContact* );
    260  void targetAttach ( AutoContact* );
    261  //inline void mergeUserConstraints ( const Interval& );
    262  void mergeUserConstraints ( const Interval& );
    263  inline void resetUserConstraints ();
    264  inline void setOptimalMin ( DbU::Unit min );
    265  inline void setOptimalMax ( DbU::Unit max );
    266  bool checkNotInvalidated () const;
    267  inline void setParent ( AutoSegment* );
    268  void revalidate ();
    270  unsigned int makeDogleg ( Interval, unsigned int flags=KbNoFlags );
    271  unsigned int makeDogleg ( GCell*, unsigned int flags=KbNoFlags );
    272  virtual unsigned int _makeDogleg ( GCell*, unsigned int flags ) = 0;
    273  virtual bool moveULeft () = 0;
    274  virtual bool moveURight () = 0;
    275  bool slacken ( unsigned int flags );
    276  virtual bool _slacken ( unsigned int flags ) = 0;
    277  void _changeDepth ( unsigned int depth, unsigned int flags );
    278  void changeDepth ( unsigned int depth, unsigned int flags );
    279  bool moveUp ( unsigned int flags=KbNoFlags );
    280  bool moveDown ( unsigned int flags=KbNoFlags );
    281  bool reduceDoglegLayer ();
    282  bool reduce ();
    283  bool raise ();
    284  // Canonical Modifiers.
    285  AutoSegment* canonize ( unsigned int flags=KbNoFlags );
    286  virtual void invalidate ( unsigned int flags=KbPropagate );
    287  void invalidate ( AutoContact* );
    288  void computeOptimal ( set<AutoSegment*>& processeds );
    289  void setAxis ( DbU::Unit, unsigned int flags=KbNoFlags );
    290  bool toConstraintAxis ( unsigned int flags=KbRealignate );
    291  bool toOptimalAxis ( unsigned int flags=KbRealignate );
    292  // Collections & Filters.
    293  AutoSegments getOnSourceContact ( unsigned int direction );
    294  AutoSegments getOnTargetContact ( unsigned int direction );
    295  AutoSegments getCachedOnSourceContact ( unsigned int direction );
    296  AutoSegments getCachedOnTargetContact ( unsigned int direction );
    297  AutoSegments getAligneds ( unsigned int flags=KbNoFlags );
    299  size_t getAlignedContacts ( map<AutoContact*,int>& ) const ;
    300  // Inspector Management.
    301  virtual Record* _getRecord () const = 0;
    302  virtual string _getString () const = 0;
    303  virtual string _getTypeName () const = 0;
    304  // Non-reviewed atomic modifiers.
    305  bool _check () const;
    306 #if THIS_IS_DISABLED
    307  virtual void desalignate ( AutoContact* ) = 0;
    308  bool shearUp ( GCell*
    309  , AutoSegment*& movedUp
    310  , float reserve
    311  , unsigned int flags );
    312 #endif
    313 
    314  protected:
    315  // Internal: Static Attributes.
    316  static size_t _allocateds;
    317  static size_t _globalsCount;
    318  static bool _destroyBase;
    319  static bool _destroyTool;
    320  static unsigned long _maxId;
    321  // Internal: Attributes.
    322  GCell* _gcell;
    323  const unsigned long _id;
    324  unsigned int _flags;
    325  unsigned int _depth : 8;
    326  unsigned int _optimalMin : 8;
    327  unsigned int _optimalMax : 8;
    328  unsigned int _reduceds : 2;
    329  DbU::Unit _sourcePosition;
    330  DbU::Unit _targetPosition;
    331  Interval _userConstraints;
    332  AutoSegment* _parent;
    333  Observable _observers;
    334 
    335  // Internal: Constructors & Destructors.
    336  protected:
    337  AutoSegment ( Segment* segment );
    338  virtual ~AutoSegment ();
    339  static void _preCreate ( AutoContact* source, AutoContact* target );
    340  virtual void _postCreate ();
    341  virtual void _preDestroy ();
    342  private:
    343  AutoSegment ( const AutoSegment& );
    344  AutoSegment& operator= ( const AutoSegment& );
    345  protected:
    346  void _invalidate ();
    347  inline unsigned int _getFlags () const;
    348  std::string _getStringFlags () const;
    349  virtual void _setAxis ( DbU::Unit ) = 0;
    350 
    351  public:
    352  struct CompareId : public binary_function<AutoSegment*,AutoSegment*,bool> {
    353  inline bool operator() ( const AutoSegment* lhs, const AutoSegment* rhs ) const;
    354  };
    355  public:
    356  struct CompareByDepthLength : public binary_function<AutoSegment*,AutoSegment*,bool> {
    357  bool operator() ( AutoSegment* lhs, AutoSegment* rhs ) const;
    358  };
    359  public:
    360  struct CompareByDepthAxis : public binary_function<AutoSegment*,AutoSegment*,bool> {
    361  bool operator() ( AutoSegment* lhs, AutoSegment* rhs ) const;
    362  };
    363  public:
    364  typedef std::set<AutoSegment*,CompareByDepthLength> DepthLengthSet;
    365 
    366  // Static Utilities.
    367  public:
    368  static inline bool areAlignedsAndDiffLayer ( AutoSegment*, AutoSegment* );
    369  static bool isTopologicalBound ( AutoSegment* seed, unsigned int flags );
    370  static inline bool arePerpandiculars ( AutoSegment* a, AutoSegment* b );
    371  static inline bool arePerpandiculars ( bool isHorizontalA, AutoSegment* b );
    372  static inline bool areAligneds ( AutoSegment* a, AutoSegment* b );
    373  static unsigned int getPerpandicularState ( AutoContact* contact
    374  , AutoSegment* source
    375  , AutoSegment* current
    376  , bool isHorizontalMaster
    377  , const Layer* masterLayer=NULL
    378  );
    379  static inline unsigned int getPerpandicularState ( AutoContact* contact
    380  , AutoSegment* source
    381  , AutoSegment* current
    382  , AutoSegment* master
    383  );
    384  static void getTopologicalInfos ( AutoSegment* seed
    385  , vector<AutoSegment*>& collapseds
    386  , vector<AutoSegment*>& perpandiculars
    387  , DbU::Unit& leftBound
    388  , DbU::Unit& rightBound
    389  );
    390  static int getTerminalCount ( AutoSegment* seed
    391  , vector<AutoSegment*>& collapseds
    392  );
    393  static inline int getTerminalCount ( AutoSegment* seed );
    394  static inline size_t getGlobalsCount ();
    395  static inline size_t getAllocateds ();
    396  static inline unsigned long getMaxId ();
    397  };
    398 
    399 
    400 // Inline Functions.
    401  inline void AutoSegment::addObserver ( BaseObserver* observer ) { _observers.addObserver(observer); }
    402  inline void AutoSegment::removeObserver ( BaseObserver* observer ) { _observers.removeObserver(observer); }
    403  inline unsigned long AutoSegment::getId () const { return _id; }
    404  inline Cell* AutoSegment::getCell () const { return base()->getCell(); }
    405  inline Net* AutoSegment::getNet () const { return base()->getNet(); }
    406  inline const Layer* AutoSegment::getLayer () const { return base()->getLayer(); }
    407  inline Box AutoSegment::getBoundingBox () const { return base()->getBoundingBox(); }
    408  inline Hook* AutoSegment::getSourceHook () { return base()->getSourceHook(); }
    409  inline Hook* AutoSegment::getTargetHook () { return base()->getTargetHook(); }
    410  inline Contact* AutoSegment::getSource () const { return static_cast<Contact*>(base()->getSource()); }
    411  inline Contact* AutoSegment::getTarget () const { return static_cast<Contact*>(base()->getTarget()); }
    412  inline Component* AutoSegment::getOppositeAnchor ( Component* anchor ) const { return base()->getOppositeAnchor(anchor); };
    413  inline AutoSegment* AutoSegment::getParent () const { return _parent; }
    414  inline DbU::Unit AutoSegment::getSourcePosition () const { return _sourcePosition; }
    415  inline DbU::Unit AutoSegment::getTargetPosition () const { return _targetPosition; }
    416  inline DbU::Unit AutoSegment::getSourceX () const { return base()->getSourceX(); }
    417  inline DbU::Unit AutoSegment::getSourceY () const { return base()->getSourceY(); }
    418  inline DbU::Unit AutoSegment::getTargetX () const { return base()->getTargetX(); }
    419  inline DbU::Unit AutoSegment::getTargetY () const { return base()->getTargetY(); }
    420  inline DbU::Unit AutoSegment::getWidth () const { return base()->getWidth(); }
    421  inline DbU::Unit AutoSegment::getLength () const { return base()->getLength(); }
    422  inline void AutoSegment::invert () { base()->invert(); }
    423  inline GCell* AutoSegment::getGCell () const { return _gcell; }
    426  inline bool AutoSegment::getConstraints ( Interval& i ) const { return getConstraints(i.getVMin(),i.getVMax()); }
    428  inline unsigned int AutoSegment::getDepth () const { return _depth; }
    429  inline DbU::Unit AutoSegment::getPitch () const { return Session::getPitch(getDepth(),Configuration::NoFlags); }
    430  inline DbU::Unit AutoSegment::getAxis () const { return isHorizontal()?base()->getY():base()->getX(); }
    431  inline DbU::Unit AutoSegment::getOrigin () const { return isHorizontal()?_gcell->getY():_gcell->getX(); }
    432  inline DbU::Unit AutoSegment::getExtremity () const { return isHorizontal()?_gcell->getYMax():_gcell->getXMax(); }
    433  inline DbU::Unit AutoSegment::getOptimalMin () const { return DbU::lambda(_optimalMin) + getOrigin(); }
    434  inline DbU::Unit AutoSegment::getOptimalMax () const { return DbU::lambda(_optimalMax) + getOrigin(); }
    435  inline const Interval& AutoSegment::getUserConstraints () const { return _userConstraints; }
    436 
    437  inline bool AutoSegment::isHorizontal () const { return _flags & SegHorizontal; }
    438  inline bool AutoSegment::isVertical () const { return not (_flags & SegHorizontal); }
    439  inline bool AutoSegment::isFixed () const { return _flags & SegFixed; }
    440  inline bool AutoSegment::isGlobal () const { return _flags & SegGlobal; }
    441  inline bool AutoSegment::isWeakGlobal () const { return _flags & SegWeakGlobal; }
    442  inline bool AutoSegment::isLocal () const { return not (_flags & SegGlobal); }
    443  inline bool AutoSegment::isBipoint () const { return _flags & SegBipoint; }
    444  inline bool AutoSegment::isWeakTerminal () const { return _flags & SegWeakTerminal; }
    445  inline bool AutoSegment::isWeakTerminal1 () const { return _flags & SegWeakTerminal1; }
    446  inline bool AutoSegment::isWeakTerminal2 () const { return _flags & SegWeakTerminal2; }
    447  inline bool AutoSegment::isSourceTerminal () const { return _flags & SegSourceTerminal; }
    448  inline bool AutoSegment::isTargetTerminal () const { return _flags & SegTargetTerminal; }
    449  inline bool AutoSegment::isTerminal () const { return _flags & SegStrongTerminal; }
    450  inline bool AutoSegment::isNotSourceAligned () const { return _flags & SegNotSourceAligned; }
    451  inline bool AutoSegment::isNotTargetAligned () const { return _flags & SegNotTargetAligned; }
    452  inline bool AutoSegment::isNotAligned () const { return (_flags & SegNotAligned) == SegNotAligned; }
    453  inline bool AutoSegment::isDogleg () const { return _flags & SegDogleg ; }
    454  inline bool AutoSegment::isUnbound () const { return _flags & SegUnbound ; }
    455  inline bool AutoSegment::isStrap () const { return _flags & SegStrap; }
    456  inline bool AutoSegment::isLayerChange () const { return _flags & SegLayerChange; }
    457  inline bool AutoSegment::isSpinTop () const { return ((_flags & SegSpinTop ) == SegSpinTop); }
    458  inline bool AutoSegment::isSpinBottom () const { return ((_flags & SegSpinBottom) == SegSpinBottom); }
    459  inline bool AutoSegment::isSpinTopOrBottom () const { return isSpinTop() or isSpinBottom(); }
    460  inline bool AutoSegment::isReduced () const { return _flags & SegIsReduced; }
    461  inline bool AutoSegment::isSlackened () const { return _flags & SegSlackened; }
    462  inline bool AutoSegment::isCanonical () const { return _flags & SegCanonical; }
    463  inline bool AutoSegment::isUnsetAxis () const { return not (_flags & SegAxisSet); }
    464  inline bool AutoSegment::isInvalidated () const { return _flags & SegInvalidated; }
    465  inline bool AutoSegment::isInvalidatedLayer () const { return _flags & SegInvalidatedLayer; }
    466  inline bool AutoSegment::isCreated () const { return _flags & SegCreated; }
    467  inline bool AutoSegment::isUserDefined () const { return _flags & SegUserDefined; }
    468  inline void AutoSegment::setFlags ( unsigned int flags ) { _flags |= flags; }
    469  inline void AutoSegment::unsetFlags ( unsigned int flags ) { _flags &= ~flags; }
    470 
    471  inline unsigned int AutoSegment::getFlags () const { return _flags; }
    472  inline unsigned int AutoSegment::_getFlags () const { return _flags; }
    473  inline void AutoSegment::incReduceds () { if (_reduceds<3) ++_reduceds; }
    474  inline void AutoSegment::decReduceds () { if (_reduceds>0) --_reduceds; }
    475  inline void AutoSegment::setLayer ( const Layer* layer ) { base()->setLayer(layer); _depth=Session::getLayerDepth(layer); }
    476  inline void AutoSegment::setOptimalMin ( DbU::Unit min ) { _optimalMin = (unsigned int)DbU::getLambda(min-getOrigin()); }
    477  inline void AutoSegment::setOptimalMax ( DbU::Unit max ) { _optimalMax = (unsigned int)DbU::getLambda(max-getOrigin()); }
    478 //inline void AutoSegment::mergeUserConstraints ( const Interval& constraints ) { _userConstraints.intersection(constraints); }
    479  inline void AutoSegment::resetUserConstraints () { _userConstraints = Interval(false); }
    480 
    481  inline void AutoSegment::setParent ( AutoSegment* parent )
    482  {
    483  if ( parent == this ) {
    484  cerr << "Parentage Looping: " << parent->_getString() << endl;
    485  }
    486  _parent = parent;
    487  }
    488 
    489  template< typename T >
    490  inline T* AutoSegment::getObserver () { return _observers.getObserver<T>(); }
    491 
    492 
    493  inline bool AutoSegment::CompareId::operator() ( const AutoSegment* lhs, const AutoSegment* rhs ) const
    494  { return lhs->getId() < rhs->getId(); }
    495 
    496  inline unsigned long AutoSegment::getMaxId ()
    497  { return _maxId; }
    498 
    499  inline bool AutoSegment::areAlignedsAndDiffLayer ( AutoSegment* s1, AutoSegment* s2 )
    500  { return s1 and s2
    501  and (s1->isHorizontal() == s2->isHorizontal())
    502  and (s1->getLayer() != s2->getLayer()); }
    503 
    504  inline bool AutoSegment::arePerpandiculars ( AutoSegment* a, AutoSegment* b )
    505  { return a and b and (a->isHorizontal() != b->isHorizontal()); }
    506 
    507  inline bool AutoSegment::arePerpandiculars ( bool isHorizontalA, AutoSegment* b )
    508  { return b and (isHorizontalA != b->isHorizontal()); }
    509 
    510  inline bool AutoSegment::areAligneds ( AutoSegment* a, AutoSegment* b )
    511  { return a and b and (a->isHorizontal() == b->isHorizontal()); }
    512 
    513  inline unsigned int AutoSegment::getPerpandicularState ( AutoContact* contact
    514  , AutoSegment* source
    515  , AutoSegment* current
    516  , AutoSegment* master )
    517  {
    518  return getPerpandicularState ( contact, source, current, master->isHorizontal(), master->getLayer() );
    519  }
    520 
    521 
    522  inline int AutoSegment::getTerminalCount ( AutoSegment* seed )
    523  {
    524  cdebug_log(145,0) << "getTerminalCount() - " << seed << endl;
    525 
    526  vector<AutoSegment*> collapseds;
    527  vector<AutoSegment*> perpandiculars;
    528  DbU::Unit leftBound;
    529  DbU::Unit rightBound;
    530 
    531  getTopologicalInfos ( seed
    532  , collapseds
    533  , perpandiculars
    534  , leftBound
    535  , rightBound
    536  );
    537 
    538  return getTerminalCount ( seed, collapseds );
    539  }
    540 
    541 
    542  inline size_t AutoSegment::getGlobalsCount () { return _globalsCount; }
    543  inline size_t AutoSegment::getAllocateds () { return _allocateds; }
    544 
    545 
    546 } // End of Katabatic namespace.
    547 
    548 
    549 INSPECTOR_P_SUPPORT(Katabatic::AutoSegment);
    550 
    551 
    552 # endif // KATABATIC_AUTOSEGMENT_H
    size_t getPerpandicularsBound(set< AutoSegment *> &)
    Definition: AutoSegment.cpp:1130
    -
    void removeObserver(BaseObserver *)
    Definition: Observer.h:103
    -
    bool isSlackened() const
    Definition: AutoSegment.h:461
    -
    DbU::Unit getY() const
    Definition: GCell.h:245
    -
    const DbU::Unit & getVMax() const
    -
    bool isInvalidated() const
    Definition: AutoSegment.h:464
    -
    bool slacken(unsigned int flags)
    Definition: AutoSegment.cpp:1346
    -
    Net * getNet() const
    Definition: AutoSegment.h:405
    -
    DbU::Unit getOrigin() const
    Definition: AutoSegment.h:431
    -
    bool canSlacken(unsigned int flags=0) const
    Definition: AutoSegment.cpp:1329
    -
    Definition: AutoSegment.h:66
    -
    virtual Vertical * getVertical()
    Definition: AutoSegment.h:133
    -
    bool isDogleg() const
    Definition: AutoSegment.h:453
    -
    const DbU::Unit & getVMin() const
    -
    Definition: Constants.h:24
    -
    bool reduceDoglegLayer()
    Definition: AutoSegment.cpp:1596
    -
    virtual Segment * base() const =0
    -
    Definition: AutoSegment.h:75
    -
    virtual DbU::Unit getSourceX() const=0
    -
    Net * getNet() const
    -
    DbU::Unit getSourceX() const
    Definition: AutoSegment.h:416
    -
    static Unit lambda(double value)
    -
    virtual DbU::Unit getTargetY() const=0
    -
    Component * getTarget() const
    -
    Hook * getSourceHook()
    Definition: AutoSegment.h:408
    -
    bool isSpinBottom() const
    Definition: AutoSegment.h:458
    -
    virtual bool moveULeft()=0
    -
    unsigned int _getFlags() const
    Definition: AutoSegment.h:472
    -
    virtual bool moveURight()=0
    - -
    void setLayer(const Layer *)
    Definition: AutoSegment.h:475
    -
    bool canPivotUp(float reserve=0.0, unsigned int flags=0) const
    Definition: AutoSegment.cpp:1398
    -
    Contact * getSource() const
    Definition: AutoSegment.h:410
    -
    virtual unsigned int _makeDogleg(GCell *, unsigned int flags)=0
    -
    virtual DbU::Unit getX() const=0
    -
    bool isCreated() const
    Definition: AutoSegment.h:466
    -
    Definition: AutoSegment.h:87
    -
    const Interval & getUserConstraints() const
    Definition: AutoSegment.h:435
    -
    void setLayer(const Layer *layer)
    -
    Concrete Horizontal AutoSegment.
    Definition: AutoHorizontal.h:31
    -
    Hook * getSourceHook()
    -
    bool toOptimalAxis(unsigned int flags=KbRealignate)
    Definition: AutoSegment.cpp:804
    -
    Component * getSource() const
    -
    Interval & getOptimal(Interval &i) const
    Definition: AutoSegment.cpp:399
    -
    bool isUnsetAxis() const
    Definition: AutoSegment.h:463
    -
    DbU::Unit getWidth() const
    Definition: AutoSegment.h:420
    -
    virtual const Layer * getLayer() const=0
    -
    void resetUserConstraints()
    Definition: AutoSegment.h:479
    -
    Component * getOppositeAnchor(Component *) const
    Definition: AutoSegment.h:412
    - -
    static AutoSegment * create(AutoContact *source, AutoContact *target, Segment *hurricaneSegment)
    Definition: AutoSegment.cpp:1988
    -
    std::int64_t Unit
    -
    bool isSpinTop() const
    Definition: AutoSegment.h:457
    -
    virtual Interval getSpanU() const =0
    -
    Definition: AutoSegment.h:84
    -
    DbU::Unit getTargetPosition() const
    Definition: AutoSegment.h:415
    -
    AutoSegmentFlag
    Definition: AutoSegment.h:63
    -
    DbU::Unit getTargetY() const
    Definition: AutoSegment.h:419
    -
    Definition: AutoSegment.h:76
    - - - - -
    void revalidate()
    Definition: AutoSegment.cpp:457
    -
    bool canMoveUp(float reserve=0.0, unsigned int flags=0) const
    Definition: AutoSegment.cpp:1493
    -
    virtual void invalidate(unsigned int flags=KbPropagate)
    Definition: AutoSegment.cpp:416
    -
    virtual bool canMoveULeft(float reserve=0.0) const =0
    -
    virtual Interval getTargetConstraints(unsigned int flags=0) const =0
    -
    bool isInvalidatedLayer() const
    Definition: AutoSegment.h:465
    -
    Observer Design Pattern, Subject part.
    Definition: Observer.h:69
    -
    bool isStrongTerminal(unsigned int flags=0) const
    Definition: AutoSegment.cpp:513
    -
    AutoSegment(Segment *segment)
    Definition: AutoSegment.cpp:311
    -
    Definition: AutoSegment.h:83
    -
    virtual bool checkPositions() const =0
    -
    Definition: AutoSegment.h:89
    - - -
    AutoSegments getOnSourceContact(unsigned int direction)
    Definition: AutoSegment.cpp:610
    -
    virtual ~AutoSegment()
    Definition: AutoSegment.cpp:380
    -
    unsigned long getId() const
    Definition: AutoSegment.h:403
    -
    Cell * getCell() const
    Definition: AutoSegment.h:404
    -
    Definition: AutoSegment.h:97
    -
    virtual Interval getSourceConstraints(unsigned int flags=0) const =0
    -
    Definition: AutoSegment.h:67
    -
    static AutoContact * lookup(Contact *)
    Definition: Session.cpp:384
    -
    Definition: AutoSegment.h:68
    -
    Routing Global Cell.
    Definition: GCell.h:74
    -
    Abstract base class for AutoSegment.
    Definition: AutoSegment.h:104
    -
    Definition: AutoSegment.h:92
    - -
    virtual void setDuSource(DbU::Unit du)=0
    -
    static void _preCreate(AutoContact *source, AutoContact *target)
    Definition: AutoSegment.cpp:343
    -
    void setFlags(unsigned int)
    Definition: AutoSegment.h:468
    -
    bool isLocal() const
    Definition: AutoSegment.h:442
    -
    Definition: LoadGrByNet.cpp:405
    -
    virtual DbU::Unit getSourceY() const=0
    -
    Definition: AutoSegment.h:73
    -
    Definition: Constants.h:38
    -
    Definition: AutoSegment.h:70
    -
    virtual DbU::Unit getY() const=0
    -
    virtual void _preDestroy()
    Definition: AutoSegment.cpp:368
    -
    DbU::Unit getLength() const
    Definition: AutoSegment.h:421
    -
    virtual size_t getGCells(vector< GCell *> &) const =0
    -
    bool toConstraintAxis(unsigned int flags=KbRealignate)
    Definition: AutoSegment.cpp:766
    -
    Hook * getTargetHook()
    Definition: AutoSegment.h:409
    - -
    bool canPivotDown(float reserve=0.0, unsigned int flags=0) const
    Definition: AutoSegment.cpp:1446
    -
    The namespace dedicated to Katabatic.
    Definition: Katabatic.dox:13
    -
    bool mustRaise() const
    Definition: AutoSegment.cpp:1233
    -
    void computeOptimal(set< AutoSegment *> &processeds)
    Definition: AutoSegment.cpp:903
    -
    virtual DbU::Unit getDuTarget() const =0
    -
    bool reduce()
    Definition: AutoSegment.cpp:1218
    -
    void mergeUserConstraints(const Interval &)
    Definition: AutoSegment.cpp:758
    -
    virtual AutoSegment * getCanonical(DbU::Unit &min, DbU::Unit &max)
    Definition: AutoSegment.cpp:559
    -
    Definition: AutoSegment.h:96
    - -
    Components getAnchors() const
    -
    Definition: AutoSegment.h:74
    -
    DbU::Unit getSourcePosition() const
    Definition: AutoSegment.h:414
    -
    void computeTerminal()
    Definition: AutoSegment.cpp:862
    -
    virtual Horizontal * getHorizontal()
    Definition: AutoSegment.h:132
    -
    DbU::Unit getXMax() const
    Definition: GCell.h:246
    -
    Box getBoundingBox() const
    Definition: AutoSegment.h:407
    -
    void invert()
    Definition: AutoSegment.h:422
    -
    AutoSegment * canonize(unsigned int flags=KbNoFlags)
    Definition: AutoSegment.cpp:1018
    -
    Definition: AutoSegment.h:88
    -
    bool isBipoint() const
    Definition: AutoSegment.h:443
    -
    bool isGlobal() const
    Definition: AutoSegment.h:440
    -
    virtual Box getBoundingBox(const BasicLayer *) const=0
    -
    Definition: AutoSegment.h:71
    -
    virtual DbU::Unit getCost(DbU::Unit axis) const
    Definition: AutoSegment.cpp:547
    -
    virtual bool getConstraints(DbU::Unit &min, DbU::Unit &max) const =0
    -
    virtual DbU::Unit getX() const
    Definition: AutoSegment.cpp:387
    -
    Contact * getTarget() const
    Definition: AutoSegment.h:411
    - -
    virtual DbU::Unit getSourceU() const =0
    -
    DbU::Unit getTargetX() const
    Definition: AutoSegment.h:418
    -
    virtual bool _canSlacken() const =0
    - -
    GCell * getGCell() const
    Definition: AutoSegment.h:423
    -
    Definition: AutoSegment.h:82
    -
    void setOptimalMin(DbU::Unit min)
    Definition: AutoSegment.h:476
    -
    Definition: AutoSegment.h:72
    -
    Definition: AutoSegment.h:65
    -
    AutoSegments getOnTargetContact(unsigned int direction)
    Definition: AutoSegment.cpp:617
    -
    Definition: AutoSegment.h:77
    -
    virtual bool checkConstraints() const =0
    -
    Definition: AutoSegment.h:69
    -
    bool isSpinTopOrBottom() const
    Definition: AutoSegment.h:459
    -
    virtual void updatePositions()=0
    -
    virtual DbU::Unit getY() const
    Definition: AutoSegment.cpp:391
    -
    void addObserver(BaseObserver *)
    Definition: Observer.h:96
    -
    Observer Design Pattern, Observer part.
    Definition: Observer.h:29
    -
    void setOptimalMax(DbU::Unit max)
    Definition: AutoSegment.h:477
    -
    AutoContact * getAutoTarget() const
    Definition: AutoSegment.h:425
    -
    DbU::Unit getYMax() const
    Definition: GCell.h:247
    -
    Concrete Vertical AutoSegment.
    Definition: AutoVertical.h:32
    -
    Definition: AutoSegment.h:80
    -
    virtual void setDuTarget(DbU::Unit du)=0
    -
    bool isCanonical() const
    Definition: AutoSegment.h:462
    -
    DbU::Unit getAxis() const
    Definition: AutoSegment.h:430
    -
    DbU::Unit getOptimalMax() const
    Definition: AutoSegment.h:434
    -
    bool isLayerChange() const
    Definition: AutoSegment.h:456
    -
    virtual Cell * getCell() const=0
    -
    DbU::Unit getExtremity() const
    Definition: AutoSegment.h:432
    - -
    const Layer * getLayer() const
    Definition: AutoSegment.h:406
    -
    virtual DbU::Unit getSlack() const
    Definition: AutoSegment.cpp:536
    -
    Interval getMinSpanU() const
    Definition: AutoSegment.cpp:1104
    -
    AutoSegments getPerpandiculars()
    Definition: AutoSegment.cpp:639
    -
    virtual void updateOrient()=0
    -
    Abstract base class for AutoContact.
    Definition: AutoContact.h:70
    -
    const DbU::Unit & getWidth() const
    -
    Definition: AutoSegment.h:64
    -
    Definition: AutoSegment.h:81
    -
    Definition: AutoSegment.h:93
    -
    virtual DbU::Unit getTargetU() const =0
    -
    AutoSegments getAligneds(unsigned int flags=KbNoFlags)
    Definition: AutoSegment.cpp:632
    -
    bool isReduced() const
    Definition: AutoSegment.h:460
    -
    void _invalidate()
    Definition: AutoSegment.cpp:437
    -
    DbU::Unit getX() const
    Definition: GCell.h:244
    -
    static double getLambda(Unit u)
    -
    bool isHorizontal() const
    Definition: AutoSegment.h:437
    -
    T * getObserver()
    Definition: Observer.h:90
    -
    Hook * getTargetHook()
    -
    bool isWeakTerminal() const
    Definition: AutoSegment.h:444
    -
    virtual bool canMoveURight(float reserve=0.0) const =0
    - -
    DbU::Unit getOptimalMin() const
    Definition: AutoSegment.h:433
    -
    void unsetFlags(unsigned int)
    Definition: AutoSegment.h:469
    -
    virtual unsigned int getDirection() const =0
    -
    DbU::Unit getSourceY() const
    Definition: AutoSegment.h:417
    -
    bool canReduce() const
    Definition: AutoSegment.cpp:1193
    -
    AutoContact * getAutoSource() const
    Definition: AutoSegment.h:424
    -
    Component * getOppositeAnchor(Component *anchor) const
    - -
    bool isVertical() const
    Definition: AutoSegment.h:438
    -
    bool isFixed() const
    Definition: AutoSegment.h:439
    - -
    void setAxis(DbU::Unit, unsigned int flags=KbNoFlags)
    Definition: AutoSegment.cpp:837
    -
    virtual DbU::Unit getLength() const=0
    -
    AutoSegment * makeDogleg(AutoContact *)
    Definition: AutoSegment.cpp:1727
    -
    bool isStrap() const
    Definition: AutoSegment.h:455
    -
    virtual DbU::Unit getTargetX() const=0
    -
    virtual DbU::Unit getDuSource() const =0
    -
    AutoSegment * getParent() const
    Definition: AutoSegment.h:413
    -
    virtual void _postCreate()
    Definition: AutoSegment.cpp:356
    -
    unsigned int canDogleg(Interval)
    Definition: AutoSegment.cpp:1696
    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/AutoSegments_8h_source.html b/deprecated/katabatic/doc/html/AutoSegments_8h_source.html deleted file mode 100644 index 76cd3ab3..00000000 --- a/deprecated/katabatic/doc/html/AutoSegments_8h_source.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - - -
    -
    -
    AutoSegments.h
    -
    -
    -
    1 // -*- C++ -*-
    2 //
    3 // This file is part of the Coriolis Software.
    4 // Copyright (c) UPMC/LIP6 2008-2018, All Rights Reserved
    5 //
    6 // +-----------------------------------------------------------------+
    7 // | C O R I O L I S |
    8 // | K a t a b a t i c - Routing Toolbox |
    9 // | |
    10 // | Author : Jean-Paul CHAPUT |
    11 // | E-mail : Jean-Paul.Chaput@lip6.fr |
    12 // | =============================================================== |
    13 // | C++ Header : "./katabatic/AutoSegments.h" |
    14 // +-----------------------------------------------------------------+
    15 
    16 
    17 #ifndef KATABATIC_AUTOSEGMENTS_H
    18 #define KATABATIC_AUTOSEGMENTS_H
    19 
    20 #include <string>
    21 #include <list>
    22 #include <vector>
    23 #include <map>
    24 #include "hurricane/Collection.h"
    25 #include "hurricane/DbU.h"
    26 #include "hurricane/Box.h"
    27 
    28 namespace Hurricane {
    29  class Hook;
    30  class Component;
    31  class Contact;
    32  class Segment;
    33  class Net;
    34 }
    35 
    36 
    37 namespace Katabatic {
    38 
    39 
    40  using std::string;
    41  using std::pair;
    42  using std::list;
    43  using std::vector;
    44  using std::map;
    45 
    46  using Hurricane::Record;
    47  using Hurricane::DbU;
    48  using Hurricane::Box;
    49  using Hurricane::Hook;
    51  using Hurricane::Contact;
    52  using Hurricane::Segment;
    53  using Hurricane::Net;
    54  using Hurricane::Filter;
    55  using Hurricane::Locator;
    60 
    61  class LocatorHelper;
    62  class AutoContact;
    63  class AutoSegment;
    64  class GCell;
    65 
    66 
    67 // -------------------------------------------------------------------
    68 // Collections.
    69 
    76  typedef map<Segment*,AutoSegment*> AutoSegmentLut;
    77 
    78 
    79 // -------------------------------------------------------------------
    80 // Class : "Katabatic::AutoSegmentStack".
    81 
    82  class AutoSegmentStack : protected list<pair<AutoContact*,AutoSegment*> > {
    83  public:
    84  inline bool isEmpty () const;
    85  inline size_t getSize () const;
    86  void push ( AutoContact*, AutoSegment* );
    87  inline void pop ();
    88  inline AutoContact* getAutoContact () const;
    89  inline AutoSegment* getAutoSegment () const;
    90  };
    91 
    92 
    93  inline bool AutoSegmentStack::isEmpty () const { return empty(); };
    94  inline size_t AutoSegmentStack::getSize () const { return size(); };
    95  inline void AutoSegmentStack::pop () { if ( !empty() ) pop_back(); };
    96  inline AutoContact* AutoSegmentStack::getAutoContact () const { return empty() ? NULL : back().first; };
    97  inline AutoSegment* AutoSegmentStack::getAutoSegment () const { return empty() ? NULL : back().second; };
    98 
    99 
    100 // -------------------------------------------------------------------
    101 // Class : "Katabatic::AutoSegments_OnContact".
    102 
    104 
    105  public:
    106  // Sub-Class: Locator.
    107  class Locator : public AutoSegmentHL {
    108  public:
    109  Locator ( AutoSegment* master, Contact* contact );
    110  inline Locator ( const Locator& );
    111  virtual AutoSegment* getElement () const;
    112  virtual AutoSegmentHL* getClone () const;
    113  virtual bool isValid () const;
    114  virtual void progress ();
    115  virtual string _getString () const;
    116  protected:
    117  AutoSegment* _master;
    118  Hook* _hook;
    119  AutoSegment* _element;
    120  };
    121 
    122  public:
    123  // AutoSegments_OnContact Methods.
    124  inline AutoSegments_OnContact ( AutoSegment* master, Contact* contact );
    126  virtual AutoSegmentHC* getClone () const;
    127  virtual AutoSegmentHL* getLocator () const;
    128  virtual string _getString () const;
    129 
    130  protected:
    131  // AutoSegments_OnContact Attributes.
    132  AutoSegment* _master;
    133  Contact* _contact;
    134  };
    135 
    136 
    137  inline AutoSegments_OnContact::Locator::Locator ( const Locator &locator )
    138  : AutoSegmentHL()
    139  , _master(locator._master)
    140  , _hook(locator._hook)
    141  , _element(locator._element)
    142  { }
    143 
    144 
    146  : AutoSegmentHC()
    147  , _master(master)
    148  , _contact(contact)
    149  { }
    150 
    151 
    153  : AutoSegmentHC()
    154  , _master(segments._master)
    155  , _contact(segments._contact)
    156  { }
    157 
    158 
    159 // -------------------------------------------------------------------
    160 // Class : "AutoSegments_Aligneds".
    161 
    163 
    164  public:
    165  // Sub-Class: Locator.
    166  class Locator : public AutoSegmentHL {
    167  public:
    168  inline Locator ( AutoSegment* segment , unsigned int flags );
    169  inline Locator ( const Locator &locator );
    170  virtual AutoSegment* getElement () const;
    171  virtual AutoSegmentHL* getClone () const;
    172  virtual bool isValid () const;
    173  virtual void progress ();
    174  virtual string _getString () const;
    175  protected:
    176  unsigned int _flags;
    177  AutoSegment* _master;
    178  AutoSegmentStack _stack;
    179  };
    180 
    181  public:
    182  // AutoSegments_Aligneds Methods.
    183  AutoSegments_Aligneds ( AutoSegment*, unsigned int flags=KbNoFlags );
    185  virtual AutoSegmentHC* getClone () const;
    186  virtual AutoSegmentHL* getLocator () const;
    187  virtual string _getString () const;
    188 
    189  protected:
    190  // AutoSegments_Aligneds Attributes.
    191  unsigned int _flags;
    192  AutoSegment* _segment;
    193  };
    194 
    195 
    196  inline AutoSegments_Aligneds::Locator::Locator ( const Locator &locator )
    197  : AutoSegmentHL()
    198  , _flags (locator._flags)
    199  , _master(locator._master)
    200  , _stack (locator._stack)
    201  { }
    202 
    203 
    204  inline AutoSegments_Aligneds::AutoSegments_Aligneds ( AutoSegment* segment, unsigned int flags )
    205  : AutoSegmentHC()
    206  , _flags (flags)
    207  , _segment(segment)
    208  { }
    209 
    210 
    212  : AutoSegmentHC()
    213  , _flags (autosegments._flags)
    214  , _segment(autosegments._segment)
    215  { }
    216 
    217 
    218 // -------------------------------------------------------------------
    219 // Class : "AutoSegments_Perpandiculars".
    220 
    222 
    223  public:
    224  // Sub-Class: Locator.
    225  class Locator : public AutoSegmentHL {
    226  public:
    227  Locator ( AutoSegment* master );
    228  inline Locator ( const Locator& );
    229  virtual AutoSegment* getElement () const;
    230  virtual AutoSegmentHL* getClone () const;
    231  virtual bool isValid () const;
    232  virtual void progress ();
    233  virtual string _getString () const;
    234  protected:
    235  unsigned int _flags;
    236  AutoSegment* _master;
    237  AutoSegmentStack _stack;
    238  vector<AutoSegment*> _perpandiculars;
    239  };
    240 
    241  public:
    242  // AutoSegments_Perpandiculars Methods.
    243  inline AutoSegments_Perpandiculars ( AutoSegment* master );
    245  virtual AutoSegmentHC* getClone () const;
    246  virtual AutoSegmentHL* getLocator () const;
    247  virtual string _getString () const;
    248 
    249  protected:
    250  // AutoSegments_Perpandiculars Attributes.
    251  AutoSegment* _segment;
    252  };
    253 
    254 
    255  inline AutoSegments_Perpandiculars::Locator::Locator ( const Locator& locator )
    256  : AutoSegmentHL()
    257  , _flags (locator._flags)
    258  , _master (locator._master)
    259  , _stack (locator._stack)
    260  , _perpandiculars()
    261  { }
    262 
    263 
    265  ( AutoSegment* segment )
    266  : AutoSegmentHC()
    267  , _segment(segment)
    268  { }
    269 
    270 
    272  ( const AutoSegments_Perpandiculars& autosegments )
    273  : AutoSegmentHC()
    274  , _segment(autosegments._segment)
    275  { }
    276 
    277 
    278 // -------------------------------------------------------------------
    279 // Class : "AutoSegments_AnchorOnGCell".
    280 
    282 
    283  public:
    284  // Sub-Class: Locator.
    285  class Locator : public AutoSegmentHL {
    286  public:
    287  Locator ( GCell* fcell, unsigned int flags );
    288  inline Locator ( const Locator& );
    289  virtual ~Locator ();
    290  virtual AutoSegment* getElement () const;
    291  virtual AutoSegmentHL* getClone () const;
    292  virtual bool isValid () const;
    293  virtual void progress ();
    294  virtual string _getString () const;
    295  protected:
    296  unsigned int _flags;
    297  vector<AutoContact*>::const_iterator _itContact;
    298  vector<AutoContact*>::const_iterator _itEnd;
    299  Hurricane::Locator<Hook*>* _hookLocator;
    300  AutoSegment* _element;
    301  };
    302 
    303  public:
    304  // AutoSegments_Perpandiculars Methods.
    305  inline AutoSegments_AnchorOnGCell ( GCell* fcell, unsigned int flags );
    307  virtual AutoSegmentHC* getClone () const;
    308  virtual AutoSegmentHL* getLocator () const;
    309  virtual string _getString () const;
    310 
    311  public:
    312  // AutoSegments_Perpandiculars Attributes.
    313  GCell* _fcell;
    314  unsigned int _flags;
    315  };
    316 
    317 
    318  inline AutoSegments_AnchorOnGCell::Locator::Locator ( const Locator &locator )
    319  : AutoSegmentHL()
    320  , _flags (locator._flags)
    321  , _itContact (locator._itContact)
    322  , _itEnd (locator._itEnd)
    323  , _hookLocator (locator._hookLocator->getClone())
    324  , _element (locator._element)
    325  { }
    326 
    327 
    328  inline AutoSegments_AnchorOnGCell::AutoSegments_AnchorOnGCell ( GCell* fcell, unsigned int flags )
    329  : AutoSegmentHC()
    330  , _fcell(fcell)
    331  , _flags(flags)
    332  { }
    333 
    334 
    336  ( const AutoSegments_AnchorOnGCell& autosegments )
    337  : AutoSegmentHC()
    338  , _fcell(autosegments._fcell)
    339  , _flags(autosegments._flags)
    340  { }
    341 
    342 
    343 // -------------------------------------------------------------------
    344 // Class : "AutoSegments_CachedOnContact".
    345 
    346  class AutoSegments_CachedOnContact : public AutoSegmentHC {
    347 
    348  public:
    349  // Sub-Class: Locator.
    350  class Locator : public AutoSegmentHL {
    351  public:
    352  Locator ( AutoContact* sourceAnchor, unsigned int direction );
    353  inline Locator ( const Locator& );
    354  virtual ~Locator ();
    355  virtual AutoSegment* getElement () const;
    356  virtual AutoSegmentHL* getClone () const;
    357  virtual bool isValid () const;
    358  virtual void progress ();
    359  virtual string _getString () const;
    360  protected:
    361  LocatorHelper* _helper;
    362  };
    363 
    364  // Constructors.
    365  public:
    366  // AutoSegments_CachedOnContact Methods.
    367  inline AutoSegments_CachedOnContact ( AutoContact* sourceContact
    368  , unsigned int direction=KbHorizontal|KbVertical );
    369  inline AutoSegments_CachedOnContact ( const AutoSegments_CachedOnContact& );
    370  virtual AutoSegmentHC* getClone () const;
    371  virtual AutoSegmentHL* getLocator () const;
    372  virtual string _getString () const;
    373 
    374  protected:
    375  // AutoSegments_CachedOnContact Attributes.
    376  unsigned int _direction;
    377  AutoContact* _sourceContact;
    378 
    379  };
    380 
    381 
    382  inline AutoSegments_CachedOnContact::Locator::Locator ( const Locator &locator )
    383  : AutoSegmentHL()
    384  , _helper(locator._helper)
    385  { }
    386 
    387 
    388  inline AutoSegments_CachedOnContact::AutoSegments_CachedOnContact
    389  ( AutoContact* sourceContact, unsigned int direction )
    390  : AutoSegmentHC()
    391  , _direction (direction)
    392  , _sourceContact(sourceContact)
    393  {
    394  if (_direction & KbVertical) _direction |= KbWithPerpands;
    395  }
    396 
    397 
    398  inline AutoSegments_CachedOnContact::AutoSegments_CachedOnContact
    399  ( const AutoSegments_CachedOnContact& autosegments )
    400  : AutoSegmentHC()
    401  , _direction (autosegments._direction)
    402  , _sourceContact(autosegments._sourceContact)
    403  { }
    404 
    405 
    406 // -------------------------------------------------------------------
    407 // Class : "AutoSegments_IsAccountable".
    408 
    410  public:
    411  virtual AutoSegmentHF* getClone () const;
    412  virtual bool accept ( AutoSegment* ) const;
    413  virtual string _getString () const;
    414  };
    415 
    416 
    417 // -------------------------------------------------------------------
    418 // Class : "AutoSegments_InDirection".
    419 
    421  public:
    422  inline AutoSegments_InDirection ( unsigned int direction );
    424  virtual AutoSegmentHF* getClone () const;
    425  virtual bool accept ( AutoSegment* segment ) const;
    426  virtual string _getString () const;
    427  protected:
    428  unsigned int _direction;
    429  };
    430 
    431 
    432  inline AutoSegments_InDirection::AutoSegments_InDirection ( unsigned int direction )
    433  : AutoSegmentHF()
    434  , _direction(direction)
    435  {}
    436 
    437 
    439  : AutoSegmentHF()
    440  , _direction(filter._direction)
    441  {}
    442 
    443 
    444 } // End of Katabatic namespace.
    445 
    446 
    447 # endif
    AutoSegments_Aligneds(AutoSegment *, unsigned int flags=KbNoFlags)
    Definition: AutoSegments.h:204
    -
    Definition: Constants.h:28
    -
    virtual AutoSegmentHL * getLocator() const
    - -
    Definition: Constants.h:29
    -
    virtual AutoSegmentHF * getClone() const
    -
    Hurricane::Filter< AutoSegment * > AutoSegmentHF
    Definition: AutoSegments.h:64
    -
    AutoSegments_AnchorOnGCell(GCell *fcell, unsigned int flags)
    Definition: AutoSegments.h:328
    -
    virtual AutoSegmentHC * getClone() const
    - - - - - -
    virtual AutoSegmentHL * getLocator() const
    -
    virtual AutoSegmentHC * getClone() const
    -
    Filter to select accoutable AutoSegment.
    Definition: AutoSegments.h:409
    -
    Routing Global Cell.
    Definition: GCell.h:74
    -
    Abstract base class for AutoSegment.
    Definition: AutoSegment.h:104
    - -
    GenericLocator< AutoSegment * > AutoSegmentLocator
    Definition: AutoSegments.h:74
    - -
    The namespace dedicated to Katabatic.
    Definition: Katabatic.dox:13
    - -
    Locator Helper Collection&#39;s Locators.
    Definition: AutoContact.h:273
    - -
    All AutoSegment Beginning and/or Stopping in a GCell.
    Definition: AutoSegments.h:281
    -
    virtual bool accept(AutoSegment *segment) const
    -
    virtual bool accept(AutoSegment *) const
    -
    Hurricane::Collection< AutoSegment * > AutoSegmentHC
    Definition: AutoSegments.h:72
    -
    AutoSegments_OnContact(AutoSegment *master, Contact *contact)
    Definition: AutoSegments.h:145
    - -
    GenericCollection< AutoSegment * > AutoSegments
    Definition: AutoSegments.h:73
    -
    virtual AutoSegmentHC * getClone() const
    - -
    Filter to select AutoSegment in a given direction.
    Definition: AutoSegments.h:420
    -
    Hurricane::Locator< AutoSegment * > AutoSegmentHL
    Definition: AutoSegments.h:71
    -
    Definition: Constants.h:27
    - -
    All perpandicular AutoSegment to a set of aligneds.
    Definition: AutoSegments.h:221
    -
    GenericFilter< AutoSegment * > AutoSegmentFilter
    Definition: AutoSegments.h:75
    - -
    All aligned AutoSegment of a set.
    Definition: AutoSegments.h:162
    -
    Abstract base class for AutoContact.
    Definition: AutoContact.h:70
    -
    virtual AutoSegmentHF * getClone() const
    -
    virtual AutoSegmentHL * getLocator() const
    -
    virtual AutoSegmentHC * getClone() const
    -
    AutoSegments_Perpandiculars(AutoSegment *master)
    Definition: AutoSegments.h:265
    -
    virtual AutoSegmentHL * getLocator() const
    -
    All AutoSegment anchored on a Contact.
    Definition: AutoSegments.h:103
    -
    AutoSegments_InDirection(unsigned int direction)
    Definition: AutoSegments.h:432
    - -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/AutoVertical_8h_source.html b/deprecated/katabatic/doc/html/AutoVertical_8h_source.html deleted file mode 100644 index 57ce391f..00000000 --- a/deprecated/katabatic/doc/html/AutoVertical_8h_source.html +++ /dev/null @@ -1,98 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - - -
    -
    -
    AutoVertical.h
    -
    -
    -
    1 
    2 // -*- C++ -*-
    3 //
    4 // This file is part of the Coriolis Software.
    5 // Copyright (c) UPMC 2008-2013, All Rights Reserved
    6 //
    7 // +-----------------------------------------------------------------+
    8 // | C O R I O L I S |
    9 // | K a t a b a t i c - Routing Toolbox |
    10 // | |
    11 // | Author : Jean-Paul CHAPUT |
    12 // | E-mail : Jean-Paul.Chaput@lip6.fr |
    13 // | =============================================================== |
    14 // | C++ Header : "./katabatic/AutoVertical.h" |
    15 // +-----------------------------------------------------------------+
    16 
    17 
    18 #ifndef KATABATIC_AUTOVERTICAL_H
    19 #define KATABATIC_AUTOVERTICAL_H
    20 
    21 #include "hurricane/Vertical.h"
    22 #include "katabatic/AutoSegment.h"
    23 
    24 
    25 namespace Katabatic {
    26 
    27 
    28 // -------------------------------------------------------------------
    29 // Class : "AutoVertical".
    30 
    31 
    32  class AutoVertical : public AutoSegment {
    33  friend class AutoSegment;
    34 
    35  public:
    36  // Predicates.
    37  virtual bool _canSlacken () const;
    38  virtual bool canMoveULeft ( float reserve=0.0 ) const;
    39  virtual bool canMoveURight ( float reserve=0.0 ) const;
    40  // Accessors.
    41  virtual Segment* base ();
    42  virtual Segment* base () const;
    43  virtual Vertical* getVertical ();
    44  virtual DbU::Unit getSourceU () const;
    45  virtual DbU::Unit getTargetU () const;
    46  virtual DbU::Unit getDuSource () const;
    47  virtual DbU::Unit getDuTarget () const;
    48  virtual Interval getSpanU () const;
    49  virtual bool getConstraints ( DbU::Unit& min, DbU::Unit& max ) const;
    50  virtual Interval getSourceConstraints ( unsigned int flags=0 ) const;
    51  virtual Interval getTargetConstraints ( unsigned int flags=0 ) const;
    52  virtual unsigned int getDirection () const;
    53  virtual size_t getGCells ( vector<GCell*>& ) const;
    54  // Modifiers.
    55  virtual void setDuSource ( DbU::Unit );
    56  virtual void setDuTarget ( DbU::Unit );
    57  virtual void _setAxis ( DbU::Unit );
    58  virtual void updateOrient ();
    59  virtual void updatePositions ();
    60  virtual bool checkPositions () const;
    61  virtual bool checkConstraints () const;
    62  virtual unsigned int _makeDogleg ( GCell*, unsigned int flags );
    63  virtual bool moveULeft ();
    64  virtual bool moveURight ();
    65  virtual bool _slacken ( unsigned int flags );
    66 #if THIS_IS_DISABLED
    67  virtual void desalignate ( AutoContact* );
    68 #endif
    69  // Inspector Management.
    70  virtual Record* _getRecord () const;
    71  virtual string _getString () const;
    72  virtual string _getTypeName () const;
    73 
    74  protected:
    75  // Internal: Attributes.
    76  Vertical* _vertical;
    77 
    78  // Constructors.
    79  protected:
    81  virtual ~AutoVertical ();
    82  virtual void _postCreate ();
    83  virtual void _preDestroy ();
    84  private:
    85  AutoVertical ( const AutoVertical& );
    86  AutoVertical& operator= ( const AutoVertical& );
    87  };
    88 
    89 
    90 } // End of Katabatic namespace.
    91 
    92 
    93 INSPECTOR_P_SUPPORT(Katabatic::AutoVertical);
    94 
    95 
    96 #endif // KATABATIC_AUTOHORIZONTAL_H
    virtual bool checkConstraints() const
    Definition: AutoVertical.cpp:394
    -
    virtual bool getConstraints(DbU::Unit &min, DbU::Unit &max) const
    Definition: AutoVertical.cpp:160
    -
    virtual bool _canSlacken() const
    Definition: AutoVertical.cpp:215
    -
    virtual Interval getSourceConstraints(unsigned int flags=0) const
    Definition: AutoVertical.cpp:140
    -
    std::int64_t Unit
    -
    virtual unsigned int _makeDogleg(GCell *, unsigned int flags)
    Definition: AutoVertical.cpp:609
    -
    virtual DbU::Unit getDuTarget() const
    Definition: AutoVertical.cpp:46
    -
    virtual DbU::Unit getTargetU() const
    Definition: AutoVertical.cpp:44
    - - -
    virtual DbU::Unit getDuSource() const
    Definition: AutoVertical.cpp:45
    -
    Routing Global Cell.
    Definition: GCell.h:74
    -
    Abstract base class for AutoSegment.
    Definition: AutoSegment.h:104
    -
    virtual unsigned int getDirection() const
    Definition: AutoVertical.cpp:192
    -
    virtual Vertical * getVertical()
    Definition: AutoVertical.cpp:42
    -
    virtual bool moveULeft()
    Definition: AutoVertical.cpp:486
    -
    virtual Interval getTargetConstraints(unsigned int flags=0) const
    Definition: AutoVertical.cpp:150
    -
    The namespace dedicated to Katabatic.
    Definition: Katabatic.dox:13
    -
    virtual DbU::Unit getSourceU() const
    Definition: AutoVertical.cpp:43
    -
    virtual Segment * base()
    Definition: AutoVertical.cpp:40
    -
    virtual void updatePositions()
    Definition: AutoVertical.cpp:357
    -
    virtual void updateOrient()
    Definition: AutoVertical.cpp:341
    - -
    virtual void _postCreate()
    Definition: AutoVertical.cpp:62
    -
    virtual bool moveURight()
    Definition: AutoVertical.cpp:546
    -
    virtual bool checkPositions() const
    Definition: AutoVertical.cpp:364
    -
    Concrete Vertical AutoSegment.
    Definition: AutoVertical.h:32
    -
    Abstract base class for AutoContact.
    Definition: AutoContact.h:70
    -
    virtual size_t getGCells(vector< GCell *> &) const
    Definition: AutoVertical.cpp:196
    -
    virtual void setDuTarget(DbU::Unit)
    Definition: AutoVertical.cpp:49
    -
    virtual Interval getSpanU() const
    Definition: AutoVertical.cpp:47
    -
    virtual void setDuSource(DbU::Unit)
    Definition: AutoVertical.cpp:48
    -
    virtual bool canMoveULeft(float reserve=0.0) const
    Definition: AutoVertical.cpp:416
    -
    virtual bool canMoveURight(float reserve=0.0) const
    Definition: AutoVertical.cpp:451
    -
    virtual void _preDestroy()
    Definition: AutoVertical.cpp:96
    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/ChipTools_8h_source.html b/deprecated/katabatic/doc/html/ChipTools_8h_source.html deleted file mode 100644 index 119339e0..00000000 --- a/deprecated/katabatic/doc/html/ChipTools_8h_source.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - - -
    -
    -
    ChipTools.h
    -
    -
    -
    1 // -*- C++ -*-
    2 //
    3 // This file is part of the Coriolis Software.
    4 // Copyright (c) UPMC/LIP6 2008-2018, All Rights Reserved
    5 //
    6 // +-----------------------------------------------------------------+
    7 // | C O R I O L I S |
    8 // | K a t a b a t i c - Routing Toolbox |
    9 // | |
    10 // | Author : Jean-Paul CHAPUT |
    11 // | E-mail : Jean-Paul.Chaput@lip6.fr |
    12 // | =============================================================== |
    13 // | C++ Header : "./katabatic/ChipTools.h" |
    14 // +-----------------------------------------------------------------+
    15 
    16 
    17 #pragma once
    18 #include <string>
    19 #include "hurricane/DbU.h"
    20 #include "hurricane/Torus.h"
    21 namespace Hurricane {
    22  class Cell;
    23  class Instance;
    24 }
    25 
    26 
    27 namespace Katabatic {
    28 
    29  using Hurricane::Record;
    30  using Hurricane::DbU;
    31  using Hurricane::Box;
    32  using Hurricane::Torus;
    33  using Hurricane::Cell;
    34  using Hurricane::Instance;
    35 
    36 
    37  class ChipTools {
    38  public:
    39  ChipTools ( Cell* );
    40  inline bool isChip () const;
    41  inline Cell* getCell () const;
    42  inline Instance* getCore () const;
    43  inline Cell* getReferencePad () const;
    44  inline DbU::Unit getPadWidth () const;
    45  inline DbU::Unit getPadHeight () const;
    46  inline DbU::Unit getPadPowerWidth () const;
    47  inline DbU::Unit getPadClockWidth () const;
    48  inline const Box& getChipBb () const;
    49  inline const Box& getLeftPadsBb () const;
    50  inline const Box& getRightPadsBb () const;
    51  inline const Box& getTopPadsBb () const;
    52  inline const Box& getBottomPadsBb () const;
    53  inline const Torus& getCorona () const;
    54  inline const Box& getCoronaBb () const;
    55  inline bool intersectVPads ( const Box& ) const;
    56  inline bool intersectHPads ( const Box& ) const;
    57  inline bool vPadsEnclosed ( const Box& ) const;
    58  inline bool hPadsEnclosed ( const Box& ) const;
    59  public:
    60  Record* _getRecord () const;
    61  std::string _getString () const;
    62  inline std::string _getTypeName () const;
    63  private:
    64  Cell* _cell;
    65  Instance* _core;
    66  Cell* _referencePad;
    67  bool _isChip;
    68  Box _chipBb;
    69  Box _leftPadsBb;
    70  Box _rightPadsBb;
    71  Box _topPadsBb;
    72  Box _bottomPadsBb;
    73  Torus _chipCorona;
    74  DbU::Unit _padWidth;
    75  DbU::Unit _padHeight;
    76  DbU::Unit _padPowerWidth;
    77  DbU::Unit _padClockWidth;
    78  };
    79 
    80 
    81 // Inline Functions.
    82  inline bool ChipTools::isChip () const { return _isChip; }
    83  inline Cell* ChipTools::getCell () const { return _cell; }
    84  inline Instance* ChipTools::getCore () const { return _core; }
    85  inline Cell* ChipTools::getReferencePad () const { return _referencePad; }
    86  inline DbU::Unit ChipTools::getPadWidth () const { return _padWidth; }
    87  inline DbU::Unit ChipTools::getPadHeight () const { return _padHeight; }
    88  inline DbU::Unit ChipTools::getPadPowerWidth () const { return _padPowerWidth; }
    89  inline DbU::Unit ChipTools::getPadClockWidth () const { return _padClockWidth; }
    90  inline const Box& ChipTools::getChipBb () const { return _chipBb; }
    91  inline const Box& ChipTools::getLeftPadsBb () const { return _leftPadsBb; };
    92  inline const Box& ChipTools::getRightPadsBb () const { return _rightPadsBb; };
    93  inline const Box& ChipTools::getTopPadsBb () const { return _topPadsBb; };
    94  inline const Box& ChipTools::getBottomPadsBb () const { return _bottomPadsBb; };
    95  inline const Torus& ChipTools::getCorona () const { return _chipCorona; };
    96  inline const Box& ChipTools::getCoronaBb () const { return _chipCorona.getOuterBox(); }
    97  inline std::string ChipTools::_getTypeName () const { return "ChipTools"; }
    98 
    99  inline bool ChipTools::intersectVPads ( const Box& box ) const
    100  { return _leftPadsBb.intersect(box) or _rightPadsBb.intersect(box); }
    101 
    102  inline bool ChipTools::intersectHPads ( const Box& box ) const
    103  { return _topPadsBb.intersect(box) or _bottomPadsBb.intersect(box); }
    104 
    105  inline bool ChipTools::vPadsEnclosed ( const Box& box ) const
    106  { return _leftPadsBb.contains(box) or _rightPadsBb.contains(box); }
    107 
    108  inline bool ChipTools::hPadsEnclosed ( const Box& box ) const
    109  { return _topPadsBb.contains(box) or _bottomPadsBb.contains(box); }
    110 
    111 
    112 } // Katabatic namespace.
    113 
    114 INSPECTOR_PR_SUPPORT(Katabatic::ChipTools);
    bool intersectVPads(const Box &) const
    Definition: ChipTools.h:99
    -
    bool intersectHPads(const Box &) const
    Definition: ChipTools.h:102
    -
    bool contains(const DbU::Unit &x, const DbU::Unit &y) const
    -
    const Box & getBottomPadsBb() const
    Definition: ChipTools.h:94
    -
    std::int64_t Unit
    -
    const Box & getRightPadsBb() const
    Definition: ChipTools.h:92
    - -
    bool isChip() const
    Definition: ChipTools.h:82
    -
    const Torus & getCorona() const
    Definition: ChipTools.h:95
    -
    The namespace dedicated to Katabatic.
    Definition: Katabatic.dox:13
    - - -
    const Box & getLeftPadsBb() const
    Definition: ChipTools.h:91
    - -
    ChipTools(Cell *)
    Definition: ChipTools.cpp:211
    -
    const Box & getChipBb() const
    Definition: ChipTools.h:90
    -
    Utilities for Chip Level Design.
    Definition: ChipTools.h:37
    -
    bool intersect(const Box &box) const
    -
    const Box & getTopPadsBb() const
    Definition: ChipTools.h:93
    - -
    Instance * getCore() const
    Definition: ChipTools.h:84
    -
    Cell * getCell() const
    Definition: ChipTools.h:83
    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/Constants_8h_source.html b/deprecated/katabatic/doc/html/Constants_8h_source.html deleted file mode 100644 index da9ce98c..00000000 --- a/deprecated/katabatic/doc/html/Constants_8h_source.html +++ /dev/null @@ -1,88 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - - -
    -
    -
    Constants.h
    -
    -
    -
    1 // -*- mode: C++; explicit-buffer-name: "Constants.h<katabatic>" -*-
    2 //
    3 // This file is part of the Coriolis Software.
    4 // Copyright (c) UPMC 2013-2018, All Rights Reserved
    5 //
    6 // +-----------------------------------------------------------------+
    7 // | C O R I O L I S |
    8 // | K a t a b a t i c - Routing Toolbox |
    9 // | |
    10 // | Author : Jean-Paul CHAPUT |
    11 // | E-mail : Jean-Paul.Chaput@lip6.fr |
    12 // | =============================================================== |
    13 // | C++ Header : "./katabatic/Constants.h" |
    14 // +-----------------------------------------------------------------+
    15 
    16 
    17 #ifndef KATABATIC_CONSTANTS_H
    18 #define KATABATIC_CONSTANTS_H
    19 
    20 namespace Katabatic {
    21 
    22  enum FunctionFlag { KbNoFlags = 0x00000000
    23  , KbOpenSession = 0x00000001
    24  , KbRealignate = 0x00000002
    25  , KbNativeConstraints = 0x00000004
    26  , KbForceMove = 0x00000008
    27  , KbHorizontal = 0x00000010
    28  , KbVertical = 0x00000020
    29  , KbWithPerpands = 0x00000040
    30  , KbSource = 0x00000080
    31  , KbTarget = 0x00000100
    32  , KbWarnOnError = 0x00000200
    33  , KbTopology = 0x00000400
    34  , KbGlobalSegment = 0x00000800
    35  , KbAllowTerminal = 0x00001000
    36  , KbAllowLocal = 0x00002000
    37  , KbIgnoreContacts = 0x00004000
    38  , KbPropagate = 0x00008000
    39  , KbSuperior = 0x00010000
    40  , KbUseAboveLayer = 0x00020000
    41  , KbUseBelowLayer = 0x00040000
    42  , KbDoglegOnLeft = 0x00080000
    43  , KbDoglegOnRight = 0x00100000
    44  , KbWithNeighbors = 0x00200000
    45  , KbNoCheckLayer = 0x00400000
    46  , KbHalfSlacken = 0x00800000
    47  , KbNoGCellShrink = 0x01000000
    48  , KbCParanoid = 0x02000000
    49  , KbCreate = 0x04000000
    50  , KbCheckLowDensity = 0x08000000
    51  , KbDirectionMask = KbHorizontal|KbVertical
    52  };
    53 
    60  };
    61 
    62  enum EngineFlag { EngineDemoMode = 0x00000001
    63  , EngineWarnOnGCellOverload = 0x00000002
    64  , EngineDestroyBaseContact = 0x00000004
    65  , EngineDestroyBaseSegment = 0x00000008
    66  , EngineDestroyMask = EngineDestroyBaseContact|EngineDestroyBaseSegment
    67  };
    68 
    69  enum EngineAlgorithm { EngineLoadGrByNet = 0x00000001
    70  , EngineLoadGrByGCell = 0x00000002
    71  , EngineLayerAssignByLength = 0x00000004
    72  , EngineLayerAssignByTrunk = 0x00000008
    73  , EngineNoNetLayerAssign = 0x00000010
    74  };
    75 
    76 
    77  inline unsigned int perpandicularTo ( unsigned int direction )
    78  {
    79  switch ( direction & KbDirectionMask ) {
    80  case KbHorizontal: return KbVertical;
    81  case KbVertical: return KbHorizontal;
    82  }
    83  return 0;
    84  }
    85 
    86 
    87 } // Katabatic namespace.
    88 
    89 #endif // KATABATIC_CONSTANTS_H
    90 
    91 
    92 
    93 
    94 
    95 
    96 
    97 
    98 
    99 
    100 
    101 
    102 
    103 
    104 
    105 
    106 
    107 
    108 
    109 
    110 
    111 
    112 
    113 
    114 
    115 
    116 
    117 
    118 
    119 
    120 
    121 
    122 
    123 
    124 
    125 
    126 
    127 
    128 
    129 
    130 
    131 
    132 
    133 
    134 
    135 
    136 
    137 
    138 
    139 
    140 
    141 
    142 
    143 
    144 
    145 
    146 
    147 
    148 
    149 
    150 
    151 
    152 
    153 
    154 
    155 
    156 
    157 
    158 
    159 
    160 
    161 
    162 
    Definition: Constants.h:28
    -
    Definition: Constants.h:29
    -
    Definition: Constants.h:24
    -
    Definition: Constants.h:43
    -
    FunctionFlag
    Definition: Constants.h:22
    -
    Definition: Constants.h:23
    -
    Definition: Constants.h:46
    -
    Definition: Constants.h:55
    -
    Definition: Constants.h:58
    -
    Definition: Constants.h:56
    -
    Definition: Constants.h:57
    -
    Definition: Constants.h:41
    -
    Definition: Constants.h:32
    -
    Definition: Constants.h:38
    -
    The namespace dedicated to Katabatic.
    Definition: Katabatic.dox:13
    -
    Definition: Constants.h:54
    -
    Definition: Constants.h:31
    -
    Definition: Constants.h:26
    -
    Definition: Constants.h:30
    -
    Definition: Constants.h:40
    -
    Definition: Constants.h:42
    -
    Definition: Constants.h:27
    -
    Definition: Constants.h:59
    -
    Definition: Constants.h:25
    -
    EngineState
    Definition: Constants.h:54
    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/GCellGrid_8h_source.html b/deprecated/katabatic/doc/html/GCellGrid_8h_source.html deleted file mode 100644 index 7d2d3dc3..00000000 --- a/deprecated/katabatic/doc/html/GCellGrid_8h_source.html +++ /dev/null @@ -1,92 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - - -
    -
    -
    GCellGrid.h
    -
    -
    -
    1 // -*- C++ -*-
    2 //
    3 // This file is part of the Coriolis Software.
    4 // Copyright (c) UPMC 2008-2018, All Rights Reserved
    5 //
    6 // +-----------------------------------------------------------------+
    7 // | C O R I O L I S |
    8 // | K a t a b a t i c - Routing Toolbox |
    9 // | |
    10 // | Author : Jean-Paul CHAPUT |
    11 // | E-mail : Jean-Paul.Chaput@lip6.fr |
    12 // | =============================================================== |
    13 // | C++ Header : "./katabatic/GCellGrid.h" |
    14 // +-----------------------------------------------------------------+
    15 
    16 
    17 #ifndef KATABATIC_GCELL_GRID_H
    18 #define KATABATIC_GCELL_GRID_H
    19 
    20 namespace Hurricane {
    21  class Cell;
    22 }
    23 
    24 #include "katabatic/Constants.h"
    25 #include "katabatic/Grid.h"
    26 #include "katabatic/GCell.h"
    27 
    28 
    29 namespace Katabatic {
    30 
    31 
    32  using Hurricane::Cell;
    33  using Hurricane::_TName;
    34 
    35  class KatabaticEngine;
    36 
    37 
    38 // -------------------------------------------------------------------
    39 // Class : "Katabatic::GCellGrid".
    40 
    41 
    42  class GCellGrid : public Grid<GCell> {
    43  public:
    44  enum DensityMode { AverageHVDensity=1 // Average between all densities.
    45  , AverageHDensity =2 // Average between all H densities.
    46  , AverageVDensity =3 // Average between all V densities.
    47  , MaxHVDensity =4 // Maximum between average H and average V.
    48  , MaxVDensity =5 // Maximum of V densities.
    49  , MaxHDensity =6 // Maximum of H densities.
    50  , MaxDensity =7 // Maximum of H & V densities.
    51  };
    52 
    53  public:
    54  Cell* getCell () const;
    55  inline KatabaticEngine* getKatabatic () const;
    56  inline unsigned int getDensityMode () const;
    57  inline size_t getHEdgeCapacity () const;
    58  inline size_t getVEdgeCapacity () const;
    59  Interval getUSide ( unsigned int ) const;
    60  size_t checkDensity () const;
    61  bool checkEdgeOverflow ( size_t hreserved, size_t vreserved ) const;
    62  size_t updateDensity ();
    63  void updateContacts ( unsigned int flags=KbOpenSession );
    64  inline void setDensityMode ( unsigned int );
    65  void _xmlWrite ( ostream& );
    66  virtual Record* _getRecord () const;
    67  virtual string _getString () const;
    68  virtual string _getTypeName () const;
    69 
    70  // Attributes.
    71  protected:
    72  KatabaticEngine* _katabatic;
    73  int _densityMode;
    74  size_t _hEdgeCapacity;
    75  size_t _vEdgeCapacity;
    76 
    77  // Constructors & Destructors.
    78  protected:
    80  virtual ~GCellGrid ();
    81  void _postCreate ();
    82  void _preDestroy ();
    83  static GCellGrid* create ( KatabaticEngine* );
    84  private:
    85  GCellGrid ( const GCellGrid& );
    86  GCellGrid& operator= ( const GCellGrid& );
    87 
    88  // Friends.
    89  friend class KatabaticEngine;
    90  };
    91 
    92 
    93  inline KatabaticEngine* GCellGrid::getKatabatic () const { return _katabatic; }
    94  inline unsigned int GCellGrid::getDensityMode () const { return _densityMode; }
    95  inline size_t GCellGrid::getHEdgeCapacity () const { return _hEdgeCapacity; }
    96  inline size_t GCellGrid::getVEdgeCapacity () const { return _vEdgeCapacity; }
    97  inline void GCellGrid::setDensityMode ( unsigned int mode ) { _densityMode=mode; }
    98 
    99 
    100 } // End of Katabatic namespace.
    101 
    102 
    103 INSPECTOR_P_SUPPORT(Katabatic::GCellGrid);
    104 
    105 
    106 
    107 #endif // __KATABATIC_GCELL_GRID__
    size_t updateDensity()
    Definition: GCellGrid.cpp:158
    -
    void _preDestroy()
    Definition: GCellGrid.cpp:115
    -
    Definition: Constants.h:23
    -
    Definition: GCellGrid.h:46
    -
    unsigned int getDensityMode() const
    Definition: GCellGrid.h:94
    -
    Template Class for Regular Grid.
    Definition: Grid.h:136
    -
    Cell * getCell() const
    Definition: GCellGrid.cpp:127
    -
    Interval getUSide(unsigned int) const
    Definition: GCellGrid.cpp:133
    - -
    Definition: GCellGrid.h:48
    -
    Definition: GCellGrid.h:47
    -
    Definition: GCellGrid.h:44
    -
    void setDensityMode(unsigned int)
    Definition: GCellGrid.h:97
    -
    void updateContacts(unsigned int flags=KbOpenSession)
    Definition: GCellGrid.cpp:147
    - -
    Definition: GCellGrid.h:50
    -
    GCell Grid.
    Definition: GCellGrid.h:42
    -
    static GCellGrid * create(KatabaticEngine *)
    Definition: GCellGrid.cpp:103
    -
    The namespace dedicated to Katabatic.
    Definition: Katabatic.dox:13
    -
    The Katabatic Tool.
    Definition: KatabaticEngine.h:91
    -
    size_t checkDensity() const
    Definition: GCellGrid.cpp:168
    -
    void _postCreate()
    Definition: GCellGrid.cpp:53
    -
    size_t getHEdgeCapacity() const
    Definition: GCellGrid.h:95
    -
    DensityMode
    Definition: GCellGrid.h:44
    - -
    Definition: GCellGrid.h:49
    -
    size_t getVEdgeCapacity() const
    Definition: GCellGrid.h:96
    -
    KatabaticEngine * getKatabatic() const
    Definition: GCellGrid.h:93
    -
    Definition: GCellGrid.h:45
    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/GCell_8h_source.html b/deprecated/katabatic/doc/html/GCell_8h_source.html deleted file mode 100644 index 9040d685..00000000 --- a/deprecated/katabatic/doc/html/GCell_8h_source.html +++ /dev/null @@ -1,158 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - - -
    -
    -
    GCell.h
    -
    -
    -
    1 // -*- C++ -*-
    2 //
    3 // This file is part of the Coriolis Software.
    4 // Copyright (c) UPMC 2008-2018, All Rights Reserved
    5 //
    6 // +-----------------------------------------------------------------+
    7 // | C O R I O L I S |
    8 // | K a t a b a t i c - Routing Toolbox |
    9 // | |
    10 // | Author : Jean-Paul CHAPUT |
    11 // | E-mail : Jean-Paul.Chaput@lip6.fr |
    12 // | =============================================================== |
    13 // | C++ Header : "./katabatic/GCell.h" |
    14 // +-----------------------------------------------------------------+
    15 
    16 
    17 #ifndef KATABATIC_GCELL_H
    18 #define KATABATIC_GCELL_H
    19 
    20 #include <set>
    21 #include <vector>
    22 #include <iostream>
    23 #include <functional>
    24 
    25 #include "hurricane/DbU.h"
    26 #include "hurricane/Point.h"
    27 #include "hurricane/Box.h"
    28 #include "hurricane/Interval.h"
    29 #include "hurricane/ExtensionGo.h"
    30 namespace Hurricane {
    31  class Name;
    32  class RoutingPad;
    33 }
    34 
    35 #include "crlcore/RoutingLayerGauge.h"
    36 #include "katabatic/Constants.h"
    37 #include "katabatic/AutoSegments.h"
    38 
    39 
    40 namespace Katabatic {
    41 
    42 
    43  using std::set;
    44  using std::vector;
    45  using std::ostream;
    46  using std::binary_function;
    47  using Hurricane::_TName;
    48  using Hurricane::Record;
    49  using Hurricane::Name;
    50  using Hurricane::DbU;
    51  using Hurricane::Point;
    52  using Hurricane::Box;
    53  using Hurricane::Interval;
    54  using Hurricane::ExtensionGo;
    56 
    57  class GCellGrid;
    58  class AutoContact;
    59  class AutoSegment;
    60 
    61 
    62  enum GCellFunctionFlags { NoUpdate = 0x00000001 };
    63 
    64 
    65 // -------------------------------------------------------------------
    66 // Class : "Katabatic::GCell".
    67 
    68  enum GCellFlag { GCellInvalidated = 0x00000001
    69  , GCellSaturated = 0x00000002
    70  , GCellUnderIoPad = 0x00000004
    71  };
    72 
    73 
    74  class GCell : public ExtensionGo {
    75 
    76  public:
    77  class CompareByIndex : public binary_function<const GCell*,const GCell*,bool> {
    78  public:
    79  bool operator() ( const GCell* lhs, const GCell* rhs ) const;
    80  };
    81  class CompareByDensity : public binary_function<GCell*,GCell*,bool> {
    82  public:
    83  CompareByDensity ( unsigned int depth );
    84  bool operator() ( GCell* lhs, GCell* rhs ) const;
    85  private:
    86  unsigned int _depth;
    87  };
    88  class CompareByKey : public binary_function<const GCell*,const GCell*,bool> {
    89  public:
    90  bool operator() ( const GCell* lhs, const GCell* rhs ) const;
    91  };
    92 
    93  class Key {
    94  private:
    95  GCell* _gcell;
    96  float _density;
    97  public:
    98  inline Key ( GCell*, unsigned int depth );
    99  inline float getDensity () const;
    100  inline GCell* getGCell () const;
    101  inline void update ( unsigned int depth );
    102  friend bool operator< ( const Key&, const Key& );
    103  };
    104  public:
    105  typedef set<GCell*,CompareByIndex> SetIndex;
    106 
    107  public:
    108  // Static Utilities.
    109  static bool areDensityConnex ( GCell* a, GCell* b );
    110  // Static Accessors.
    111  static size_t getAllocateds ();
    112  static DbU::Unit getTopRightShrink ();
    113  static const Name& getStaticName ();
    114  virtual const Name& getName () const;
    115  // Accessors.
    116  inline bool isSaturated () const;
    117  bool isSaturated ( unsigned int depth ) const;
    118  inline bool isValid () const;
    119  inline bool isUnderIoPad () const;
    120  bool isAboveDensity ( float threshold ) const;
    121  bool hasFreeTrack ( size_t depth, float reserve ) const;
    122  inline GCellGrid* getGCellGrid () const;
    123  inline unsigned int getDepth () const;
    124  inline unsigned int getIndex () const;
    125  unsigned int getRow () const;
    126  unsigned int getColumn () const;
    127  GCell* getLeft () const;
    128  GCell* getRight () const;
    129  GCell* getUp () const;
    130  GCell* getDown () const;
    131  void getDensities ( float* ) const;
    132  virtual void translate ( const DbU::Unit&, const DbU::Unit& );
    133  virtual Box getBoundingBox () const;
    134  inline Point getCenter () const;
    135  inline DbU::Unit getX () const;
    136  inline DbU::Unit getY () const;
    137  inline DbU::Unit getXMax () const;
    138  inline DbU::Unit getYMax () const;
    139  Interval getSide ( unsigned int ) const;
    140  float getHCapacity () const;
    141  float getVCapacity () const;
    142  float getDensity ( unsigned int flags=0 ) const;
    143  float getAverageHVDensity () const;
    144  float getMaxHVDensity () const;
    145  inline float getCDensity ( unsigned int flags=0 ) const;
    146  inline float getWDensity ( unsigned int depth, unsigned int flags=0 ) const;
    147  inline DbU::Unit getBlockage ( unsigned int depth ) const;
    148  inline float getFragmentation ( unsigned int depth ) const;
    149  inline float getFeedthroughs ( unsigned int depth ) const;
    150  inline float getGlobalsCount ( unsigned int depth ) const;
    151  inline const vector<AutoSegment*>& getHSegments () const;
    152  inline const vector<AutoSegment*>& getVSegments () const;
    153  inline const vector<AutoContact*>& getContacts () const;
    158  inline AutoSegments getStartSegments ( unsigned int direction );
    159  inline AutoSegments getStopSegments ( unsigned int direction );
    160  size_t getRoutingPads ( set<RoutingPad*>& );
    161  inline const Key& getKey () const;
    162  size_t checkDensity () const;
    163  bool checkEdgeSaturation ( size_t hreserved, size_t vreserved) const;
    164  // Modifiers.
    165  void addBlockage ( unsigned int depth, DbU::Unit );
    166  inline void addHSegment ( AutoSegment* );
    167  inline void addVSegment ( AutoSegment* );
    168  inline void addContact ( AutoContact* );
    169  void removeVSegment ( AutoSegment* );
    170  void removeHSegment ( AutoSegment* );
    171  void removeContact ( AutoContact* );
    172  void updateContacts ();
    173  size_t updateDensity ();
    174  inline void updateKey ( unsigned int depth );
    175  bool stepBalance ( unsigned int depth, SetIndex& invalidateds );
    176  void rpDesaturate ( set<Net*>& );
    177  bool stepDesaturate ( unsigned int depth
    178  , set<Net*>&, AutoSegment*& moved
    179  , unsigned int flags=0 );
    180  bool stepNetDesaturate ( unsigned int depth
    181  , set<Net*>& globalNets
    182  , SetIndex& invalidateds );
    183  inline void invalidateCt ();
    184  inline void setUnderIoPad ();
    185  void truncDensities ();
    186  // Inspector Management.
    187  Record* _getRecord () const;
    188  string _getString () const;
    189  inline string _getTypeName () const;
    190  void _xmlWrite ( ostream& o ) const;
    191 
    192  private:
    193  // Static Attributes.
    194  static const Name _goName;
    195  static size_t _allocateds;
    196  static DbU::Unit _topRightShrink;
    197  // Attributes.
    198  GCellGrid* _gcellGrid;
    199  unsigned int _index;
    200  vector<AutoSegment*> _vsegments;
    201  vector<AutoSegment*> _hsegments;
    202  vector<AutoContact*> _contacts;
    203  Box _box;
    204  size_t _depth;
    205  size_t _pinDepth;
    206  DbU::Unit* _blockages;
    207  float _cDensity;
    208  float* _densities;
    209  float* _feedthroughs;
    210  float* _fragmentations;
    211  float* _globalsCount;
    212  unsigned int _flags;
    213  Key _key;
    214 
    215  protected:
    216  // Constructors & Destructors.
    217  GCell ( GCellGrid* gcellGrid
    218  , unsigned int index
    219  , const Box& box
    220  );
    221  inline ~GCell ();
    222  inline void _postCreate ();
    223  inline void _preDestroy ();
    224  static GCell* create ( GCellGrid* gcellGrid
    225  , unsigned int index
    226  , Box box
    227  );
    228  private:
    229  GCell ( const GCell& );
    230  GCell& operator= ( const GCell& );
    231 
    232  friend class GCellGrid;
    233  };
    234 
    235 
    236 // GCell Inline Functions.
    237  inline bool GCell::isSaturated () const { return _flags&GCellSaturated; }
    238  inline bool GCell::isValid () const { return not (_flags&GCellInvalidated); }
    239  inline bool GCell::isUnderIoPad () const { return _flags&GCellUnderIoPad; }
    240  inline GCellGrid* GCell::getGCellGrid () const { return _gcellGrid; }
    241  inline unsigned int GCell::getDepth () const { return _depth; }
    242  inline unsigned int GCell::getIndex () const { return _index; }
    243  inline Point GCell::getCenter () const { return _box.getCenter(); }
    244  inline DbU::Unit GCell::getX () const { return _box.getXMin(); }
    245  inline DbU::Unit GCell::getY () const { return _box.getYMin(); }
    246  inline DbU::Unit GCell::getXMax () const { return _box.getXMax(); }
    247  inline DbU::Unit GCell::getYMax () const { return _box.getYMax(); }
    248  inline const vector<AutoSegment*>& GCell::getVSegments () const { return _vsegments; }
    249  inline const vector<AutoSegment*>& GCell::getHSegments () const { return _hsegments; }
    250  inline const vector<AutoContact*>& GCell::getContacts () const { return _contacts; }
    251  inline string GCell::_getTypeName () const { return _TName("GCell"); }
    252  inline void GCell::invalidateCt () { _flags |= GCellInvalidated; }
    253  inline void GCell::setUnderIoPad() { _flags |= GCellUnderIoPad; }
    254  inline const GCell::Key& GCell::getKey () const { return _key; }
    255  inline void GCell::updateKey ( unsigned int depth ) { _key.update(depth); }
    256 
    257  inline AutoSegments GCell::getStartSegments ( unsigned int direction )
    258  { return (direction&KbHorizontal) ? getHStartSegments() : getVStartSegments(); }
    259 
    260  inline AutoSegments GCell::getStopSegments ( unsigned int direction )
    261  { return (direction&KbHorizontal) ? getHStopSegments() : getVStopSegments(); }
    262 
    263  inline float GCell::getCDensity ( unsigned int flags ) const
    264  { if (not isValid() and not(flags & NoUpdate)) const_cast<GCell*>(this)->updateDensity(); return _cDensity; }
    265 
    266  inline float GCell::getWDensity ( unsigned int depth, unsigned int flags ) const
    267  { if (not isValid() and not(flags & NoUpdate)) const_cast<GCell*>(this)->updateDensity(); return _densities[depth]; }
    268 
    269  inline float GCell::getFragmentation ( unsigned int depth ) const
    270  { if (not isValid()) const_cast<GCell*>(this)->updateDensity(); return _fragmentations[depth]; }
    271 
    272  inline float GCell::getFeedthroughs ( unsigned int depth ) const
    273  { if (not isValid()) const_cast<GCell*>(this)->updateDensity(); return _feedthroughs[depth]; }
    274 
    275  inline float GCell::getGlobalsCount ( unsigned int depth ) const
    276  { if (not isValid()) const_cast<GCell*>(this)->updateDensity(); return _globalsCount[depth]; }
    277 
    278  inline DbU::Unit GCell::getBlockage ( unsigned int depth ) const
    279  { return (depth<_depth) ? _blockages[depth] : 0; }
    280 
    281  inline void GCell::addVSegment ( AutoSegment* segment )
    282  { invalidateCt(); _vsegments.push_back(segment); }
    283 
    284  inline void GCell::addHSegment ( AutoSegment* segment )
    285  { invalidateCt(); _hsegments.push_back(segment); }
    286 
    287  inline void GCell::addContact ( AutoContact* contact )
    288  { invalidateCt(); _contacts.push_back(contact); }
    289 
    290 
    291 // GCell::CompareByIndex Inline Functions.
    292  inline bool GCell::CompareByIndex::operator() ( const GCell* lhs, const GCell* rhs ) const
    293  { return ( lhs->getIndex() < rhs->getIndex() ); }
    294 
    295 
    296 // GCell::Key Inline Functions.
    297  inline GCell::Key::Key ( GCell* owner, unsigned int depth ) : _gcell(owner), _density(owner->getWDensity(depth,NoUpdate)) {}
    298  inline float GCell::Key::getDensity () const { return _density; }
    299  inline GCell* GCell::Key::getGCell () const { return _gcell; }
    300  inline void GCell::Key::update ( unsigned int depth ) { _density=_gcell->getWDensity(depth); }
    301 
    302  inline bool operator< ( const GCell::Key& lhs, const GCell::Key& rhs )
    303  {
    304  //float difference = Hurricane::roundfp ( lhs._density - rhs._density );
    305  float difference = lhs._density - rhs._density;
    306  if (difference != 0.0) return (difference > 0.0);
    307 
    308  return lhs._gcell->getIndex() < rhs._gcell->getIndex();
    309  }
    310 
    311 
    312 // -------------------------------------------------------------------
    313 // Class : "GCellDensitySet".
    314 
    316  public:
    317  GCellDensitySet ( unsigned int depth );
    318  GCellDensitySet ( unsigned int depth, const std::vector<GCell*>& );
    319  ~GCellDensitySet ();
    320  inline bool empty () const;
    321  inline size_t size () const;
    322  inline const std::set<GCell*,GCell::CompareByKey>&
    323  getGCells () const;
    324  inline void insert ( GCell* );
    325  inline void erase ( GCell* );
    326  inline void unqueue ( GCell* );
    327  void requeue ();
    328  private:
    329  unsigned int _depth;
    330  std::set<GCell*,GCell::CompareByKey> _set;
    331  GCell::SetIndex _requests;
    332  };
    333 
    334 
    335  inline bool GCellDensitySet::empty () const { return _set.empty(); }
    336  inline size_t GCellDensitySet::size () const { return _set.size(); }
    337  inline void GCellDensitySet::insert ( GCell* gcell ) { _requests.insert( gcell ); }
    338  inline void GCellDensitySet::erase ( GCell* gcell ) { if (not _set.empty()) _set.erase( gcell ); }
    339  inline void GCellDensitySet::unqueue ( GCell* gcell ) { insert( gcell ); }
    340  inline const std::set<GCell*,GCell::CompareByKey>& GCellDensitySet::getGCells () const { return _set; }
    341 
    342 
    343 // -------------------------------------------------------------------
    344 // Utilities.
    345 
    346 
    347  string getVectorString ( float*, size_t );
    348 
    349 
    350  typedef std::vector<GCell*> GCellVector;
    351 
    352 
    353 } // End of Katabatic namespace.
    354 
    355 
    356 INSPECTOR_P_SUPPORT(Katabatic::GCell);
    357 
    358 
    359 #endif // KATABATIC_GCELL_H
    DbU::Unit getY() const
    Definition: GCell.h:245
    -
    GCell Density Comparison Functor.
    Definition: GCell.h:81
    -
    void addContact(AutoContact *)
    Definition: GCell.h:287
    -
    void insert(GCell *)
    Definition: GCell.h:337
    -
    const DbU::Unit & getXMax() const
    -
    unsigned int getRow() const
    Definition: GCell.cpp:461
    -
    virtual void translate(const DbU::Unit &, const DbU::Unit &)
    Definition: GCell.cpp:1272
    -
    unsigned int getColumn() const
    Definition: GCell.cpp:465
    -
    const vector< AutoContact * > & getContacts() const
    Definition: GCell.h:250
    -
    AutoSegments getHStartSegments()
    Definition: GCell.cpp:497
    -
    const vector< AutoSegment * > & getVSegments() const
    Definition: GCell.h:248
    -
    float getVCapacity() const
    Definition: GCell.cpp:539
    -
    CompareByDensity(unsigned int depth)
    Definition: GCell.cpp:271
    -
    void updateContacts()
    Definition: GCell.cpp:742
    -
    AutoSegments getVStopSegments()
    Definition: GCell.cpp:515
    -
    bool empty() const
    Definition: GCell.h:335
    -
    static DbU::Unit getTopRightShrink()
    Definition: GCell.cpp:453
    -
    const DbU::Unit & getYMax() const
    -
    float getDensity(unsigned int flags=0) const
    Definition: GCell.cpp:572
    -
    AutoSegments getStopSegments(unsigned int direction)
    Definition: GCell.h:260
    -
    bool isAboveDensity(float threshold) const
    Definition: GCell.cpp:400
    -
    void removeVSegment(AutoSegment *)
    Definition: GCell.cpp:715
    - -
    virtual const Name & getName() const
    Definition: GCell.cpp:457
    -
    GCell * getGCell() const
    Definition: GCell.h:299
    -
    size_t updateDensity()
    Definition: GCell.cpp:750
    -
    std::int64_t Unit
    -
    unsigned int getDepth() const
    Definition: GCell.h:241
    -
    Interval getSide(unsigned int) const
    Definition: GCell.cpp:485
    -
    bool hasFreeTrack(size_t depth, float reserve) const
    Definition: GCell.cpp:984
    -
    const std::set< GCell *, GCell::CompareByKey > & getGCells() const
    Definition: GCell.h:340
    - -
    void erase(GCell *)
    Definition: GCell.h:338
    -
    void rpDesaturate(set< Net *> &)
    Definition: GCell.cpp:1102
    -
    const DbU::Unit & getXMin() const
    -
    size_t checkDensity() const
    Definition: GCell.cpp:938
    -
    GCell * getDown() const
    Definition: GCell.cpp:481
    - -
    GCell Grid.
    Definition: GCellGrid.h:42
    -
    float getFeedthroughs(unsigned int depth) const
    Definition: GCell.h:272
    -
    GCell Index Comparison Functor.
    Definition: GCell.h:77
    -
    void removeContact(AutoContact *)
    Definition: GCell.cpp:657
    -
    AutoSegments getStartSegments(unsigned int direction)
    Definition: GCell.h:257
    -
    Routing Global Cell.
    Definition: GCell.h:74
    -
    size_t getRoutingPads(set< RoutingPad *> &)
    Definition: GCell.cpp:521
    -
    Abstract base class for AutoSegment.
    Definition: AutoSegment.h:104
    - -
    set< GCell *, CompareByIndex > SetIndex
    Definition: GCell.h:105
    -
    bool isSaturated() const
    Definition: GCell.h:237
    -
    The namespace dedicated to Katabatic.
    Definition: Katabatic.dox:13
    -
    bool stepDesaturate(unsigned int depth, set< Net *> &, AutoSegment *&moved, unsigned int flags=0)
    Definition: GCell.cpp:1130
    -
    const vector< AutoSegment * > & getHSegments() const
    Definition: GCell.h:249
    -
    Point getCenter() const
    -
    GCellGrid * getGCellGrid() const
    Definition: GCell.h:240
    - -
    static const Name & getStaticName()
    Definition: GCell.cpp:445
    -
    unsigned int getIndex() const
    Definition: GCell.h:242
    -
    AutoSegments getHStopSegments()
    Definition: GCell.cpp:509
    -
    DbU::Unit getXMax() const
    Definition: GCell.h:246
    -
    void update(unsigned int depth)
    Definition: GCell.h:300
    - -
    bool stepNetDesaturate(unsigned int depth, set< Net *> &globalNets, SetIndex &invalidateds)
    Definition: GCell.cpp:1226
    -
    size_t size() const
    Definition: GCell.h:336
    -
    static size_t getAllocateds()
    Definition: GCell.cpp:449
    -
    DbU::Unit getBlockage(unsigned int depth) const
    Definition: GCell.h:278
    -
    GCell * getUp() const
    Definition: GCell.cpp:477
    -
    float getFragmentation(unsigned int depth) const
    Definition: GCell.h:269
    -
    Definition: Constants.h:27
    -
    float getDensity() const
    Definition: GCell.h:298
    -
    DbU::Unit getYMax() const
    Definition: GCell.h:247
    -
    Key(GCell *, unsigned int depth)
    Definition: GCell.h:297
    -
    bool checkEdgeSaturation(size_t hreserved, size_t vreserved) const
    Definition: GCell.cpp:1034
    -
    void updateKey(unsigned int depth)
    Definition: GCell.h:255
    - -
    GCell Set, sorted by density.
    Definition: GCell.h:315
    -
    GCell Key - Density Cache.
    Definition: GCell.h:93
    -
    Abstract base class for AutoContact.
    Definition: AutoContact.h:70
    -
    GCell * getLeft() const
    Definition: GCell.cpp:469
    -
    float getWDensity(unsigned int depth, unsigned int flags=0) const
    Definition: GCell.h:266
    -
    bool isValid() const
    Definition: GCell.h:238
    -
    DbU::Unit getX() const
    Definition: GCell.h:244
    -
    const Key & getKey() const
    Definition: GCell.h:254
    -
    float getGlobalsCount(unsigned int depth) const
    Definition: GCell.h:275
    -
    void unqueue(GCell *)
    Definition: GCell.h:339
    -
    GCell * getRight() const
    Definition: GCell.cpp:473
    -
    void addVSegment(AutoSegment *)
    Definition: GCell.h:281
    -
    const DbU::Unit & getYMin() const
    -
    float getCDensity(unsigned int flags=0) const
    Definition: GCell.h:263
    -
    void addBlockage(unsigned int depth, DbU::Unit)
    Definition: GCell.cpp:631
    -
    float getHCapacity() const
    Definition: GCell.cpp:533
    - -
    AutoSegments getVStartSegments()
    Definition: GCell.cpp:503
    -
    void removeHSegment(AutoSegment *)
    Definition: GCell.cpp:688
    -
    void addHSegment(AutoSegment *)
    Definition: GCell.h:284
    -
    virtual Box getBoundingBox() const
    Definition: GCell.cpp:1266
    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/GCells_8h_source.html b/deprecated/katabatic/doc/html/GCells_8h_source.html deleted file mode 100644 index c3859a5a..00000000 --- a/deprecated/katabatic/doc/html/GCells_8h_source.html +++ /dev/null @@ -1,73 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - - -
    -
    -
    GCells.h
    -
    -
    -
    1 // -*- C++ -*-
    2 //
    3 // This file is part of the Coriolis Software.
    4 // Copyright (c) UPMC 2008-2018, All Rights Reserved
    5 //
    6 // +-----------------------------------------------------------------+
    7 // | C O R I O L I S |
    8 // | K a t a b a t i c - Routing Toolbox |
    9 // | |
    10 // | Author : Jean-Paul CHAPUT |
    11 // | E-mail : Jean-Paul.Chaput@lip6.fr |
    12 // | =============================================================== |
    13 // | C++ Header : "./katabatic/GCells.h" |
    14 // +-----------------------------------------------------------------+
    15 
    16 
    17 #ifndef KATABATIC_GCELLS_H
    18 #define KATABATIC_GCELLS_H
    19 
    20 #include "hurricane/Collections.h"
    21 
    22 
    23 namespace Katabatic {
    24 
    25 
    26  using Hurricane::Locator;
    31 
    32 
    33 // -------------------------------------------------------------------
    34 // Forward declarations.
    35 
    36  class GCell;
    37 
    38 
    39 // -------------------------------------------------------------------
    40 // Collections.
    41 
    42 
    46 
    47 
    48 } // Katabatic namespace.
    49 
    50 #endif // KATABATIC_GCELLS_H
    -
    GenericLocator< GCell * > GCellLocator
    Definition: GCells.h:44
    - - -
    Routing Global Cell.
    Definition: GCell.h:74
    - -
    The namespace dedicated to Katabatic.
    Definition: Katabatic.dox:13
    - -
    GenericFilter< GCell * > GCellFilter
    Definition: GCells.h:45
    -
    GenericCollection< GCell * > GCells
    Definition: GCells.h:36
    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/Grid_8h_source.html b/deprecated/katabatic/doc/html/Grid_8h_source.html deleted file mode 100644 index 08e97da8..00000000 --- a/deprecated/katabatic/doc/html/Grid_8h_source.html +++ /dev/null @@ -1,91 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - - -
    -
    -
    Grid.h
    -
    -
    -
    1 // -*- C++ -*-
    2 //
    3 // This file is part of the Coriolis Software.
    4 // Copyright (c) UPMC 2008-2018, All Rights Reserved
    5 //
    6 // +-----------------------------------------------------------------+
    7 // | C O R I O L I S |
    8 // | K a t a b a t i c - Routing Toolbox |
    9 // | |
    10 // | Author : Jean-Paul CHAPUT |
    11 // | E-mail : Jean-Paul.Chaput@lip6.fr |
    12 // | =============================================================== |
    13 // | C++ Header : "./katabatic/Grid.h" |
    14 // +-----------------------------------------------------------------+
    15 
    16 
    17 #ifndef KATABATIC_GRID_H
    18 #define KATABATIC_GRID_H
    19 
    20 #include <string>
    21 #include <vector>
    22 #include "hurricane/Point.h"
    23 #include "hurricane/Box.h"
    24 #include "hurricane/Collection.h"
    25 
    26 
    27 namespace Katabatic {
    28 
    29  using std::string;
    30  using std::vector;
    31  using Hurricane::_TName;
    32  using Hurricane::Record;
    33  using Hurricane::DbU;
    34  using Hurricane::Point;
    35  using Hurricane::Box;
    38  using Hurricane::getCollection;
    39 
    40 
    41 // -------------------------------------------------------------------
    42 // Class : "Katabatic::BaseGrid".
    43 
    44  class BaseGrid {
    45 
    46  public:
    47  class Axis;
    48  public:
    49  inline void destroy ();
    50  // Accessors.
    51  inline bool isOnTopBorder ( unsigned int ) const;
    52  inline bool isOnRightBorder ( unsigned int ) const;
    53  inline const Box& getBoundingBox () const;
    54  inline unsigned int getColumns () const;
    55  inline unsigned int getRows () const;
    56  inline unsigned int getRawSize () const;
    57  inline unsigned int getIndex ( unsigned int c, unsigned int r ) const;
    58  inline unsigned int getRow ( unsigned int ) const;
    59  inline unsigned int getColumn ( unsigned int ) const;
    60  inline const Axis& getXGrads () const;
    61  inline const Axis& getYGrads () const;
    62  // Inspector Managment.
    63  virtual Record* _getRecord () const;
    64  virtual string _getString () const = 0;
    65 
    66  public:
    67  // Sub-Class Grid::Axis.
    68  class Axis {
    69  public:
    70  // Modifiers.
    71  inline void addGraduation ( DbU::Unit );
    72  void sort ();
    73  // Accessors.
    74  inline unsigned int getSize () const;
    75  unsigned int getGraduationNumber ( DbU::Unit pos, bool& onGraduation ) const;
    76  // Operators.
    77  inline const DbU::Unit& operator[] ( unsigned int i ) const;
    78  // Inspector Management.
    79  Record* _getRecord () const;
    80  string _getString () const;
    81  inline string _getTypeName () const;
    82  string _print () const;
    83  protected:
    84  // Attributes.
    85  vector<DbU::Unit> _graduations;
    86  };
    87 
    88  protected:
    89  // Attributes.
    90  Box _boundingBox;
    91  Axis _xGraduations;
    92  Axis _yGraduations;
    93  unsigned int _rows;
    94  unsigned int _columns;
    95  unsigned int _rawSize;
    96 
    97  // Constructors & Destructors.
    98  protected:
    99  BaseGrid ( const Box& );
    100  virtual ~BaseGrid ();
    101  virtual void _postCreate ();
    102  virtual void _preDestroy ();
    103  private:
    104  BaseGrid ( const BaseGrid& );
    105  BaseGrid& operator= ( const BaseGrid& );
    106  };
    107 
    108 
    109 // Inline Functions.
    110  inline void BaseGrid::Axis::addGraduation ( DbU::Unit graduation ) { _graduations.push_back(graduation); }
    111  inline unsigned int BaseGrid::Axis::getSize () const { return _graduations.size(); }
    112  inline const DbU::Unit& BaseGrid::Axis::operator[] ( unsigned int i ) const { return _graduations[i]; }
    113  inline string BaseGrid::Axis::_getTypeName () const { return _TName("BaseGrid::Axis"); }
    114 
    115  inline void BaseGrid::destroy () { _preDestroy(); delete this; }
    116  inline const Box& BaseGrid::getBoundingBox () const { return _boundingBox; };
    117  inline unsigned int BaseGrid::getColumns () const { return _columns; };
    118  inline unsigned int BaseGrid::getRows () const { return _rows; };
    119  inline unsigned int BaseGrid::getRawSize () const { return getColumns() * getRows(); }
    120  inline unsigned int BaseGrid::getIndex ( unsigned int c, unsigned int r ) const { return c+(r*getColumns()); }
    121  inline unsigned int BaseGrid::getRow ( unsigned int i ) const { return i / getColumns(); }
    122  inline unsigned int BaseGrid::getColumn ( unsigned int i ) const { return i % getColumns(); }
    123  inline bool BaseGrid::isOnTopBorder ( unsigned int i ) const { return getRow (i)+1 == getRows(); }
    124  inline bool BaseGrid::isOnRightBorder ( unsigned int i ) const { return getColumn(i)+1 == getColumns(); }
    125 
    126  inline const BaseGrid::Axis& BaseGrid::getXGrads () const { return _xGraduations; }
    127  inline const BaseGrid::Axis& BaseGrid::getYGrads () const { return _yGraduations; }
    128 
    129 
    130 
    131 // -------------------------------------------------------------------
    132 // Template Class : "Katabatic::Grid".
    133 
    134 
    135  template<typename GCellT>
    136  class Grid : public BaseGrid {
    137 
    138  public:
    139  // Accessors.
    140  inline GCellT* getGCell ( unsigned int index ) const;
    141  inline GCellT* getGCell ( const Point p ) const;
    142  inline GCellT* getGCell ( const Point p1, const Point p2 ) const;
    143  inline GCellT* getGCellLeft ( const GCellT* gcell ) const;
    144  inline GCellT* getGCellRight ( const GCellT* gcell ) const;
    145  inline GCellT* getGCellUp ( const GCellT* gcell ) const;
    146  inline GCellT* getGCellDown ( const GCellT* gcell ) const;
    147  inline vector<GCellT*>* getGCellVector ();
    148  // Collections & Filters.
    149  inline GenericCollection<GCellT*> getGCells ();
    150  inline GenericCollection<GCellT*> getGCellsColumn ( unsigned int column
    151  , unsigned int rowStart
    152  , unsigned int rowStop );
    153  inline GenericCollection<GCellT*> getGCellsRow ( unsigned int row
    154  , unsigned int columnStart
    155  , unsigned int columnStop );
    156  // Inspector Managment.
    157  virtual Record* _getRecord () const;
    158 
    159  protected:
    160  // Attributes.
    161  vector<GCellT*> _gcells;
    162 
    163  // Constructors & Destructors.
    164  protected:
    165  inline Grid ( const Box& );
    166  virtual ~Grid ();
    167  private:
    168  Grid ( const Grid& );
    169  Grid& operator= ( const Grid& );
    170  };
    171 
    172 
    173 } // End of Katabatic namespace.
    174 
    175 
    176 #include "katabatic/GridCollections.h"
    177 #include "katabatic/GridBox.h"
    178 
    179 
    180 namespace Katabatic {
    181 
    182 
    183 // Inline Functions.
    184 
    185  template<typename GCellT>
    186  Grid<GCellT>::Grid ( const Box& bb )
    187  : BaseGrid(bb)
    188  , _gcells ()
    189  { }
    190 
    191 
    192  template<typename GCellT>
    194  { }
    195 
    196 
    197  template<typename GCellT>
    198  GCellT* Grid<GCellT>::getGCell ( unsigned int index ) const
    199  {
    200  if ( ( index < 0 ) || ( index >= _rawSize ) ) return NULL;
    201 
    202  return _gcells [ index ];
    203  }
    204 
    205 
    206  template<typename GCellT>
    207  GCellT* Grid<GCellT>::getGCell ( const Point p ) const
    208  {
    209  if (not getBoundingBox().contains(p)) return NULL;
    210 
    211  bool onColumn;
    212  bool onRow;
    213 
    214  unsigned int column = _xGraduations.getGraduationNumber ( p.getX(), onColumn );
    215  unsigned int row = _yGraduations.getGraduationNumber ( p.getY(), onRow );
    216 
    217  return getGCell ( getIndex(column,row) );
    218  }
    219 
    220 
    221  template<typename GCellT>
    222  GCellT* Grid<GCellT>::getGCell ( const Point p1, const Point p2 ) const
    223  {
    224  if (not getBoundingBox().contains(p1)) return NULL;
    225  if (not getBoundingBox().contains(p2)) return NULL;
    226 
    227  bool onColumn1;
    228  bool onColumn2;
    229  bool onRow1;
    230  bool onRow2;
    231 
    232  unsigned int column1 = _xGraduations.getGraduationNumber ( p1.getX(), onColumn1 );
    233  unsigned int column2 = _xGraduations.getGraduationNumber ( p2.getX(), onColumn2 );
    234  unsigned int row1 = _yGraduations.getGraduationNumber ( p1.getY(), onRow1 );
    235  unsigned int row2 = _yGraduations.getGraduationNumber ( p2.getY(), onRow2 );
    236 
    237  if ( row1 != row2 ) {
    238  if ( onRow1 ) row1 = row2;
    239  }
    240 
    241  if ( column1 != column2 ) {
    242  if ( onColumn1 ) column1 = column2;
    243  }
    244 
    245  return getGCell ( getIndex(column1,row1) );
    246  }
    247 
    248 
    249  template<typename GCellT>
    250  GCellT* Grid<GCellT>::getGCellLeft ( const GCellT* gcell) const
    251  {
    252  if ( !gcell ) return NULL;
    253 
    254  unsigned int index = gcell->getIndex();
    255  if ( !getColumn(index) ) return NULL;
    256 
    257  return getGCell ( index - 1 );
    258  }
    259 
    260 
    261  template<typename GCellT>
    262  GCellT* Grid<GCellT>::getGCellRight ( const GCellT* gcell) const
    263  {
    264  if ( !gcell ) return NULL;
    265 
    266  unsigned int index = gcell->getIndex();
    267  if ( getColumn(index) >= getColumns()-1 ) return NULL;
    268 
    269  return getGCell ( index + 1 );
    270  }
    271 
    272 
    273  template<typename GCellT>
    274  GCellT* Grid<GCellT>::getGCellUp ( const GCellT* gcell) const
    275  {
    276  if ( !gcell ) return NULL;
    277 
    278  unsigned int index = gcell->getIndex();
    279  if ( getRow(index) >= getRows()-1 ) return NULL;
    280 
    281  return getGCell ( index + getColumns() );
    282  }
    283 
    284 
    285  template<typename GCellT>
    286  GCellT* Grid<GCellT>::getGCellDown ( const GCellT* gcell) const
    287  {
    288  if ( !gcell ) return NULL;
    289 
    290  unsigned int index = gcell->getIndex();
    291  if ( !getRow(index) ) return NULL;
    292 
    293  return getGCell ( index - getColumns() );
    294  }
    295 
    296 
    297  template<typename GCellT>
    298  inline vector<GCellT*>* Grid<GCellT>::getGCellVector ()
    299  {
    300  return &_gcells;
    301  }
    302 
    303 
    304  template<typename GCellT>
    306  {
    307  return getCollection(_gcells);
    308  }
    309 
    310  template<typename GCellT>
    312  , unsigned int rowStart
    313  , unsigned int rowStop )
    314  {
    315  return Grid_Column<GCellT>(this,column,rowStart,rowStop);
    316  }
    317 
    318  template<typename GCellT>
    320  , unsigned int columnStart
    321  , unsigned int columnStop )
    322  {
    323  return Grid_Row<GCellT>(this,row,columnStart,columnStop);
    324  }
    325 
    326 
    327  template<typename GCellT>
    328  Record* Grid<GCellT>::_getRecord () const
    329  {
    330  Record* record = BaseGrid::_getRecord ();
    331  record->add ( getSlot ( "_gcells", &_gcells ) );
    332  return record;
    333  }
    334 
    335 
    336 } // End of Katabatic namespace.
    337 
    338 
    339 INSPECTOR_P_SUPPORT(Katabatic::BaseGrid::Axis);
    340 
    341 
    342 #endif // KATABATIC_GRID_H
    -
    unsigned int getRows() const
    Definition: Grid.h:118
    -
    void sort()
    Definition: Grid.cpp:36
    -
    void addGraduation(DbU::Unit)
    Definition: Grid.h:110
    -
    Abstract Base Class for Irregular Grid.
    Definition: Grid.h:44
    -
    Template Class for Regular Grid.
    Definition: Grid.h:136
    -
    std::int64_t Unit
    -
    const Axis & getXGrads() const
    Definition: Grid.h:126
    -
    unsigned int getGraduationNumber(DbU::Unit pos, bool &onGraduation) const
    Definition: Grid.cpp:42
    - -
    const Box & getBoundingBox() const
    Definition: Grid.h:116
    -
    Grid
    - -
    BaseGrid(const Box &)
    Definition: Grid.cpp:99
    -
    void destroy()
    Definition: Grid.h:115
    -
    The namespace dedicated to Katabatic.
    Definition: Katabatic.dox:13
    - -
    unsigned int getRawSize() const
    Definition: Grid.h:119
    -
    unsigned int getColumn(unsigned int) const
    Definition: Grid.h:122
    -
    unsigned int getRow(unsigned int) const
    Definition: Grid.h:121
    - -
    const Axis & getYGrads() const
    Definition: Grid.h:127
    -
    unsigned int getSize() const
    Definition: Grid.h:111
    -
    Graduations on a BaseGrid Axis (H or V).
    Definition: Grid.h:68
    -
    unsigned int getColumns() const
    Definition: Grid.h:117
    -
    const DbU::Unit & operator[](unsigned int i) const
    Definition: Grid.h:112
    -
    unsigned int getIndex(unsigned int c, unsigned int r) const
    Definition: Grid.h:120
    -
    Grid(const Box &)
    Definition: Grid.h:186
    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/KatabaticEngine_8h_source.html b/deprecated/katabatic/doc/html/KatabaticEngine_8h_source.html deleted file mode 100644 index a7eee4df..00000000 --- a/deprecated/katabatic/doc/html/KatabaticEngine_8h_source.html +++ /dev/null @@ -1,136 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - - -
    -
    -
    KatabaticEngine.h
    -
    -
    -
    1 // -*- C++ -*-
    2 //
    3 // This file is part of the Coriolis Software.
    4 // Copyright (c) UPMC/LIP6 2008-2018, All Rights Reserved
    5 //
    6 // +-----------------------------------------------------------------+
    7 // | C O R I O L I S |
    8 // | K a t a b a t i c - Routing Toolbox |
    9 // | |
    10 // | Author : Jean-Paul CHAPUT |
    11 // | E-mail : Jean-Paul.Chaput@lip6.fr |
    12 // | =============================================================== |
    13 // | C++ Header : "./katabatic/KatabaticEngine.h" |
    14 // +-----------------------------------------------------------------+
    15 
    16 
    17 #ifndef KATABATIC_KATABATIC_ENGINE_H
    18 #define KATABATIC_KATABATIC_ENGINE_H
    19 
    20 #include <iostream>
    21 #include <string>
    22 #include <vector>
    23 #include <set>
    24 #include <map>
    25 #include "hurricane/DbU.h"
    26 #include "hurricane/Torus.h"
    27 #include "hurricane/Layer.h"
    28 #include "hurricane/Net.h"
    29 #include "hurricane/NetRoutingProperty.h"
    30 
    31 namespace Hurricane {
    32  class Name;
    33  class Cell;
    34  class Instance;
    35 }
    36 
    37 #include "crlcore/ToolEngine.h"
    38 
    39 namespace CRL {
    40  class RoutingGauge;
    41  class RoutingLayerGauge;
    42 }
    43 
    44 #include "katabatic/Constants.h"
    45 #include "katabatic/Configuration.h"
    46 #include "katabatic/GCell.h"
    47 #include "katabatic/AutoSegments.h"
    48 #include "katabatic/AutoContact.h"
    49 #include "katabatic/ChipTools.h"
    50 
    51 
    52 namespace Katabatic {
    53 
    54  using std::ostream;
    55  using std::string;
    56  using std::vector;
    57  using std::set;
    58  using Hurricane::Timer;
    59  using Hurricane::Name;
    60  using Hurricane::Layer;
    61  using Hurricane::Torus;
    62  using Hurricane::Net;
    63  using Hurricane::Nets;
    64  using Hurricane::Cell;
    65  using Hurricane::Instance;
    66  using Hurricane::NetRoutingExtension;
    67  using Hurricane::NetRoutingState;
    68  using CRL::RoutingGauge;
    70  using CRL::ToolEngine;
    71 
    72  class GCellGrid;
    73 
    74 
    75 // -------------------------------------------------------------------
    76 // Functors.
    77 
    78  struct NetCompareByName {
    79  inline bool operator() ( const Net* lhs, const Net* rhs ) const;
    80  };
    81 
    82  inline bool NetCompareByName::operator() ( const Net* lhs, const Net* rhs ) const
    83  { return lhs->getName() < rhs->getName(); }
    84 
    85 
    86 // -------------------------------------------------------------------
    87 // Class : "KatabaticEngine".
    88 
    89  typedef map<Name,NetRoutingState*> NetRoutingStates;
    90 
    91  class KatabaticEngine : public ToolEngine {
    92  public:
    93  typedef ToolEngine Super;
    94  typedef set<Net*,NetCompareByName> NetSet;
    95 
    96  public:
    97  // Constructor.
    98  static KatabaticEngine* create ( Cell* );
    99  // Accessors.
    100  static KatabaticEngine* get ( const Cell* );
    101  static const Name& staticGetName ();
    102  inline bool isGMetal ( const Layer* ) const;
    103  inline bool isGContact ( const Layer* ) const;
    104  inline bool isChip () const;
    105  inline bool isInDemoMode () const;
    106  inline bool doWarnOnGCellOverload () const;
    107  inline bool doDestroyBaseContact () const;
    108  inline bool doDestroyBaseSegment () const;
    109  inline bool doDestroyTool () const;
    110  virtual const Name& getName () const;
    111  inline EngineState getState () const;
    112  inline unsigned int getFlags ( unsigned int mask ) const;
    113  inline Configuration* getKatabaticConfiguration ();
    114  virtual Configuration* getConfiguration ();
    115  inline CellGauge* getCellGauge () const;
    116  inline RoutingGauge* getRoutingGauge () const;
    117  inline RoutingLayerGauge* getLayerGauge ( size_t depth ) const;
    118  inline const Layer* getRoutingLayer ( size_t depth ) const ;
    119  inline Layer* getContactLayer ( size_t depth ) const ;
    120  inline GCellGrid* getGCellGrid () const;
    121  inline const NetSet& getRoutingNets () const;
    122  inline DbU::Unit getGlobalThreshold () const;
    123  inline float getSaturateRatio () const;
    124  inline size_t getSaturateRp () const;
    125  inline DbU::Unit getExtensionCap () const;
    126  inline const ChipTools& getChipTools () const;
    127  inline const NetRoutingStates& getNetRoutingStates () const;
    128  void xmlWriteGCellGrid ( ostream& );
    129  void xmlWriteGCellGrid ( const string& );
    130  // Modifiers.
    131  inline void setState ( EngineState state );
    132  inline void setFlags ( unsigned int );
    133  inline void unsetFlags ( unsigned int );
    134  inline void setGlobalThreshold ( DbU::Unit );
    135  inline void setSaturateRatio ( float );
    136  inline void setSaturateRp ( size_t );
    137  void printMeasures ( const string& ) const;
    138  void refresh ( unsigned int flags=KbOpenSession );
    139  virtual void createDetailedGrid ();
    140  void chipPrep ();
    141  void findSpecialNets ();
    142  void makePowerRails ();
    143  virtual void loadGlobalRouting ( unsigned int method );
    144  void slackenBorder ( Box bb, Layer::Mask, unsigned int flags );
    145  void slackenBlockIos ( Instance* core );
    146  bool moveUpNetTrunk ( AutoSegment*, set<Net*>& globalNets, GCell::SetIndex& invalidateds );
    147  bool moveUpNetTrunk2 ( AutoSegment*, set<Net*>& globalNets, GCell::SetIndex& invalidateds );
    148  void moveULeft ( AutoSegment*, set<Net*>& globalNets, GCell::SetIndex& invalidateds );
    149  void moveURight ( AutoSegment*, set<Net*>& globalNets, GCell::SetIndex& invalidateds );
    150  void balanceGlobalDensity ();
    151  void layerAssign ( unsigned int method );
    152  void updateNetTopology ( Net* );
    153  void computeNetConstraints ( Net* );
    154  void toOptimals ( Net* );
    155  virtual void finalizeLayout ();
    156  // Internal Modifiers.
    157  NetRoutingState* getRoutingState ( Net*, unsigned int flags=KbNoFlags );
    158  void _computeNetOptimals ( Net* );
    159  void _computeNetTerminals ( Net* );
    160  bool _check ( const char* message=NULL ) const;
    161  void _check ( Net* ) const;
    162  void _gutKatabatic ();
    163  void _link ( AutoContact* );
    164  void _link ( AutoSegment* );
    165  void _unlink ( AutoContact* );
    166  void _unlink ( AutoSegment* );
    167  AutoContact* _lookup ( Contact* ) const;
    168  AutoSegment* _lookup ( Segment* ) const;
    169  void _destroyAutoSegments ();
    170  void _destroyAutoContacts ();
    171  void _loadGrByNet ();
    172  void _loadNetGlobalRouting ( Net* );
    173  void _alignate ( Net* );
    174  void _balanceGlobalDensity ( unsigned int depth );
    175  void _desaturate ( unsigned int depth, set<Net*>&, unsigned long& total, unsigned long& globals );
    176  void _layerAssignByLength ( unsigned long& total, unsigned long& global, set<Net*>& );
    177  void _layerAssignByLength ( Net*, unsigned long& total, unsigned long& global, set<Net*>& );
    178  void _layerAssignByTrunk ( unsigned long& total, unsigned long& global, set<Net*>& );
    179  void _layerAssignByTrunk ( Net*, set<Net*>&, unsigned long& total, unsigned long& global );
    180  void _saveNet ( Net* );
    181  void _print () const;
    182  void _print ( Net* ) const;
    183  inline const AutoContactLut& _getAutoContactLut () const;
    184  inline const AutoSegmentLut& _getAutoSegmentLut () const;
    185  // Inspector Management.
    186  virtual Record* _getRecord () const;
    187  virtual string _getString () const;
    188  virtual string _getTypeName () const;
    189 
    190  protected:
    191  // Attributes.
    192  static Name _toolName;
    193  EngineState _state;
    194  unsigned int _flags;
    195  Configuration* _configuration;
    196  GCellGrid* _gcellGrid;
    197  ChipTools _chipTools;
    198  AutoSegmentLut _autoSegmentLut;
    199  AutoContactLut _autoContactLut;
    200  NetRoutingStates _netRoutingStates;
    201 
    202  protected:
    203  // Constructors & Destructors.
    204  KatabaticEngine ( Cell* );
    205  virtual ~KatabaticEngine ();
    206  virtual void _postCreate ();
    207  virtual void _preDestroy ();
    208  private:
    209  KatabaticEngine ( const KatabaticEngine& );
    210  KatabaticEngine& operator= ( const KatabaticEngine& );
    211  };
    212 
    213 
    214 // Inline Functions.
    215  inline bool KatabaticEngine::doDestroyBaseContact () const { return _flags & EngineDestroyBaseContact; }
    216  inline bool KatabaticEngine::doDestroyBaseSegment () const { return _flags & EngineDestroyBaseSegment; }
    217  inline bool KatabaticEngine::doDestroyTool () const { return _state >= EngineGutted; }
    218  inline bool KatabaticEngine::doWarnOnGCellOverload () const { return _flags & EngineWarnOnGCellOverload; }
    219  inline bool KatabaticEngine::isInDemoMode () const { return _flags & EngineDemoMode; }
    220  inline Configuration* KatabaticEngine::getKatabaticConfiguration () { return _configuration; }
    221  inline bool KatabaticEngine::isGMetal ( const Layer* layer ) const { return _configuration->isGMetal(layer); }
    222  inline bool KatabaticEngine::isGContact ( const Layer* layer ) const { return _configuration->isGContact(layer); }
    223  inline void KatabaticEngine::setFlags ( unsigned int flags ) { _flags |= flags; }
    224  inline void KatabaticEngine::unsetFlags ( unsigned int flags ) { _flags &= ~flags; }
    225  inline void KatabaticEngine::setSaturateRatio ( float ratio ) { _configuration->setSaturateRatio(ratio); }
    226  inline void KatabaticEngine::setSaturateRp ( size_t threshold ) { _configuration->setSaturateRp(threshold); }
    227  inline void KatabaticEngine::setGlobalThreshold ( DbU::Unit threshold ) { _configuration->setGlobalThreshold(threshold); }
    228  inline unsigned int KatabaticEngine::getFlags ( unsigned int mask ) const { return _flags & mask; }
    229  inline EngineState KatabaticEngine::getState () const { return _state; }
    230  inline CellGauge* KatabaticEngine::getCellGauge () const { return _configuration->getCellGauge(); }
    231  inline RoutingGauge* KatabaticEngine::getRoutingGauge () const { return _configuration->getRoutingGauge(); }
    232  inline RoutingLayerGauge* KatabaticEngine::getLayerGauge ( size_t depth ) const { return _configuration->getLayerGauge(depth); }
    233  inline const Layer* KatabaticEngine::getRoutingLayer ( size_t depth ) const { return _configuration->getRoutingLayer(depth); }
    234  inline Layer* KatabaticEngine::getContactLayer ( size_t depth ) const { return _configuration->getContactLayer(depth); }
    235  inline GCellGrid* KatabaticEngine::getGCellGrid () const { return _gcellGrid; }
    236  inline DbU::Unit KatabaticEngine::getGlobalThreshold () const { return _configuration->getGlobalThreshold(); }
    237  inline float KatabaticEngine::getSaturateRatio () const { return _configuration->getSaturateRatio(); }
    238  inline size_t KatabaticEngine::getSaturateRp () const { return _configuration->getSaturateRp(); }
    239  inline const AutoContactLut& KatabaticEngine::_getAutoContactLut () const { return _autoContactLut; }
    240  inline const AutoSegmentLut& KatabaticEngine::_getAutoSegmentLut () const { return _autoSegmentLut; }
    241  inline void KatabaticEngine::setState ( EngineState state ) { _state = state; }
    242  inline bool KatabaticEngine::isChip () const { return _chipTools.isChip(); }
    243  inline const ChipTools& KatabaticEngine::getChipTools () const { return _chipTools; }
    244  inline const NetRoutingStates& KatabaticEngine::getNetRoutingStates () const { return _netRoutingStates; }
    245 
    246 
    247 // -------------------------------------------------------------------
    248 // Global Variables.
    249 
    250 
    251  extern const char* missingKTBT;
    252  extern const char* badMethod;
    253 
    254 
    255 } // Katabatic namespace.
    256 
    257 #endif // KATABATIC_KATABATIC_ENGINE_H
    const NetSet & getRoutingNets() const
    -
    const Layer * getRoutingLayer(size_t depth) const
    Definition: KatabaticEngine.h:233
    -
    bool doDestroyBaseSegment() const
    Definition: KatabaticEngine.h:216
    -
    bool isGMetal(const Layer *) const
    Definition: KatabaticEngine.h:221
    -
    bool isInDemoMode() const
    Definition: KatabaticEngine.h:219
    -
    set< Net *, NetCompareByName > NetSet
    Definition: KatabaticEngine.h:94
    - -
    Definition: Constants.h:23
    -
    size_t getSaturateRp() const
    Definition: KatabaticEngine.h:238
    -
    static KatabaticEngine * create(Cell *)
    Definition: KatabaticEngine.cpp:204
    -
    virtual void loadGlobalRouting(unsigned int method)
    Definition: KatabaticEngine.cpp:491
    - - -
    const ChipTools & getChipTools() const
    Definition: KatabaticEngine.h:243
    - -
    std::int64_t Unit
    -
    float getSaturateRatio() const
    Definition: KatabaticEngine.h:237
    -
    bool doWarnOnGCellOverload() const
    Definition: KatabaticEngine.h:218
    - -
    void slackenBlockIos(Instance *core)
    Definition: ChipTools.cpp:180
    - -
    void setFlags(unsigned int)
    Definition: KatabaticEngine.h:223
    -
    Configuration * getKatabaticConfiguration()
    Definition: KatabaticEngine.h:220
    -
    Hurricane::Mask< unsigned long long > Mask
    -
    RoutingGauge * getRoutingGauge() const
    Definition: KatabaticEngine.h:231
    -
    bool doDestroyTool() const
    Definition: KatabaticEngine.h:217
    -
    GCell Grid.
    Definition: GCellGrid.h:42
    -
    static const Name & staticGetName()
    Definition: KatabaticEngine.cpp:138
    -
    Abstract base class for AutoSegment.
    Definition: AutoSegment.h:104
    -
    bool isChip() const
    Definition: ChipTools.h:82
    - -
    set< GCell *, CompareByIndex > SetIndex
    Definition: GCell.h:105
    -
    void layerAssign(unsigned int method)
    -
    DbU::Unit getGlobalThreshold() const
    Definition: KatabaticEngine.h:236
    -
    void setState(EngineState state)
    Definition: KatabaticEngine.h:241
    -
    void refresh(unsigned int flags=KbOpenSession)
    Definition: KatabaticEngine.cpp:401
    -
    The namespace dedicated to Katabatic.
    Definition: Katabatic.dox:13
    - -
    The Katabatic Tool.
    Definition: KatabaticEngine.h:91
    - -
    void setGlobalThreshold(DbU::Unit)
    Definition: KatabaticEngine.h:227
    -
    unsigned int getFlags(unsigned int mask) const
    Definition: KatabaticEngine.h:228
    -
    void setSaturateRp(size_t)
    Definition: KatabaticEngine.h:226
    -
    bool isChip() const
    Definition: KatabaticEngine.h:242
    -
    void computeNetConstraints(Net *)
    - -
    void unsetFlags(unsigned int)
    Definition: KatabaticEngine.h:224
    -
    bool moveUpNetTrunk(AutoSegment *, set< Net *> &globalNets, GCell::SetIndex &invalidateds)
    - -
    RoutingLayerGauge * getLayerGauge(size_t depth) const
    Definition: KatabaticEngine.h:232
    - -
    Utilities for Chip Level Design.
    Definition: ChipTools.h:37
    -
    void xmlWriteGCellGrid(ostream &)
    Definition: KatabaticEngine.cpp:354
    -
    virtual Configuration * getConfiguration()
    Definition: KatabaticEngine.cpp:437
    -
    virtual const Name & getName() const
    Definition: KatabaticEngine.cpp:142
    -
    bool doDestroyBaseContact() const
    Definition: KatabaticEngine.h:215
    -
    Definition: Constants.h:59
    - -
    Abstract base class for AutoContact.
    Definition: AutoContact.h:70
    - -
    DbU::Unit getExtensionCap() const
    -
    void slackenBorder(Box bb, Layer::Mask, unsigned int flags)
    Definition: ChipTools.cpp:164
    -
    EngineState getState() const
    Definition: KatabaticEngine.h:229
    -
    virtual void createDetailedGrid()
    Definition: KatabaticEngine.cpp:167
    -
    void setSaturateRatio(float)
    Definition: KatabaticEngine.h:225
    -
    void printMeasures(const string &) const
    Definition: KatabaticEngine.cpp:363
    - -
    Layer * getContactLayer(size_t depth) const
    Definition: KatabaticEngine.h:234
    -
    EngineState
    Definition: Constants.h:54
    - -
    GCellGrid * getGCellGrid() const
    Definition: KatabaticEngine.h:235
    - -
    virtual void finalizeLayout()
    Definition: KatabaticEngine.cpp:514
    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/Observer_8h_source.html b/deprecated/katabatic/doc/html/Observer_8h_source.html deleted file mode 100644 index bd898bc4..00000000 --- a/deprecated/katabatic/doc/html/Observer_8h_source.html +++ /dev/null @@ -1,76 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - - -
    -
    -
    Observer.h
    -
    -
    -
    1 // -*- C++ -*-
    2 //
    3 // This file is part of the Coriolis Software.
    4 // Copyright (c) UPMC 2008-2018, All Rights Reserved
    5 //
    6 // +-----------------------------------------------------------------+
    7 // | C O R I O L I S |
    8 // | K a t a b a t i c - Routing Toolbox |
    9 // | |
    10 // | Author : Jean-Paul CHAPUT |
    11 // | E-mail : Jean-Paul.Chaput@lip6.fr |
    12 // | =============================================================== |
    13 // | C++ Header : "./katabatic/Observer.h" |
    14 // +-----------------------------------------------------------------+
    15 
    16 
    17 #ifndef KATABATIC_OBSERVER_H
    18 #define KATABATIC_OBSERVER_H
    19 
    20 #include "hurricane/Error.h"
    21 
    22 
    23 namespace Katabatic {
    24 
    25 
    26 // -------------------------------------------------------------------
    27 // Classes : "BaseObserver" & "Observer".
    28 
    29  class BaseObserver {
    30  public:
    31  virtual void notify ( unsigned int flags );
    32  };
    33 
    34 
    35  template< typename T>
    36  class Observer : public BaseObserver {
    37  public:
    38  inline Observer ( const T* owner );
    39  inline T* getOwner () const;
    40  private:
    41  Observer ( const Observer& );
    42  private:
    43  static int _ownerOffset;
    44  };
    45 
    46 
    47  template< typename T>
    49 
    50  template< typename T>
    51  inline Observer<T>::Observer ( const T* owner )
    52  : BaseObserver()
    53  {
    54  if (owner == NULL)
    55  throw Hurricane::Error( "Observer::Observer(), attempt to create with NULL owner." );
    56 
    57  if (_ownerOffset < 0)
    58  _ownerOffset = (unsigned long)this - (unsigned long)owner;
    59  }
    60 
    61 
    62  template< typename T>
    63  inline T* Observer<T>::getOwner () const { return reinterpret_cast<T*>((unsigned long)this - _ownerOffset); }
    64 
    65 
    66 // -------------------------------------------------------------------
    67 // Class : "Observable".
    68 
    69  class Observable {
    70  public:
    71  inline Observable ();
    72  template< typename T >
    73  inline T* getObserver ();
    74  inline void addObserver ( BaseObserver* );
    75  inline void removeObserver ( BaseObserver* );
    76  inline void notify ( unsigned int flags );
    77  private:
    78  Observable ( const Observable& );
    79  private:
    80  BaseObserver* _observer;
    81  };
    82 
    83 
    85  : _observer(NULL)
    86  { }
    87 
    88 
    89  template< typename T >
    91  {
    92  if (_observer) return (dynamic_cast< Observer<T>* >( _observer ))->getOwner();
    93  return NULL;
    94  }
    95 
    96  inline void Observable::addObserver ( BaseObserver* observer )
    97  {
    98  if (_observer)
    99  throw Hurricane::Error( "Observable::addObserver(), trying to add a second observer which is unsupported." );
    100  _observer = observer;
    101  }
    102 
    103  inline void Observable::removeObserver ( BaseObserver* observer )
    104  {
    105  if (_observer != observer)
    106  throw Hurricane::Error( "Observable::removeObserver(), trying to remove wrong observer." );
    107  _observer = NULL;
    108  }
    109 
    110 
    111  inline void Observable::notify ( unsigned int flags )
    112  {
    113  if (_observer) _observer->notify( flags );
    114  }
    115 
    116 
    117 } // Katabatic namespace.
    118 
    119 #endif
    void removeObserver(BaseObserver *)
    Definition: Observer.h:103
    -
    virtual void notify(unsigned int flags)
    Definition: Observer.cpp:26
    - -
    Observer Design Pattern, Subject part.
    Definition: Observer.h:69
    -
    Observable()
    Definition: Observer.h:84
    -
    The namespace dedicated to Katabatic.
    Definition: Katabatic.dox:13
    -
    Observer(const T *owner)
    Definition: Observer.h:51
    -
    void notify(unsigned int flags)
    Definition: Observer.h:111
    -
    T * getOwner() const
    Definition: Observer.h:63
    -
    void addObserver(BaseObserver *)
    Definition: Observer.h:96
    -
    Observer Design Pattern, Observer part.
    Definition: Observer.h:29
    -
    Observer Design Pattern, Observer part.
    Definition: Observer.h:36
    -
    T * getObserver()
    Definition: Observer.h:90
    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/Session_8h_source.html b/deprecated/katabatic/doc/html/Session_8h_source.html deleted file mode 100644 index f5488718..00000000 --- a/deprecated/katabatic/doc/html/Session_8h_source.html +++ /dev/null @@ -1,114 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - - -
    -
    -
    Session.h
    -
    -
    -
    1 // -*- mode: C++; explicit-buffer-name: "Session.h<katabatic>" -*-
    2 //
    3 // This file is part of the Coriolis Software.
    4 // Copyright (c) UPMC 2008-2018, All Rights Reserved
    5 //
    6 // +-----------------------------------------------------------------+
    7 // | C O R I O L I S |
    8 // | K a t a b a t i c - Routing Toolbox |
    9 // | |
    10 // | Author : Jean-Paul CHAPUT |
    11 // | E-mail : Jean-Paul.Chaput@lip6.fr |
    12 // | =============================================================== |
    13 // | C++ Header : "./katabatic/Session.h" |
    14 // +-----------------------------------------------------------------+
    15 
    16 
    17 #ifndef KATABATIC_SESSION_H
    18 #define KATABATIC_SESSION_H
    19 
    20 #include <string>
    21 #include <vector>
    22 #include <set>
    23 #include <map>
    24 #include <boost/function.hpp>
    25 #include "hurricane/Commons.h"
    26 #include "hurricane/DbU.h"
    27 #include "crlcore/CellGauge.h"
    28 #include "crlcore/RoutingGauge.h"
    29 #include "katabatic/Constants.h"
    30 #include "katabatic/Configuration.h"
    31 
    32 namespace Hurricane {
    33  class Layer;
    34  class Technology;
    35  class Net;
    36  class Contact;
    37  class Segment;
    38 }
    39 
    40 
    41 namespace Katabatic {
    42 
    43  using std::cerr;
    44  using std::endl;
    45  using std::string;
    46  using std::vector;
    47  using std::set;
    48  using std::map;
    49  using std::make_pair;
    50  using Hurricane::tab;
    51  using Hurricane::_TName;
    52  using Hurricane::Record;
    53  using Hurricane::Layer;
    55  using Hurricane::DbU;
    56  using Hurricane::Net;
    57  using Hurricane::Contact;
    58  using Hurricane::Segment;
    59  using CRL::RoutingGauge;
    60 
    61  class AutoContact;
    62  class AutoSegment;
    63  class KatabaticEngine;
    64 
    65 
    66 // -------------------------------------------------------------------
    67 // Class : "Katabatic::Session".
    68 
    69  class Session {
    70  public:
    71  // Static Methods.
    72  static inline bool doDestroyBaseContact ();
    73  static inline bool doDestroyBaseSegment ();
    74  static inline bool doDestroyTool ();
    75  static bool isInDemoMode ();
    76  static bool doWarnGCellOverload ();
    77  static Session* get ( const char* message=NULL );
    78  static inline Technology* getTechnology ();
    79  static inline KatabaticEngine* getKatabatic ();
    80  static inline const Configuration* getConfiguration ();
    81  static float getSaturateRatio ();
    82  static size_t getSaturateRp ();
    83  static inline size_t getAllowedDepth ();
    84  static DbU::Unit getExtensionCap ();
    85  static inline CellGauge* getCellGauge ();
    86  static inline DbU::Unit getSliceHeight ();
    87  static inline DbU::Unit getSliceStep ();
    88  static inline RoutingGauge* getRoutingGauge ();
    89  static inline RoutingLayerGauge* getLayerGauge ( size_t depth );
    90  static inline size_t getDepth ();
    91  static inline size_t getViaDepth ( const Layer* layer );
    92  static inline size_t getLayerDepth ( const Layer* layer );
    93  static inline const Layer* getRoutingLayer ( size_t );
    94  static inline const Layer* getContactLayer ( size_t );
    95  static unsigned int getDirection ( size_t depth );
    96  static inline DbU::Unit getPitch ( size_t depth, unsigned int flags );
    97  static inline DbU::Unit getOffset ( size_t depth );
    98  static inline DbU::Unit getWireWidth ( size_t depth );
    99  static inline DbU::Unit getViaWidth ( size_t depth );
    100  static inline unsigned int getDirection ( const Layer* );
    101  static inline DbU::Unit getPitch ( const Layer*, unsigned int flags );
    102  static inline DbU::Unit getOffset ( const Layer* );
    103  static inline DbU::Unit getWireWidth ( const Layer* );
    104  static inline DbU::Unit getViaWidth ( const Layer* );
    105  static inline DbU::Unit getExtensionCap ( const Layer* );
    106  static inline size_t getSegmentStackSize ();
    107  static inline size_t getContactStackSize ();
    108  static inline const vector<AutoSegment*>& getInvalidateds ();
    109  static inline const vector<AutoSegment*>& getRevalidateds ();
    110  static inline const set<AutoSegment*>& getDestroyeds ();
    111  static inline const vector<AutoSegment*>& getDoglegs ();
    112  static inline const set<Net*>& getNetsModificateds ();
    113  static Session* open ( KatabaticEngine* );
    114  static void close ();
    115  static void setKatabaticFlags ( unsigned int );
    116  static inline void dogleg ( AutoSegment* );
    117  static inline void doglegReset ();
    118  static inline void revalidateTopology ();
    119  static inline void setInvalidateMask ( unsigned int );
    120  static inline void invalidate ( Net* );
    121  static inline void invalidate ( AutoContact* );
    122  static inline void invalidate ( AutoSegment* );
    123  static inline size_t revalidate ();
    124  static void link ( AutoContact* );
    125  static void link ( AutoSegment* );
    126  static void unlink ( AutoContact* );
    127  static void unlink ( AutoSegment* );
    128  static AutoContact* lookup ( Contact* );
    129  static AutoSegment* lookup ( Segment* );
    130  static inline void destroyRequest ( AutoSegment* );
    131  // Methods.
    132  bool _doDestroyBaseContact ();
    133  bool _doDestroyBaseSegment ();
    134  bool _doDestroyTool ();
    135  virtual Configuration* _getConfiguration ();
    136  inline void _dogleg ( AutoSegment* );
    137  inline void _doglegReset ();
    138  void _invalidate ( Net* );
    139  inline void _invalidate ( AutoContact* );
    140  inline void _invalidate ( AutoSegment* );
    141  inline void _destroyRequest ( AutoSegment* );
    142  void _canonize ();
    143  void _revalidateTopology ();
    144  size_t _revalidate ();
    145  DbU::Unit _getPitch ( size_t depth, unsigned int flags ) const;
    146  Record* _getRecord () const;
    147  string _getString () const;
    148  inline string _getTypeName () const;
    149 
    150  protected:
    151  static Session* _session;
    152  KatabaticEngine* _katabatic;
    153  Technology* _technology;
    154  CellGauge* _cellGauge;
    155  RoutingGauge* _routingGauge;
    156  vector<AutoContact*> _autoContacts;
    157  vector<AutoSegment*> _doglegs;
    158  vector<AutoSegment*> _segmentInvalidateds;
    159  vector<AutoSegment*> _segmentRevalidateds;
    160  set<Net*> _netInvalidateds;
    161  set<Net*> _netRevalidateds;
    162  set<AutoSegment*> _destroyedSegments;
    163 
    164  // Constructors.
    165  protected:
    167  virtual ~Session ();
    168  virtual void _postCreate ();
    169  virtual void _preDestroy ();
    170  private:
    171  Session ( const Session& );
    172  Session& operator= ( const Session& );
    173  };
    174 
    175 
    176 // Inline Functions.
    177  inline Technology* Session::getTechnology () { return get("getTechnology()")->_technology; }
    178  inline CellGauge* Session::getCellGauge () { return get("getCellGauge()")->_cellGauge; }
    179  inline RoutingGauge* Session::getRoutingGauge () { return get("getRoutingGauge()")->_routingGauge; }
    180  inline bool Session::doDestroyBaseContact () { return get("doDestroyBaseContact()")->_doDestroyBaseContact(); }
    181  inline bool Session::doDestroyBaseSegment () { return get("doDestroyBaseSegment()")->_doDestroyBaseSegment(); }
    182  inline bool Session::doDestroyTool () { return get("doDestroyTool()")->_doDestroyTool(); }
    183  inline const Configuration* Session::getConfiguration () { return get("getConfiguration()")->_getConfiguration(); }
    184  inline KatabaticEngine* Session::getKatabatic () { return get("getKatabatic()")->_katabatic; }
    185  inline void Session::revalidateTopology () { return get("revalidateTopology()")->_revalidateTopology(); }
    186  inline size_t Session::revalidate () { return get("revalidate()")->_revalidate(); }
    187  inline size_t Session::getSegmentStackSize () { return get("getSegmentStackSize()")->_segmentInvalidateds.size(); }
    188  inline size_t Session::getContactStackSize () { return get("getContactStackSize()")->_autoContacts.size(); }
    189  inline const vector<AutoSegment*>& Session::getInvalidateds () { return get("getInvalidateds()")->_segmentInvalidateds; }
    190  inline const vector<AutoSegment*>& Session::getRevalidateds () { return get("getRevalidateds()")->_segmentRevalidateds; }
    191  inline const set<AutoSegment*>& Session::getDestroyeds () { return get("getDestroyeds()")->_destroyedSegments; }
    192  inline const vector<AutoSegment*>& Session::getDoglegs () { return get("getDoglegs()")->_doglegs; }
    193  inline const set<Net*>& Session::getNetsModificateds () { return get("getNetsModificateds()")->_netRevalidateds; }
    194  inline void Session::doglegReset () { return get("doglegReset()")->_doglegReset (); }
    195  inline void Session::invalidate ( Net* net ) { return get("invalidate(Net*)")->_invalidate(net); }
    196  inline void Session::invalidate ( AutoContact* autoContact ) { return get("invalidate(AutoContact*)")->_invalidate(autoContact); }
    197  inline void Session::invalidate ( AutoSegment* autoSegment ) { return get("invalidate(AutoSegment*)")->_invalidate(autoSegment); }
    198  inline void Session::dogleg ( AutoSegment* autoSegment ) { return get("dogleg(AutoSegment*)")->_dogleg(autoSegment); }
    199  inline void Session::destroyRequest ( AutoSegment* autoSegment ) { return get("destroyRequest(AutoSegment*)")->_destroyRequest(autoSegment); }
    200 
    201  inline size_t Session::getAllowedDepth () { return getConfiguration()->getAllowedDepth(); }
    202 
    203  inline DbU::Unit Session::getSliceHeight () { return getCellGauge()->getSliceHeight(); }
    204  inline DbU::Unit Session::getSliceStep () { return getCellGauge()->getSliceStep(); }
    205  inline RoutingLayerGauge* Session::getLayerGauge ( size_t depth ) { return getRoutingGauge()->getLayerGauge(depth); }
    206  inline size_t Session::getDepth () { return getRoutingGauge()->getDepth(); }
    207  inline size_t Session::getViaDepth ( const Layer* layer ) { return getRoutingGauge()->getViaDepth(layer); }
    208  inline size_t Session::getLayerDepth ( const Layer* layer ) { return getRoutingGauge()->getLayerDepth(layer); }
    209  inline const Layer* Session::getRoutingLayer ( size_t depth ) { return getRoutingGauge()->getRoutingLayer(depth); }
    210  inline const Layer* Session::getContactLayer ( size_t depth ) { return getRoutingGauge()->getContactLayer(depth); }
    211  inline DbU::Unit Session::getPitch ( size_t depth, unsigned int flags=Configuration::NoFlags ) { return get("getPitch(depth,flags)")->_getPitch( depth, flags ); }
    212  inline DbU::Unit Session::getOffset ( size_t depth ) { return getRoutingGauge()->getLayerOffset(depth); }
    213  inline DbU::Unit Session::getWireWidth ( size_t depth ) { return getRoutingGauge()->getLayerWireWidth(depth); }
    214  inline DbU::Unit Session::getViaWidth ( size_t depth ) { return getRoutingGauge()->getViaWidth(depth); }
    215  inline DbU::Unit Session::getPitch ( const Layer* layer, unsigned int flags=Configuration::NoFlags ) { return getPitch( getLayerDepth(layer), flags ); }
    216  inline DbU::Unit Session::getOffset ( const Layer* layer ) { return getOffset ( getLayerDepth(layer) ); }
    217  inline DbU::Unit Session::getWireWidth ( const Layer* layer ) { return getWireWidth( getLayerDepth(layer) ); }
    218  inline DbU::Unit Session::getViaWidth ( const Layer* layer ) { return getViaWidth ( getViaDepth(layer) ); }
    219  inline DbU::Unit Session::getExtensionCap ( const Layer* layer ) { return getConfiguration()->getExtensionCap(layer); }
    220  inline unsigned int Session::getDirection ( const Layer* layer ) { return getDirection( getLayerDepth(layer) ); }
    221 
    222  inline void Session::_dogleg ( AutoSegment* segment ) { _doglegs.push_back(segment); }
    223  inline void Session::_doglegReset () { _doglegs.clear(); }
    224  inline void Session::_invalidate ( AutoContact* contact ) { _autoContacts.push_back(contact); }
    225  inline void Session::_invalidate ( AutoSegment* segment ) { _segmentInvalidateds.push_back(segment); }
    226  inline void Session::_destroyRequest ( AutoSegment* segment ) { _destroyedSegments.insert(segment); }
    227  inline string Session::_getTypeName () const { return _TName("Session"); }
    228 
    229 
    230 } // Katabatic namespace.
    231 
    232 
    233 INSPECTOR_P_SUPPORT(Katabatic::Session);
    234 
    235 
    236 #endif // KATABATIC_SESSION_H
    static void revalidateTopology()
    Definition: Session.h:185
    -
    static const set< Net * > & getNetsModificateds()
    Definition: Session.h:193
    -
    static void close()
    Definition: Session.cpp:295
    -
    static size_t getSegmentStackSize()
    Definition: Session.h:187
    -
    static void link(AutoContact *)
    Definition: Session.cpp:368
    -
    static const vector< AutoSegment * > & getInvalidateds()
    Definition: Session.h:189
    -
    static const Layer * getContactLayer(size_t)
    Definition: Session.h:210
    - - -
    std::int64_t Unit
    - - -
    static const vector< AutoSegment * > & getRevalidateds()
    Definition: Session.h:190
    -
    Modification Session for Katabatic.
    Definition: Session.h:69
    -
    static AutoContact * lookup(Contact *)
    Definition: Session.cpp:384
    -
    Abstract base class for AutoSegment.
    Definition: AutoSegment.h:104
    -
    static DbU::Unit getExtensionCap()
    -
    static void dogleg(AutoSegment *)
    Definition: Session.h:198
    -
    Definition: LoadGrByNet.cpp:405
    -
    static float getSaturateRatio()
    Definition: Session.cpp:352
    -
    static RoutingGauge * getRoutingGauge()
    Definition: Session.h:179
    -
    static void setKatabaticFlags(unsigned int)
    Definition: Session.cpp:364
    -
    static void setInvalidateMask(unsigned int)
    -
    size_t getDepth() const
    -
    static KatabaticEngine * getKatabatic()
    Definition: Session.h:184
    -
    The namespace dedicated to Katabatic.
    Definition: Katabatic.dox:13
    -
    static size_t getSaturateRp()
    Definition: Session.cpp:356
    -
    static size_t getContactStackSize()
    Definition: Session.h:188
    -
    The Katabatic Tool.
    Definition: KatabaticEngine.h:91
    -
    RoutingLayerGauge * getLayerGauge(const Layer *) const
    -
    static bool isInDemoMode()
    Definition: Session.cpp:348
    - -
    static const Configuration * getConfiguration()
    Definition: Session.h:183
    - -
    static Technology * getTechnology()
    Definition: Session.h:177
    - -
    static void invalidate(Net *)
    Definition: Session.h:195
    -
    Layer * getContactLayer(size_t depth) const
    -
    static Session * open(KatabaticEngine *)
    Definition: Session.cpp:277
    -
    static void unlink(AutoContact *)
    Definition: Session.cpp:376
    -
    const Layer * getRoutingLayer(size_t depth) const
    - -
    static const Layer * getRoutingLayer(size_t)
    Definition: Session.h:209
    -
    Abstract base class for AutoContact.
    Definition: AutoContact.h:70
    -
    static const vector< AutoSegment * > & getDoglegs()
    Definition: Session.h:192
    - -
    size_t getLayerDepth(const Layer *) const
    -
    static bool doWarnGCellOverload()
    Definition: Session.cpp:360
    - - -
    static size_t revalidate()
    Definition: Session.h:186
    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/SoC.css b/deprecated/katabatic/doc/html/SoC.css deleted file mode 100644 index 14a78b58..00000000 --- a/deprecated/katabatic/doc/html/SoC.css +++ /dev/null @@ -1,882 +0,0 @@ - - -/* - * +-----------------------------------------------------------------+ - * | HTML Standart Tags | - * +-----------------------------------------------------------------+ - */ - - html, body, th, td, tr, p, li, h1, h2, h3, h4, h5, h6 { - font-size: 11pt; - /* The Open Sans font family is supplied by TexLive. */ - font-family: "Roboto", "Open Sans", Verdana, sans-serif;; - } - - html { - background: #dddddd; - } - - body { - color: black; - background: white; - background-color: white; - background-position: top left; - background-attachment: fixed; - background-repeat: no-repeat; - margin-top: 2em; - width: 600pt; - margin-right: auto; - margin-left: auto; - padding: 30pt; - /* - margin-right: 12%; - margin-left: 12%; - */ - } - - hr { - height: 1px; - border: 0; - color: #004400; - background-color: #004400; - } - - - h1, h2, h3, h4, h5, h6 { - /*font-family: "URW Bookman L", "Liberation Serif", sans-serif;*/ - font-family: "URW Bookman L"; - } - - h1.header { text-align: center; } - h1 { text-align: left; } - h2, h3, h4, h5, h6 { text-align: left; - padding-top: 11pt; - } - h1, h2, h3 { /*font-family: "Liberation Serif", sans-serif; */ - /*color: #09550B;*/ - } - h1 { font-weight: bold; font-size: 170%; /*letter-spacing:0.2em; word-spacing:0.4em;*/ } - h2 { font-weight: bold; font-size: 140%; /*letter-spacing:0.2em; word-spacing:0.4em;*/ } - h3 { font-weight: bold; font-size: 118%; /*letter-spacing:0.2em; word-spacing:0.4em;*/ } - h4 { font-weight: bold; font-size: 100%; } - h5 { font-style: italic; font-size: 100%; } - h6 { font-variant: small-caps; font-size: 100%; } - - h2.classHierarchy { - /*border: 1px none #008500;*/ - border: 1px none #000000; - border-top-width: 1px; - border-top-style: dotted; - padding-top: 1em; - } - - - .hide { - display: none; - color: white; - } - - - p { - margin-top: 0.6em; - margin-bottom: 0.6em; - margin-left: 0.0em; - margin-right: 0.0em; - } - - - address { - text-align: right; - font-weight: bold; - font-style: italic; - font-size: 80%; - } - - - caption { font-weight: bold } - - - blockquote { - margin-left: 4em; - margin-right: 4em; - margin-top: 0.8em; - margin-bottom: 0.8em; - font-style: italic; - color: #003300; - } - - blockquote p { - margin-bottom: 0; - } - - blockquote address { - margin: 0; - } - - - table { - border-collapse: collapse; - } - - dt, dd { margin-top: 0; margin-bottom: 0; } - dt { font-weight: bold; } - - - pre, tt, code { - /*font-family: "andale mono", monospace;*/ - font-size: 100%; - white-space: pre; - } - - pre { - font-size: 80%; - /*border: dashed;*/ - border-width: thin; - border-color: #003300; - /*background-color: #EEEEEE;*/ - background-color: #FCFCE1; - padding: 0.5em; - margin-left: 2em; - margin-right: 2em - } - -/* - tt { color: green; } - */ - em { font-style: italic; - font-weight: normal; } - strong { font-weight: bold; } - - span.textit { font-style: italic; } - span.textbf { font-weight: bold; } - - .small { font-size: 90%; } - .white { color: #FFFFFF; } - - - ul.toc { - list-style: disc; - list-style: none; - } - - - a:link img, a:visited img { border-style: none; } - a img { color: white; } - - a { - color: black; - border-bottom: 1px solid black; - text-decoration: none; - } - - a:link, a:active, a:visited { - /*color: #09550B;*/ - /*text-decoration: none;*/ - } - - a:hover, a:focus { - /*color: #FF9900; */ - border-bottom: 2px solid black; - } - - -/* - * +-----------------------------------------------------------------+ - * | Doxygen Specific Classes | - * +-----------------------------------------------------------------+ - */ - - -/* ------------------------------------------------------------------- - * Header & Footer Classes (customized top page navigation bar). - */ - - h1.header { - font-size: 200%; - /*font-family: times, verdana, sans-serif;*/ - } - - h2.memtitle { - display: none; - } - - center.header { - background-color: #CCE6CA; - } - - table.header { - /*width: 100%;*/ - /*background-color: #EEEEEE;*/ - background-color: #CCE6CA; - } - - div.header { - text-align: center; - margin: 14pt 0pt 0pt 0pt; - } - - div.summary { - color: white; - background-color: black; - border: 4px solid black; - } - - div.summary a { - font-size: 90%; - color: white; - padding: 2px 0px; - text-align: center; - background-color: black; - border-bottom: none; - } - - table.header td { - padding: 2px 14px; - text-align: center; - font-weight: bold; - /*font-family: verdana, sans-serif;*/ - font-size: 110%; - } - - table.UserDefined { - border: 1px solid; - } - - table.UserDefined th { - border: 1px solid; - } - - table.UserDefined td { - padding: 0px 5px; - } - - table.DoxUser td, table.DoxUser th { - padding: 0px 5px; - border: 0px; - } - - table.DoxUser th { - background-color: #CCE6CA; - } - - table.footer1, table.footer2 { width: 100%; } - td.LFooter { text-align: left; } - td.RFooter { text-align: right; } - td.CFooter { text-align: center;} - table.footer2 td.RFooter { font-weight: bold; width: 35% } - table.footer2 td.CFooter { width: 30% } - table.footer2 td.LFooter { font-weight: bold; width: 35%; /*font-family: time;*/ } - - table.classHierarchy { - border-collapse: separate; - border-spacing: 5px; - font-size: 110%; - } - - table.classHierarchy a { - border-style: none; - border-bottom: none; - } - - table.classHierarchy tr { - border: 1px solid blue; - } - - table.classHierarchy td.normal { - border: 1px solid #dddddd; - width: 140pt; - text-align: center; - font-weight: bold; - background-color: #dddddd; - } - - table.classHierarchy td.virtual { - border: 1px solid black; - width: 140pt; - text-align: center; - font-weight: bold; - } - - table.classHierarchy td.wnormal { - border: 1px solid #dddddd; - width: 240pt; - text-align: center; - font-weight: bold; - background-color: #dddddd; - } - - table.classHierarchy td.wvirtual { - border: 1px solid black; - width: 240pt; - text-align: center; - font-weight: bold; - } - - div.ah, span.ah { - font-family: Times; - font-size: 300%; - font-weight: bold; - padding: 20px; - } - - div.title { - text-align: center; - font-size: 200%; - font-weight: bold; - padding: 20px; - border: 2px solid black; - } - - div.center, div.image { - text-align: center; - } - - -/* ------------------------------------------------------------------- - * Top navigation lists. - */ - - span.mlabels { - font-size: 90%; - font-style: italic; - padding-left: 10pt; - margin: 10pt; - border-left: 1px solid black - } - - div.contents { - padding-top: 20pt; - } - - div.tabs { - border-top: 1px solid black; - } - - div.tabs, div.tabs1, div.tabs2, div.tabs3, div.tabs4 { - border-left: 1px solid black; - } - - ul.tablist { - /* - padding: 5pt; - background-color: red; - */ - margin: 0pt; - padding: 0pt; - border-top: none; - border-bottom: none; - border-left: none; - border-right: none; - } - - ul.tablist li { - /* - margin-left: auto; - margin-right: auto; - overflow: auto; - display: inline; - background-color: yellow; - */ - font-size: 90%; - border-top: none; - border-bottom: 1px solid black; - border-left: none; - border-right: 1px solid black; - display: table-cell; - text-align: center; - padding: 2pt; - width: 5%; - } - - ul.tablist li:hover { - background-color: black; - color: white; - } - - ul.tablist li:hover a { - background-color: black; - color: white; - } - - ul.tablist * a { border-bottom: none; } - - ul.tablist * a:link img, ul.tablist * a:visited img { border-style: none; border-bottom: none; } - - ul.tablist * a:link, ul.tablist * a:visited { - color: black; - text-decoration: none; - } - - ul.tablist * a:hover, ul.tablist * a:focus, ul.tablist * a:active { - color: white; - text-decoration: underline; - } - - div.navpath { - padding: 5pt 0pt 0pt 0pt; - } - - .navpath ul { - text-align: center; - } - - .navpath ul li { - display: inline; - list-style-type: none; - padding-left: 20px; - padding-right: 10px; - background-image: url('closed.png'); - background-repeat: no-repeat; - background-position: left; - color: #364D7C; - } - - .navpath ul li a { - border: 2px solid black; - padding-left: 10px; - padding-right: 10px; - font-weight: bold; - color: black; - } - - -/* ------------------------------------------------------------------- - * Quick Index Class (top page navigation bar). - */ - - div.qindex, div.nav { - width: 100%-4px; - /*background-color: #DADAEF;*/ - /*background-color: #eeeeff;*/ - background-color: #cccccc; - /*background-color: #CCE6CA;*/ - border: 0px solid #003300; - text-align: center; - margin: 0px; - padding: 2px; - line-height: 140%; - } - - a.qindex, a.qindex:visited, a.qindex:hover, a.qindexHL, a.el, a.elRef { - text-decoration: none; - /*font-family: Courier;*/ - font-weight: normal; - /*font-size: 110%;*/ - } - - a.qindex, a.qindex:visited { - /*color: #09550B;*/ - color: black; - border: 2px solid #cccccc; - padding: 2px 2px; - border-bottom: none; - } - - a.qindex:hover { - /*background-color: #ddddff;*/ - font-weight: bold; - padding: 2px 2px; - border: 2px solid black; - } - - a.qindexHL, a.qindexHL:hover, a.qindexHL:visited { - background-color: #0c780c; - color: #ffffff; - border: 1px double #9295C2; - } - - a.code:link, a.code:visited, a.codeRef:link, a.codeRef:visited { - text-decoration: none; - font-weight: normal; - color: #0000ff; - } - - .indexkey { - background-color: #eeeeff; - border: 1px solid #b0b0b0; - padding: 2px 15px; - } - - .indexkey, .indexvalue { - background-color: #eeeeff; - border: 1px solid #b0b0b0; - padding: 2px 15px; - } - - .indexkey { - width: 40%; - } - - .indexvalue { - width: 80%; - } - - h3 a[name="index__"], - h3 a[name="index_a"], - h3 a[name="index_b"], - h3 a[name="index_c"], - h3 a[name="index_d"], - h3 a[name="index_e"], - h3 a[name="index_f"], - h3 a[name="index_g"], - h3 a[name="index_h"], - h3 a[name="index_i"], - h3 a[name="index_j"], - h3 a[name="index_k"], - h3 a[name="index_l"], - h3 a[name="index_m"], - h3 a[name="index_n"], - h3 a[name="index_o"], - h3 a[name="index_p"], - h3 a[name="index_q"], - h3 a[name="index_r"], - h3 a[name="index_s"], - h3 a[name="index_t"], - h3 a[name="index_u"], - h3 a[name="index_v"], - h3 a[name="index_w"], - h3 a[name="index_x"], - h3 a[name="index_y"], - h3 a[name="index_z"], - h3 a[name="index_0"], - h3 a[name="index_1"], - h3 a[name="index_2"], - h3 a[name="index_3"], - h3 a[name="index_4"], - h3 a[name="index_5"], - h3 a[name="index_6"], - h3 a[name="index_7"], - h3 a[name="index_8"], - h3 a[name="index_9"] - h3 a[id="index__"], - h3 a#index_a, - h3 a#index_b, - h3 a#index_c, - h3 a#index_d, - h3 a#index_e, - h3 a#index_f, - h3 a#index_g, - h3 a#index_h, - h3 a#index_i, - h3 a#index_j, - h3 a#index_k, - h3 a#index_l, - h3 a#index_m, - h3 a#index_n, - h3 a#index_o, - h3 a#index_p, - h3 a#index_q, - h3 a#index_r, - h3 a#index_s, - h3 a#index_t, - h3 a#index_u, - h3 a#index_v, - h3 a#index_w, - h3 a#index_x, - h3 a#index_y, - h3 a#index_z, - h3 a#index_0, - h3 a#index_1, - h3 a#index_2, - h3 a#index_3, - h3 a#index_4, - h3 a#index_5, - h3 a#index_6, - h3 a#index_7, - h3 a#index_8, - h3 a#index_9, - h3 a#index_0x7e - { - font-family: time; - font-size: 250%; - text-align: center; - } - - -/* ------------------------------------------------------------------- - * Verbatim Source Code / Examples. - */ - - div.fragment { - font-family: "Roboto Mono", "Monospace"; - font-size: 80%; - border: none; - /*border-width: thin; */ - /*border-color: #003300;*/ - /*background-color: #FCFCE1;*/ - background-color: #fefefe; - padding: 0.5em; - margin-left: 5%; - margin-right: 5% - } - - div.fragment a.code:link, - div.fragment a.code:visited, - div.fragment a.codeRef:link, - div.fragment a.codeRef:visited { - text-decoration: none; - font-weight: bold; - color: black; - border: none; - } - - div.line { - white-space: pre; - padding: 0pt; - margin: 0pt; - } - - span.keyword { color: #008000 } - span.keywordtype { color: #604020 } - span.keywordflow { color: #e08000 } - span.comment { color: #800000 } - span.preprocessor { color: #806020 } - span.stringliteral { color: #002080 } - span.charliteral { color: #008080 } - span.red { color: red } - - -/* ------------------------------------------------------------------- - * Attributes Listing. - */ - - a.el, a.elRef { - font-family: "Roboto Mono", Courier; - font-weight: bold; - font-size: 110%; - color: black; - border-bottom: none; - } - - p.formulaDsp { - text-align: center; - } - - .mdTable { - /*border: 1px solid #868686;*/ - /*background-color: #DADAEF;*/ - /*background-color: #F4F4FB;*/ - border: 1px none #008500; - border-left-width: 1px; - border-left-style: solid; - /*background-color: #B8E6B8;*/ - /*background-color: #CCE6CA;*/ - margin-top: 25px; - font-size: 105%; - } - - .mdRow { - padding: 5px 10px; - } - - /* This Mozilla/Firefox bug has been corrected from v1.5. - * .mdname1 { - * padding: 3px 0px 0px 0px; - * } - */ - - .mdescLeft, .mdescRight { - padding: 0px 8px 4px 8px; - font-size: 11px; - font-style: italic; - /*background-color: #FAFAFA;*/ - border-top: 1px none #E0E0E0; - border-right: 1px none #E0E0E0; - border-bottom: 1px none #E0E0E0; - border-left: 1px none #E0E0E0; - margin: 0px; - } - - .memitem { - margin-bottom: 30px; - border: 1px none #008500; - } - - .memproto { - /*background-color: #CCE6CA;*/ - background-color: #cccccc; - border-left-width: 4px; - border-left-style: solid; - /*border-color: #008500;*/ - border-color: black; - } - - .memname { - white-space: nowrap; - padding-left: 5px; - font-size: 105%; - } - - table.memname * { - font-family: "Roboto Mono", "Monospace"; - } - - - .memdoc{ - padding-left: 5px; - /*margin-top: -8px;*/ - border-left-width: 1px; - border-left-style: solid; - /*border-color: #008500;*/ - border-color: black; - } - - div.contents * table tr { - padding: 3px 3px 3px 8px; - } - - .memSeparator { - font-size: 1pt; - } - - .memItemLeft, .memItemRight, .memTemplItemLeft, .memTemplItemRight { - vertical-align: top; - /*padding: 1px 0px 0px 8px;*/ - padding: 3px 3px 3px 8px; - margin: 4px; - border-top-width: 1px; - border-right-width: 1px; - border-bottom-width: 1px; - border-left-width: 1px; - /* - border-top-color: #0c0c0c; - border-right-color: #0c0c0c; - border-bottom-color: #0c0c0c; - border-left-color: #0c0c0c; - */ - border-top-style: none; - border-right-style: none; -/* - border-bottom-style: dotted; -*/ - border-left-style: none; - /*background-color: #DADAEF;*/ - /*background-color: #eeeeff;*/ - /*background-color: #EEEEEE;*/ - /*background-color: #CCE6CA;*/ - font-family: "Roboto Mono", "Monospace"; - } - - .memTemplItemLeft, .memTemplItemRight { - border-bottom-width: 2px; - border-bottom-style: solid; - font-weight: bold; - } - - .memItemLeft { font-size: 11px; width: 100pt; } - .memItemRight { font-size: 12px; } - .memTemplItemLeft { font-size: 11px; } - .memTemplItemRight { font-size: 12px; } - - .memTemplParams { - color: #FFFFFF; - background-color: #000000; - font-size: 11px; - font-weight: bold; - } - - .groupText, .groupHeader { - color: #09550B; - font-size: 130%; - font-weight: bold; - margin-top: 15px; - } - - .groupHeader { - margin-bottom: -30pt; - } - - .inherit { - display: none; - } - - -/* ------------------------------------------------------------------- - * General Classes Index. - */ - - span.icona { - margin-right: 10pt; - } - - div.toc li.level1 { - margin-left: 0px; - } - - div.toc li.level2 { - margin-left: 15px; - display: none; - } - - div.toc li.level3 { - margin-left: 30px; - display: none; - } - - div.toc li.level4 { - margin-left: 45px; - display: none; - } - - .directory .levels { - white-space: nowrap; - width: 100%; - text-align: right; - font-size: 9pt; - } - - .directory .levels span { - cursor: pointer; - padding-left: 2px; - padding-right: 2px; - color: #3D578C; - } - - - div.directory { - margin: 10px 0px; - border-top: 2px solid black; - border-bottom: 2px solid black; - width: 100%; - } - - .directory table { - border-collapse: collapse; - } - - .directory td { - margin: 0px; - padding: 0px; - vertical-align: top; - } - - .directory td.entry { - white-space: nowrap; - padding-right: 6px; - padding-top: 3px; - } - - .directory td.entry a { - outline: none; - } - - .directory td.entry a img { - border: none; - } - - .directory td.desc { - width: 100%; - padding-left: 6px; - padding-right: 6px; - padding-top: 3px; - border-left: 1px solid rgba(0,0,0,0.05); - } - - .directory tr.even { - padding-left: 6px; - background-color: #F7F8FB; - } - - .directory img { - vertical-align: -30%; - } diff --git a/deprecated/katabatic/doc/html/_do_1G_1M1.png b/deprecated/katabatic/doc/html/_do_1G_1M1.png deleted file mode 100644 index 9976be3f..00000000 Binary files a/deprecated/katabatic/doc/html/_do_1G_1M1.png and /dev/null differ diff --git a/deprecated/katabatic/doc/html/_do_1G_1M3.png b/deprecated/katabatic/doc/html/_do_1G_1M3.png deleted file mode 100644 index 8a822a03..00000000 Binary files a/deprecated/katabatic/doc/html/_do_1G_1M3.png and /dev/null differ diff --git a/deprecated/katabatic/doc/html/_do_1G_xM1.png b/deprecated/katabatic/doc/html/_do_1G_xM1.png deleted file mode 100644 index 2493e1ab..00000000 Binary files a/deprecated/katabatic/doc/html/_do_1G_xM1.png and /dev/null differ diff --git a/deprecated/katabatic/doc/html/_do_xG.png b/deprecated/katabatic/doc/html/_do_xG.png deleted file mode 100644 index 5bc48e8f..00000000 Binary files a/deprecated/katabatic/doc/html/_do_xG.png and /dev/null differ diff --git a/deprecated/katabatic/doc/html/_do_xG_1M1_1M2.png b/deprecated/katabatic/doc/html/_do_xG_1M1_1M2.png deleted file mode 100644 index 4f1f90a9..00000000 Binary files a/deprecated/katabatic/doc/html/_do_xG_1M1_1M2.png and /dev/null differ diff --git a/deprecated/katabatic/doc/html/_do_xG_xM1_xM3.png b/deprecated/katabatic/doc/html/_do_xG_xM1_xM3.png deleted file mode 100644 index 91fb380a..00000000 Binary files a/deprecated/katabatic/doc/html/_do_xG_xM1_xM3.png and /dev/null differ diff --git a/deprecated/katabatic/doc/html/_do_xG_xM2.png b/deprecated/katabatic/doc/html/_do_xG_xM2.png deleted file mode 100644 index 4554558e..00000000 Binary files a/deprecated/katabatic/doc/html/_do_xG_xM2.png and /dev/null differ diff --git a/deprecated/katabatic/doc/html/_do_xG_xM3.png b/deprecated/katabatic/doc/html/_do_xG_xM3.png deleted file mode 100644 index 4f581b39..00000000 Binary files a/deprecated/katabatic/doc/html/_do_xG_xM3.png and /dev/null differ diff --git a/deprecated/katabatic/doc/html/_makeDogleg-1.png b/deprecated/katabatic/doc/html/_makeDogleg-1.png deleted file mode 100644 index 608d87ab..00000000 Binary files a/deprecated/katabatic/doc/html/_makeDogleg-1.png and /dev/null differ diff --git a/deprecated/katabatic/doc/html/_makeDogleg-2.png b/deprecated/katabatic/doc/html/_makeDogleg-2.png deleted file mode 100644 index fb5704f6..00000000 Binary files a/deprecated/katabatic/doc/html/_makeDogleg-2.png and /dev/null differ diff --git a/deprecated/katabatic/doc/html/_makeDogleg-4.png b/deprecated/katabatic/doc/html/_makeDogleg-4.png deleted file mode 100644 index c7012631..00000000 Binary files a/deprecated/katabatic/doc/html/_makeDogleg-4.png and /dev/null differ diff --git a/deprecated/katabatic/doc/html/_slacken-1.png b/deprecated/katabatic/doc/html/_slacken-1.png deleted file mode 100644 index df3835c7..00000000 Binary files a/deprecated/katabatic/doc/html/_slacken-1.png and /dev/null differ diff --git a/deprecated/katabatic/doc/html/_slacken-2.png b/deprecated/katabatic/doc/html/_slacken-2.png deleted file mode 100644 index 8caad512..00000000 Binary files a/deprecated/katabatic/doc/html/_slacken-2.png and /dev/null differ diff --git a/deprecated/katabatic/doc/html/annotated.html b/deprecated/katabatic/doc/html/annotated.html deleted file mode 100644 index 7070d091..00000000 --- a/deprecated/katabatic/doc/html/annotated.html +++ /dev/null @@ -1,96 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -
    -
    Class List
    -
    -
    -
    Here are the classes, structs, unions and interfaces with brief descriptions:
    -
    [detail level 123]
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
     Nanonymous_namespace{LoadGrByNet.cpp}
     CGCellTopologyBuild the wiring for a Net inside a GCell (internal)
     NKatabaticThe namespace dedicated to Katabatic
     CAutoContactAbstract base class for AutoContact
     CAutoContactHTeeAutoContact H-Tee (two H, one V)
     CAutoContactTerminalAutoContact Terminal (S/T is a Terminal)
     CAutoContactTurnAutoContact Turn (one H, one V)
     CAutoContactVTeeAutoContact V-Tee (one H, two V)
     CAutoHorizontalConcrete Horizontal AutoSegment
     CAutoSegmentAbstract base class for AutoSegment
     CAutoSegments_AlignedsAll aligned AutoSegment of a set
     CAutoSegments_AnchorOnGCellAll AutoSegment Beginning and/or Stopping in a GCell
     CAutoSegments_InDirectionFilter to select AutoSegment in a given direction
     CAutoSegments_IsAccountableFilter to select accoutable AutoSegment
     CAutoSegments_OnContactAll AutoSegment anchored on a Contact
     CAutoSegments_PerpandicularsAll perpandicular AutoSegment to a set of aligneds
     CAutoVerticalConcrete Vertical AutoSegment
     CBaseGridAbstract Base Class for Irregular Grid
     CAxisGraduations on a BaseGrid Axis (H or V)
     CBaseObserverObserver Design Pattern, Observer part
     CChipToolsUtilities for Chip Level Design
     CGCellRouting Global Cell
     CCompareByDensityGCell Density Comparison Functor
     CCompareByIndexGCell Index Comparison Functor
     CKeyGCell Key - Density Cache
     CGCellDensitySetGCell Set, sorted by density
     CGCellGridGCell Grid
     CGridTemplate Class for Regular Grid
     CKatabaticEngineThe Katabatic Tool
     CLocatorHelperLocator Helper Collection's Locators
     CObservableObserver Design Pattern, Subject part
     CObserverObserver Design Pattern, Observer part
     CSessionModification Session for Katabatic
    -
    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/annotated.js b/deprecated/katabatic/doc/html/annotated.js deleted file mode 100644 index f50ea705..00000000 --- a/deprecated/katabatic/doc/html/annotated.js +++ /dev/null @@ -1,10 +0,0 @@ -var annotated = -[ - [ "anonymous_namespace{AutoSegment.cpp}", "namespaceanonymous__namespace_02AutoSegment_8cpp_03.html", null ], - [ "anonymous_namespace{ChipTools.cpp}", "namespaceanonymous__namespace_02ChipTools_8cpp_03.html", null ], - [ "anonymous_namespace{GCell.cpp}", "namespaceanonymous__namespace_02GCell_8cpp_03.html", null ], - [ "anonymous_namespace{KatabaticEngine.cpp}", "namespaceanonymous__namespace_02KatabaticEngine_8cpp_03.html", null ], - [ "anonymous_namespace{LoadGrByNet.cpp}", "namespaceanonymous__namespace_02LoadGrByNet_8cpp_03.html", "namespaceanonymous__namespace_02LoadGrByNet_8cpp_03" ], - [ "anonymous_namespace{Session.cpp}", "namespaceanonymous__namespace_02Session_8cpp_03.html", null ], - [ "Katabatic", "namespaceKatabatic.html", "namespaceKatabatic" ] -]; \ No newline at end of file diff --git a/deprecated/katabatic/doc/html/bc_s.png b/deprecated/katabatic/doc/html/bc_s.png deleted file mode 100644 index 224b29aa..00000000 Binary files a/deprecated/katabatic/doc/html/bc_s.png and /dev/null differ diff --git a/deprecated/katabatic/doc/html/bdwn.png b/deprecated/katabatic/doc/html/bdwn.png deleted file mode 100644 index 940a0b95..00000000 Binary files a/deprecated/katabatic/doc/html/bdwn.png and /dev/null differ diff --git a/deprecated/katabatic/doc/html/checkRoutingPadSize.png b/deprecated/katabatic/doc/html/checkRoutingPadSize.png deleted file mode 100644 index a5a7dc77..00000000 Binary files a/deprecated/katabatic/doc/html/checkRoutingPadSize.png and /dev/null differ diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoContact-members.html b/deprecated/katabatic/doc/html/classKatabatic_1_1AutoContact-members.html deleted file mode 100644 index 6b964ac6..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoContact-members.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - - -
    -
    -
    AutoContact Member List
    -
    -
    - -

    This is the complete list of members for AutoContact, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    _getTopology(Contact *, Component *&anchor, Horizontal **&, Vertical **&, size_t)AutoContactprotectedstatic
    base() constAutoContactinline
    canDestroy(unsigned int flags=0) constAutoContact
    canMoveUp(const AutoSegment *moved) constAutoContact
    checkTopology()AutoContactvirtual
    getAllocateds()AutoContactstatic
    getAnchor() constAutoContactinline
    getAnchorHook()AutoContactinline
    getBodyHook()AutoContactinline
    getBoundingBox() constAutoContactvirtual
    getCBXMax() constAutoContactinline
    getCBXMin() constAutoContactinline
    getCBYMax() constAutoContactinline
    getCBYMin() constAutoContactinline
    getCenter() constAutoContactinline
    getConstraintBox() constAutoContactinline
    getDx() constAutoContactinline
    getDy() constAutoContactinline
    getGCell() constAutoContactinline
    getHalfHeight() constAutoContactinline
    getHalfWidth() constAutoContactinline
    getHeight() constAutoContactinline
    getId() constAutoContactinline
    getLayer() constAutoContactinline
    getLengths(DbU::Unit *lengths, AutoSegment::DepthLengthSet &)AutoContact
    getMaxDepth() constAutoContact
    getMinDepth() constAutoContact
    getName() constAutoContactvirtual
    getNativeConstraintBox() constAutoContactvirtual
    getNet() constAutoContactinline
    getOpposite(const AutoSegment *) const =0AutoContactpure virtual
    getPerpandicular(const AutoSegment *) const =0AutoContactpure virtual
    getPosition() constAutoContactinline
    getSegment(unsigned int) const =0AutoContactpure virtual
    getSlaveComponents() constAutoContactinline
    getStaticName()AutoContactstatic
    getUConstraints(unsigned int direction) constAutoContact
    getWidth() constAutoContactinline
    getX() constAutoContactinline
    getY() constAutoContactinline
    hasBadTopology() constAutoContactinline
    intersectConstraintBox(Box &box) constAutoContact
    invalidate(unsigned int flags=0)AutoContact
    isFixed() constAutoContactinline
    isHTee() constAutoContactinline
    isInCreationStage() constAutoContactinline
    isInvalidated() constAutoContactinline
    isInvalidatedCache() constAutoContactinline
    isTee(unsigned int direction) constAutoContact
    isTurn() constAutoContactinline
    isVTee() constAutoContactinline
    migrateConstraintBox(AutoContact *other)AutoContact
    restrictConstraintBox(DbU::Unit constraintMin, DbU::Unit constraintMax, unsigned int flags=KbWarnOnError)AutoContact
    setCBXMax(DbU::Unit xMax)AutoContactinline
    setCBXMin(DbU::Unit xMin)AutoContactinline
    setCBYMax(DbU::Unit yMax)AutoContactinline
    setCBYMin(DbU::Unit yMin)AutoContactinline
    setConstraintBox(const Box &box)AutoContact
    setDx(DbU::Unit)AutoContactinline
    setDy(DbU::Unit)AutoContactinline
    setGCell(GCell *)AutoContact
    setHeight(DbU::Unit)AutoContactinline
    setLayer(const Layer *)AutoContactinline
    setOffset(DbU::Unit dx, DbU::Unit dy)AutoContactinline
    setPosition(DbU::Unit width, DbU::Unit height)AutoContactinline
    setPosition(const Point &)AutoContactinline
    setSizes(DbU::Unit width, DbU::Unit height)AutoContactinline
    setWidth(DbU::Unit)AutoContactinline
    setX(DbU::Unit)AutoContactinline
    setY(DbU::Unit)AutoContactinline
    showTopologyError(const std::string &, unsigned int flags=0)AutoContact
    translate(const DbU::Unit &tx, const DbU::Unit &ty)AutoContactvirtual
    updateGeometry()=0AutoContactpure virtual
    updateTopology()=0AutoContactpure virtual
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoContact.html b/deprecated/katabatic/doc/html/classKatabatic_1_1AutoContact.html deleted file mode 100644 index a4c1e904..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoContact.html +++ /dev/null @@ -1,2447 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - - - -
    - -

    Abstract base class for AutoContact. - More...

    -
    -Inheritance diagram for AutoContact:
    -
    -
    Inheritance graph
    - - - - - - -
    [legend]
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    HookgetBodyHook ()
     
    HookgetAnchorHook ()
     
    ComponentgetAnchor () const
     
    NetgetNet () const
     
    const LayergetLayer () const
     
    DbU::Unit getX () const
     
    DbU::Unit getY () const
     
    DbU::Unit getDx () const
     
    DbU::Unit getDy () const
     
    Point getCenter () const
     
    Point getPosition () const
     
    DbU::Unit getWidth () const
     
    DbU::Unit getHalfWidth () const
     
    DbU::Unit getHeight () const
     
    DbU::Unit getHalfHeight () const
     
    Components getSlaveComponents () const
     
    void setLayer (const Layer *)
     
    void setWidth (DbU::Unit)
     
    void setHeight (DbU::Unit)
     
    void setSizes (DbU::Unit width, DbU::Unit height)
     
    void setX (DbU::Unit)
     
    void setY (DbU::Unit)
     
    void setPosition (DbU::Unit width, DbU::Unit height)
     
    void setPosition (const Point &)
     
    void setDx (DbU::Unit)
     
    void setDy (DbU::Unit)
     
    void setOffset (DbU::Unit dx, DbU::Unit dy)
     
    virtual void translate (const DbU::Unit &tx, const DbU::Unit &ty)
     
    bool isInCreationStage () const
     
    bool isInvalidated () const
     
    bool isInvalidatedCache () const
     
    bool isTurn () const
     
    bool isTee (unsigned int direction) const
     
    bool isHTee () const
     
    bool isVTee () const
     
    bool isFixed () const
     
    bool hasBadTopology () const
     
    bool canDestroy (unsigned int flags=0) const
     
    bool canMoveUp (const AutoSegment *moved) const
     
    Contactbase () const
     
    virtual const NamegetName () const
     
    size_t getId () const
     
    virtual Box getBoundingBox () const
     
    GCellgetGCell () const
     
    virtual AutoSegmentgetOpposite (const AutoSegment *) const =0
     
    virtual AutoSegmentgetPerpandicular (const AutoSegment *) const =0
     
    virtual AutoSegmentgetSegment (unsigned int) const =0
     
    unsigned int getMinDepth () const
     
    unsigned int getMaxDepth () const
     
    void getLengths (DbU::Unit *lengths, AutoSegment::DepthLengthSet &)
     
    virtual Box getNativeConstraintBox () const
     
    Interval getUConstraints (unsigned int direction) const
     
    DbU::Unit getCBXMin () const
     
    DbU::Unit getCBXMax () const
     
    DbU::Unit getCBYMin () const
     
    DbU::Unit getCBYMax () const
     
    Box getConstraintBox () const
     
    BoxintersectConstraintBox (Box &box) const
     
    void invalidate (unsigned int flags=0)
     
    virtual void updateGeometry ()=0
     
    virtual void updateTopology ()=0
     
    void showTopologyError (const std::string &, unsigned int flags=0)
     
    virtual void checkTopology ()
     
    void setGCell (GCell *)
     
    void setCBXMin (DbU::Unit xMin)
     
    void setCBXMax (DbU::Unit xMax)
     
    void setCBYMin (DbU::Unit yMin)
     
    void setCBYMax (DbU::Unit yMax)
     
    void setConstraintBox (const Box &box)
     
    bool restrictConstraintBox (DbU::Unit constraintMin, DbU::Unit constraintMax, unsigned int flags=KbWarnOnError)
     
    void migrateConstraintBox (AutoContact *other)
     
    - - - - - -

    -Static Public Member Functions

    static size_t getAllocateds ()
     
    static const NamegetStaticName ()
     
    - - - -

    -Static Protected Member Functions

    static void _getTopology (Contact *, Component *&anchor, Horizontal **&, Vertical **&, size_t)
     
    -

    Detailed Description

    -

    Abstract base class for AutoContact.

    -

    -Caching Mechanism

    -

    To bypass the Ring/Hook mechanism and the subsequent Session::Lookup() call, the AutoSegments anchored on an AutoContact are cached in the AutoContact itself. They can be accessed through getHorizontalN() and getVerticalN() accessors N depending on the subtype of AutoContact.

    -

    Cached AutoSegments are updated in the AutoContact::updateTopology() function only.

    -

    -Invalidate on AutoContacts

    -

    The invalidation of an AutoContact invalidate all the segments that are anchored on it.

    -

    Special Case of HTee & VTee

    -

    When invalidating an HTee or VTee, two out of the three anchored segments are parallels. The aligned constraint is passed on those two. By default, when we invalidate an AutoSegment, the invalidation is applied to the whole aligned set through the AutoSegment::getAligneds() collection. So if one of the parallel is invalidated and the other not, it should only be because we are already in getAligneds(), then we do not want to invalidate again the whole aligned set. In that case, we perform an atomic only invalidation (reset Katabatic::KbPropagate).

    -

    For the complete invalidation/revalidation mechanism see Session Algorithm.

    -

    -Notes - Differences from Katabatic 2

    -

    From the previous version of Katabatic, AutoContact have been greatly stripped down (again). They are now always punctual objetcs with stricly fixed topologies:

    -

    Member Function Documentation

    - -

    ◆ getBodyHook()

    - -
    -
    - - - - - -
    - - - - - - - -
    Hook * getBodyHook ()
    -
    -inline
    -
    -

    Base class method proxy.

    - -

    References Component::getBodyHook().

    - -

    Referenced by GCellTopology::_do_xG_1Pad(), and AutoSegment::create().

    - -
    -
    - -

    ◆ getAnchorHook()

    - -
    -
    - - - - - -
    - - - - - - - -
    Hook * getAnchorHook ()
    -
    -inline
    -
    -

    Base class method proxy.

    - -

    References Contact::getAnchorHook().

    - -
    -
    - -

    ◆ getAnchor()

    - -
    -
    - - - - - -
    - - - - - - - -
    Component * getAnchor () const
    -
    -inline
    -
    -

    Base class method proxy.

    - -

    References Contact::getAnchor().

    - -

    Referenced by AutoContactTerminal::getNativeConstraintBox(), and AutoContactTerminal::updateTopology().

    - -
    -
    - -

    ◆ getNet()

    - - - -

    ◆ getLayer()

    - -
    -
    - - - - - -
    - - - - - - - -
    const Layer * getLayer () const
    -
    -inline
    -
    -
    - -

    ◆ getX()

    - - - -

    ◆ getY()

    - -
    -
    - - - - - -
    - - - - - - - -
    DbU::Unit getY () const
    -
    -inline
    -
    -
    - -

    ◆ getDx()

    - -
    -
    - - - - - -
    - - - - - - - -
    DbU::Unit getDx () const
    -
    -inline
    -
    -

    Base class method proxy.

    - -

    References Contact::getDx().

    - -
    -
    - -

    ◆ getDy()

    - -
    -
    - - - - - -
    - - - - - - - -
    DbU::Unit getDy () const
    -
    -inline
    -
    -

    Base class method proxy.

    - -

    References Contact::getDy().

    - -
    -
    - -

    ◆ getCenter()

    - -
    -
    - - - - - -
    - - - - - - - -
    Point getCenter () const
    -
    -inline
    -
    -

    Base class method proxy.

    - -
    -
    - -

    ◆ getPosition()

    - -
    -
    - - - - - -
    - - - - - - - -
    Point getPosition () const
    -
    -inline
    -
    -

    Base class method proxy.

    - -

    References Component::getPosition().

    - -
    -
    - -

    ◆ getWidth()

    - -
    -
    - - - - - -
    - - - - - - - -
    DbU::Unit getWidth () const
    -
    -inline
    -
    -

    Base class method proxy.

    - -

    References Contact::getWidth().

    - -
    -
    - -

    ◆ getHalfWidth()

    - -
    -
    - - - - - -
    - - - - - - - -
    DbU::Unit getHalfWidth () const
    -
    -inline
    -
    -

    Base class method proxy.

    - -

    References Contact::getHalfWidth().

    - -
    -
    - -

    ◆ getHeight()

    - -
    -
    - - - - - -
    - - - - - - - -
    DbU::Unit getHeight () const
    -
    -inline
    -
    -

    Base class method proxy.

    - -

    References Contact::getHeight().

    - -
    -
    - -

    ◆ getHalfHeight()

    - -
    -
    - - - - - -
    - - - - - - - -
    DbU::Unit getHalfHeight () const
    -
    -inline
    -
    -

    Base class method proxy.

    - -

    References Contact::getHalfHeight().

    - -
    -
    - -

    ◆ getSlaveComponents()

    - -
    -
    - - - - - -
    - - - - - - - -
    Components getSlaveComponents () const
    -
    -inline
    -
    -

    Base class method proxy.

    - -

    References Component::getSlaveComponents().

    - -
    -
    - -

    ◆ setLayer()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void setLayer (const Layerlayer)
    -
    -inline
    -
    -
    - -

    ◆ setWidth()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void setWidth (DbU::Unit w)
    -
    -inline
    -
    -

    Base class method proxy.

    - -

    References Contact::setWidth().

    - -
    -
    - -

    ◆ setHeight()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void setHeight (DbU::Unit h)
    -
    -inline
    -
    -

    Base class method proxy.

    - -

    References Contact::setHeight().

    - -
    -
    - -

    ◆ setSizes()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void setSizes (DbU::Unit w,
    DbU::Unit h 
    )
    -
    -inline
    -
    -

    Base class method proxy.

    - -

    References Contact::setSizes().

    - -
    -
    - -

    ◆ setX()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void setX (DbU::Unit x)
    -
    -inline
    -
    -
    - -

    ◆ setY()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void setY (DbU::Unit y)
    -
    -inline
    -
    -
    - -

    ◆ setPosition() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void setPosition (DbU::Unit w,
    DbU::Unit h 
    )
    -
    -inline
    -
    -

    Base class method proxy.

    - -

    References Contact::setPosition().

    - -
    -
    - -

    ◆ setPosition() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - -
    void setPosition (const Pointp)
    -
    -inline
    -
    -

    Base class method proxy.

    - -

    References Contact::setPosition().

    - -
    -
    - -

    ◆ setDx()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void setDx (DbU::Unit dx)
    -
    -inline
    -
    -

    Base class method proxy.

    - -

    References Contact::setDx().

    - -
    -
    - -

    ◆ setDy()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void setDy (DbU::Unit dy)
    -
    -inline
    -
    -

    Base class method proxy.

    - -

    References Contact::setDy().

    - -
    -
    - -

    ◆ setOffset()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void setOffset (DbU::Unit w,
    DbU::Unit h 
    )
    -
    -inline
    -
    -

    Base class method proxy.

    - -

    References Contact::setOffset().

    - -
    -
    - -

    ◆ translate()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void translate (const DbU::Unitdx,
    const DbU::Unitdy 
    )
    -
    -virtual
    -
    -

    Base class method proxy.

    - -
    -
    - -

    ◆ isInCreationStage()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool isInCreationStage () const
    -
    -inline
    -
    -

    Returns: true if the AutoContact is still in it's initial creation stage.

    - -

    References Katabatic::CntInCreationStage.

    - -
    -
    - -

    ◆ isInvalidated()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool isInvalidated () const
    -
    -inline
    -
    -

    Returns: true if the some AutoSegment has changed and the AutoContact needs to be repositionned (through a call to AutoContact::updateGeometry()).

    - -

    References Katabatic::CntInvalidated.

    - -
    -
    - -

    ◆ isInvalidatedCache()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool isInvalidatedCache () const
    -
    -inline
    -
    -
    - -

    ◆ isTurn()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool isTurn () const
    -
    -inline
    -
    -

    Returns: true if the dynamic type of the AutoContact is of type Turn.

    - -

    References Katabatic::CntTurn.

    - -

    Referenced by AutoSegment::canReduce(), and AutoSegment::revalidate().

    - -
    -
    - -

    ◆ isTee()

    - -
    -
    - - - - - - - - -
    bool isTee (unsigned int direction) const
    -
    -

    Returns: true if the dynamic type of the AutoContact is either of type AutoContactHTee or AutoContactVTee, according to direction.

    - -

    References Katabatic::KbHorizontal, and Katabatic::KbVertical.

    - -
    -
    - -

    ◆ isHTee()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool isHTee () const
    -
    -inline
    -
    -

    Returns: true if the dynamic type of the AutoContact is of type AutoContactHTee.

    - -

    References Katabatic::CntHTee.

    - -
    -
    - -

    ◆ isVTee()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool isVTee () const
    -
    -inline
    -
    -

    Returns: true if the dynamic type of the AutoContact is of type AutoContactHTee.

    - -

    References Katabatic::CntVTee.

    - -
    -
    - -

    ◆ isFixed()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool isFixed () const
    -
    -inline
    -
    -
    - -

    ◆ hasBadTopology()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool hasBadTopology () const
    -
    -inline
    -
    -
    - -

    ◆ canDestroy()

    - -
    -
    - - - - - - - - -
    bool canDestroy (unsigned int flags = 0) const
    -
    -

    Returns: true if the AutoContact could be destroyed, that is, no segments remains anchored on it. If flags contains Katabatic::KbWarnOnError, issue an error message.

    - -

    References Katabatic::KbWarnOnError.

    - -
    -
    - -

    ◆ canMoveUp()

    - -
    -
    - - - - - - - - -
    bool canMoveUp (const AutoSegmentmoved) const
    -
    -

    Returns: true if segment can be moved up without triggering a topological modification. It meaans that:

    - -

    References Component::getLayer(), AutoSegment::getLayer(), and RoutingGauge::getLayerDepth().

    - -
    -
    - -

    ◆ base()

    - - - -

    ◆ getAllocateds()

    - -
    -
    - - - - - -
    - - - - - - - -
    size_t getAllocateds ()
    -
    -static
    -
    -

    Returns: The total number of AutoContact currently allocateds.

    - -
    -
    - -

    ◆ getStaticName()

    - -
    -
    - - - - - -
    - - - - - - - -
    const Name & getStaticName ()
    -
    -static
    -
    -

    Returns: The name of the Hurricane::ExtensionGo slice.

    - -
    -
    - -

    ◆ getName()

    - -
    -
    - - - - - -
    - - - - - - - -
    const Name & getName () const
    -
    -virtual
    -
    -

    Returns: The name of the Hurricane::ExtensionGo slice.

    - -
    -
    - -

    ◆ getId()

    - -
    -
    - - - - - -
    - - - - - - - -
    const Name & getId () const
    -
    -inline
    -
    -

    Returns: The unique identifer of the AutoSegment.

    - -
    -
    - -

    ◆ getBoundingBox()

    - -
    -
    - - - - - -
    - - - - - - - -
    Box getBoundingBox () const
    -
    -virtual
    -
    -
    - -

    ◆ getGCell()

    - - - -

    ◆ getOpposite()

    - -
    -
    - - - - - -
    - - - - - - - - -
    AutoSegment * getOpposite (const AutoSegmentreference) const
    -
    -pure virtual
    -
    -

    Returns: The other AutoSegment the same direction as reference, this is only meaningful on AutoContactHTee or AutoContactVTee. If there is no opposite, NULL is returned.

    - -

    Implemented in AutoContactTerminal, AutoContactHTee, AutoContactTurn, and AutoContactVTee.

    - -
    -
    - -

    ◆ getPerpandicular()

    - -
    -
    - - - - - -
    - - - - - - - - -
    AutoSegment * getPerpandicular (const AutoSegmentreference) const
    -
    -pure virtual
    -
    -

    Returns: The AutoSegment in the perpandicular direction to reference, this is only meaningful on AutoContacTurn. It there is no unique perpandicular, NULL is returned.

    - -

    Implemented in AutoContactTerminal, AutoContactHTee, AutoContactTurn, and AutoContactVTee.

    - -

    Referenced by AutoSegment::raise(), AutoSegment::reduce(), and AutoSegment::revalidate().

    - -
    -
    - -

    ◆ getSegment()

    - -
    -
    - - - - - -
    - - - - - - - - -
    AutoSegment * getSegment (unsigned int index) const
    -
    -pure virtual
    -
    -

    Returns: The nth anchored AutoSegment. The index is significant:

      -
    • 0 : first horizontal (h1).
    • -
    • 1 : second horizontal (h2).
    • -
    • 2 : first vertical (b1).
    • -
    • 3 : second vertical (b2).
    • -
    -

    Not all the indexes are filled for every AutoContact. For example Turn have h1 and b1, and HTee have h1, h2 and v1.

    - -

    Implemented in AutoContactTerminal, AutoContactHTee, AutoContactTurn, and AutoContactVTee.

    - -

    Referenced by AutoHorizontal::canMoveULeft(), AutoVertical::canMoveULeft(), AutoHorizontal::canMoveURight(), AutoVertical::canMoveURight(), LocatorHelper::getSegment(), LocatorHelper::LocatorHelper(), AutoHorizontal::moveULeft(), AutoVertical::moveULeft(), AutoHorizontal::moveURight(), AutoVertical::moveURight(), and LocatorHelper::progress().

    - -
    -
    - -

    ◆ getMinDepth()

    - -
    -
    - - - - - - - -
    unsigned int getMinDepth () const
    -
    -

    Returns: The layer depth of the bottom layer of the AutoContact.

    - -

    References Component::getLayer().

    - -

    Referenced by AutoSegment::canPivotUp().

    - -
    -
    - -

    ◆ getMaxDepth()

    - -
    -
    - - - - - - - -
    unsigned int getMaxDepth () const
    -
    -

    Returns: The layer depth of the top layer of the AutoContact.

    - -

    References Component::getLayer().

    - -

    Referenced by AutoSegment::canPivotDown().

    - -
    -
    - -

    ◆ getLengths()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void getLengths (DbU::Unitlengths,
    AutoSegment::DepthLengthSet & processeds 
    )
    -
    -
    Parameters
    - - - -
    lengthsA table of DbU::Unit, the size of all routing layers used.
    processedsAn AutoSegment sorted set holding all the already processeds AutoSegments.
    -
    -
    -

    Compute the lengths over the owning GCell of all the AutoSegments anchored on this AutoContact. The lengths are added to the total length table lengths. To avoid double accounting of the local AutoSegments that have both source & target in the same GCell, we keep a set of already processeds AutoSegments in processeds.

    - -

    References Katabatic::KbHorizontal, Katabatic::KbVertical, and toLambda().

    - -
    -
    - -

    ◆ getNativeConstraintBox()

    - -
    -
    - - - - - -
    - - - - - - - -
    Box getNativeConstraintBox () const
    -
    -virtual
    -
    -

    Returns: The native constraint box (that is, whithout any user constraints applied). For AutoContactTerminal, this is the Box of the supporting external component, and for all others the bounding box of the owning GCell.

    - -

    Reimplemented in AutoContactTerminal.

    - -
    -
    - -

    ◆ getUConstraints()

    - -
    -
    - - - - - - - - -
    Interval getUConstraints (unsigned int direction) const
    -
    -

    Returns: The constraint interval in direction (that is, the relevant side of the constraint box).

    - -

    References Interval::inflate(), and Katabatic::KbHorizontal.

    - -

    Referenced by AutoContactTerminal::updateGeometry().

    - -
    -
    - -

    ◆ getCBXMin()

    - -
    -
    - - - - - -
    - - - - - - - -
    DbU::Unit getCBXMin () const
    -
    -inline
    -
    -

    Returns: The X coordinate of the bottom left corner of the constraint box.

    - -

    References DbU::fromLambda(), Component::getX(), GCell::getX(), and AutoContact::isFixed().

    - -

    Referenced by AutoContact::getConstraintBox(), and AutoVertical::getConstraints().

    - -
    -
    - -

    ◆ getCBXMax()

    - -
    -
    - - - - - -
    - - - - - - - -
    DbU::Unit getCBXMax () const
    -
    -inline
    -
    -

    Returns: The X coordinate of the top right corner of the constraint box.

    - -

    References DbU::fromLambda(), Component::getX(), GCell::getX(), and AutoContact::isFixed().

    - -

    Referenced by AutoContact::getConstraintBox(), and AutoVertical::getConstraints().

    - -
    -
    - -

    ◆ getCBYMin()

    - -
    -
    - - - - - -
    - - - - - - - -
    DbU::Unit getCBYMin () const
    -
    -inline
    -
    -

    Returns: The Y coordinate of the bottom left corner of the constraint box.

    - -

    References DbU::fromLambda(), Component::getY(), GCell::getY(), and AutoContact::isFixed().

    - -

    Referenced by AutoContact::getConstraintBox(), and AutoHorizontal::getConstraints().

    - -
    -
    - -

    ◆ getCBYMax()

    - -
    -
    - - - - - -
    - - - - - - - -
    DbU::Unit getCBYMax () const
    -
    -inline
    -
    -

    Returns: The Y coordinate of the top right corner of the constraint box.

    - -

    References DbU::fromLambda(), Component::getY(), GCell::getY(), and AutoContact::isFixed().

    - -

    Referenced by AutoContact::getConstraintBox(), and AutoHorizontal::getConstraints().

    - -
    -
    - -

    ◆ getConstraintBox()

    - -
    -
    - - - - - -
    - - - - - - - -
    Box getConstraintBox () const
    -
    -inline
    -
    -

    Returns: The current constraint box: the native constraint box with all the user's contraints applieds.

    - -

    References AutoContact::getCBXMax(), AutoContact::getCBXMin(), AutoContact::getCBYMax(), and AutoContact::getCBYMin().

    - -

    Referenced by AutoSegment::computeOptimal(), and AutoContact::migrateConstraintBox().

    - -
    -
    - -

    ◆ intersectConstraintBox()

    - -
    -
    - - - - - - - - -
    Box & intersectConstraintBox (Boxbox) const
    -
    -

    Returns: The intersection between box and the constraint box. The result is stored into box and a reference to it is returned.

    - -

    References Box::getIntersection().

    - -
    -
    - -

    ◆ invalidate()

    - -
    -
    - - - - - - - - -
    void invalidate (unsigned int flags = 0)
    -
    -

    Invalidate the AutoContact, schedule it for revalidation in the Session. If flag containt Katabatic::CntInvalidTopology, the topology of the AutoContact will also be checked and possible gap closeds.

    -

    The revalidations methods associated are:

      -
    • AutoSegment::updateGeometry(), recompute the punctual contact position.
    • -
    • AutoSegment::updateTopology(), restore the connexity.
    • -
    - -

    References Katabatic::CntInvalidated, and Katabatic::CntInvalidatedCache.

    - -

    Referenced by AutoHorizontal::_makeDogleg(), AutoVertical::_makeDogleg(), and AutoSegment::AutoSegment().

    - -
    -
    - -

    ◆ updateGeometry()

    - -
    -
    - - - - - -
    - - - - - - - -
    void updateGeometry ()
    -
    -pure virtual
    -
    -

    Compute the new position of the AutoContact based on the AutoSegment positions. The Session mechanism ensure that all AutoSegment are set into their final positions before calling this updator.

    - -

    Implemented in AutoContactTerminal, AutoContactHTee, AutoContactTurn, and AutoContactVTee.

    - -
    -
    - -

    ◆ updateTopology()

    - -
    -
    - - - - - -
    - - - - - - - -
    void updateTopology ()
    -
    -pure virtual
    -
    -

    Modificate the AutoContact topology to close any gap. This could be by changing layer or creating a new dogleg on an incident AutoSegment.

    - -

    Implemented in AutoContactTerminal, AutoContactHTee, AutoContactTurn, and AutoContactVTee.

    - -
    -
    - -

    ◆ showTopologyError()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void showTopologyError (const std::string & message,
    unsigned int flags = 0 
    )
    -
    -

    Comprensive display of the topology of the AutoContact to ease the debug work. Prepend with the error message message. Do no throw an error.

    - -

    References AutoSegment::isGlobal().

    - -

    Referenced by AutoContactTerminal::updateGeometry(), AutoContactVTee::updateTopology(), AutoContactTurn::updateTopology(), AutoContactHTee::updateTopology(), and AutoContactTerminal::updateTopology().

    - -
    -
    - -

    ◆ checkTopology()

    - -
    -
    - - - - - -
    - - - - - - - -
    void checkTopology ()
    -
    -virtual
    -
    -

    Check for topology correctness (no gaps), display an error message if needed.

    - -
    -
    - -

    ◆ setGCell()

    - -
    -
    - - - - - - - - -
    void setGCell (GCellgcell)
    -
    -
    - -

    ◆ setCBXMin()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void setCBXMin (DbU::Unit xMin)
    -
    -inline
    -
    -

    Set the lower left X coordinate of the constraint box.

    -
    Remark: It cannot go outside the GCell bounding box.
    - -

    References GCell::getX().

    - -
    -
    - -

    ◆ setCBXMax()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void setCBXMax (DbU::Unit xMax)
    -
    -inline
    -
    -

    Set the upper right X coordinate of the constraint box.

    -
    Remark: It cannot go outside the GCell bounding box.
    - -

    References GCell::getX(), and GCell::getXMax().

    - -
    -
    - -

    ◆ setCBYMin()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void setCBYMin (DbU::Unit yMin)
    -
    -inline
    -
    -

    Set the lower left Y coordinate of the constraint box.

    -
    Remark: It cannot go outside the GCell bounding box.
    - -

    References GCell::getY().

    - -
    -
    - -

    ◆ setCBYMax()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void setCBYMax (DbU::Unit yMax)
    -
    -inline
    -
    -

    Set the upper right Y coordinate of the constraint box.

    -
    Remark: It cannot go outside the GCell bounding box.
    - -

    References GCell::getY(), and GCell::getYMax().

    - -
    -
    - -

    ◆ setConstraintBox()

    - -
    -
    - - - - - - - - -
    void setConstraintBox (const Boxbox)
    -
    -

    Set the constraint box.

    -
    Remark: It cannot go outside the GCell bounding box.
    - -

    References Box::getXMax(), Box::getXMin(), Box::getYMax(), and Box::getYMin().

    - -
    -
    - -

    ◆ restrictConstraintBox()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    bool restrictConstraintBox (DbU::Unit min,
    DbU::Unit max,
    unsigned int flags = KbWarnOnError 
    )
    -
    -
    Parameters
    - - - - -
    minThe minimum of the restriction interval.
    maxThe maximum of the restriction interval.
    flagsGives the direction of the restriction.
    -
    -
    -
    Returns
    true if the restriction was actually applied.
    -

    Restrict the current constraint box but check if the restriction will not lead to an empty interval, in that case, do nothing and return false.

    - -

    References Katabatic::KbHorizontal, Katabatic::KbVertical, Katabatic::KbWarnOnError, and toLambda().

    - -
    -
    - -

    ◆ migrateConstraintBox()

    - -
    -
    - - - - - - - - -
    void migrateConstraintBox (AutoContactother)
    -
    -

    Transfer the user constraint box from other to the current object this. The constraints of other are restored to their native values. The two contacts must belong to the same GCell for this method to take effect.

    - -

    References AutoContact::getConstraintBox().

    - -

    Referenced by AutoHorizontal::_makeDogleg(), and AutoVertical::_makeDogleg().

    - -
    -
    - -

    ◆ _getTopology()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    void _getTopology (Contactsupport,
    Component *& anchor,
    Horizontal **& horizontals,
    Vertical **& verticals,
    size_t size 
    )
    -
    -staticprotected
    -
    -
    Parameters
    - - - - - -
    anchorThe anchor, if any.
    hsThe Hurricane::Horizontal anchored.
    vsThe Hurricane::Vertical anchored.
    szThe size of boths hs & vs table passed as arguments.
    -
    -
    -

    Fill anchor , hs and vs with the components anchored on this AutoContact.

    - -

    References Contact::getAnchor(), and Component::getSlaveComponents().

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoContact.js b/deprecated/katabatic/doc/html/classKatabatic_1_1AutoContact.js deleted file mode 100644 index 9e1f8aee..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoContact.js +++ /dev/null @@ -1,75 +0,0 @@ -var classKatabatic_1_1AutoContact = -[ - [ "getBodyHook", "classKatabatic_1_1AutoContact.html#a4092778435abf3fb25a986a802bdb6c6", null ], - [ "getAnchorHook", "classKatabatic_1_1AutoContact.html#ad4a1ca46647528c32c5fbd4c45ac866c", null ], - [ "getAnchor", "classKatabatic_1_1AutoContact.html#afa2c2abdef6c96ffc359707919be5d9f", null ], - [ "getNet", "classKatabatic_1_1AutoContact.html#adf3e1a980233163de0ca34a5c3575998", null ], - [ "getLayer", "classKatabatic_1_1AutoContact.html#a304ee4e02745811e04ac6fb688bf834f", null ], - [ "getX", "classKatabatic_1_1AutoContact.html#a852afe759ce2cb8cb9c0524fc1e23387", null ], - [ "getY", "classKatabatic_1_1AutoContact.html#ac597d25a34a79fb4393211c70f5a1bc3", null ], - [ "getDx", "classKatabatic_1_1AutoContact.html#a2589fed9c8789a650f5dc102b762aa57", null ], - [ "getDy", "classKatabatic_1_1AutoContact.html#ab9233926e07b704773511774b1992602", null ], - [ "getCenter", "classKatabatic_1_1AutoContact.html#a9e97a8efe26be94cbe5202c7f345e175", null ], - [ "getPosition", "classKatabatic_1_1AutoContact.html#a2b1a75d102c6f88eaa432064efd04e27", null ], - [ "getWidth", "classKatabatic_1_1AutoContact.html#aa018d3e74791b77d2def527248b9b00a", null ], - [ "getHalfWidth", "classKatabatic_1_1AutoContact.html#af2daf0fed893337f82e93363ae17bf14", null ], - [ "getHeight", "classKatabatic_1_1AutoContact.html#ae66967177ea58702fc89e9563f73bfb4", null ], - [ "getHalfHeight", "classKatabatic_1_1AutoContact.html#a68048c464a03e8bbc9ae9ec74b037561", null ], - [ "getSlaveComponents", "classKatabatic_1_1AutoContact.html#a5e6d3b7991ce74215e3e0a0ae6c07645", null ], - [ "setLayer", "classKatabatic_1_1AutoContact.html#aad4271c35e0162c8a4d034dca07f5a4b", null ], - [ "setWidth", "classKatabatic_1_1AutoContact.html#a9a0ec0a0ac85f23cfad6c069ea8dade7", null ], - [ "setHeight", "classKatabatic_1_1AutoContact.html#a106f372cee0916ebb6544627e47bb58d", null ], - [ "setSizes", "classKatabatic_1_1AutoContact.html#a0284fcec9bd41b26648e7bef3d4f1952", null ], - [ "setX", "classKatabatic_1_1AutoContact.html#a154f993d0262c92bfc0dc95154faf794", null ], - [ "setY", "classKatabatic_1_1AutoContact.html#ac862ce450a533f0544d2168b132ba165", null ], - [ "setPosition", "classKatabatic_1_1AutoContact.html#a12d3bfdce07580db21b17cf87f912cc3", null ], - [ "setPosition", "classKatabatic_1_1AutoContact.html#a52707afec84391e898e01c75b2713d32", null ], - [ "setDx", "classKatabatic_1_1AutoContact.html#a2c83ac6a03bbac090a8ab120d62c6e44", null ], - [ "setDy", "classKatabatic_1_1AutoContact.html#a123478e15e2544598851d0e907212841", null ], - [ "setOffset", "classKatabatic_1_1AutoContact.html#a9881d5e969669b641c5de4f4d94e5d15", null ], - [ "translate", "classKatabatic_1_1AutoContact.html#a9161f1e2832e5e141a13863223322aa5", null ], - [ "isInCreationStage", "classKatabatic_1_1AutoContact.html#a8a8f27ca267d07ae56abff162a3b3ae0", null ], - [ "isInvalidated", "classKatabatic_1_1AutoContact.html#a54f713d06c43bebf4e0dfef06e347531", null ], - [ "isInvalidatedCache", "classKatabatic_1_1AutoContact.html#af715dc65deddf045ec1743a529393224", null ], - [ "isTurn", "classKatabatic_1_1AutoContact.html#aa7c7bc6592b91fe675acb9b793b1188e", null ], - [ "isTee", "classKatabatic_1_1AutoContact.html#a8fd7a3439896837a5af19d408162ca62", null ], - [ "isHTee", "classKatabatic_1_1AutoContact.html#ac2131e4356f7d7c6e4ada597307f1d95", null ], - [ "isVTee", "classKatabatic_1_1AutoContact.html#a938932aae592e22efdc9b275ad5a4094", null ], - [ "isFixed", "classKatabatic_1_1AutoContact.html#af5e7d3badddf2ec07159f1d83426d4c1", null ], - [ "hasBadTopology", "classKatabatic_1_1AutoContact.html#a1aebd841bb4796ac0f4264d6a694d6fa", null ], - [ "canDestroy", "classKatabatic_1_1AutoContact.html#aa1d158503e0663092922e38651b8c9f5", null ], - [ "canMoveUp", "classKatabatic_1_1AutoContact.html#a3b30ff8ac1916f6cf9f9be735a3d9c3a", null ], - [ "base", "classKatabatic_1_1AutoContact.html#a7f6571edacd5e4120cc9b87abd23082a", null ], - [ "getAllocateds", "classKatabatic_1_1AutoContact.html#a91c8bc1a6bdb1b15c3c084ebfd38af47", null ], - [ "getStaticName", "classKatabatic_1_1AutoContact.html#a00e56270cfb31f56e52e31afbc33ba71", null ], - [ "getName", "classKatabatic_1_1AutoContact.html#a5e23c46b801d3049b349b68774a0d298", null ], - [ "getId", "classKatabatic_1_1AutoContact.html#ac0015de06fff235f96ec1cf68444f7a4", null ], - [ "getBoundingBox", "classKatabatic_1_1AutoContact.html#a3b9694bf093e3ea16e4a8c8126a8d4db", null ], - [ "getGCell", "classKatabatic_1_1AutoContact.html#ab45ccfee0f781ec16c50672663d36141", null ], - [ "getOpposite", "classKatabatic_1_1AutoContact.html#a48ab1d3bdf85712e4784ef83ef136939", null ], - [ "getSegment", "classKatabatic_1_1AutoContact.html#a50531ded68cc5206fe104b8d8bf3bd87", null ], - [ "getMinDepth", "classKatabatic_1_1AutoContact.html#a5b16a639914ac05e0cb7032f918278b0", null ], - [ "getMaxDepth", "classKatabatic_1_1AutoContact.html#a625d8d6b12c514f8cf1bc217cc20d743", null ], - [ "getLengths", "classKatabatic_1_1AutoContact.html#ac607a624c0698056c5bccf405cf05ea7", null ], - [ "getNativeConstraintBox", "classKatabatic_1_1AutoContact.html#a762d33db26927e6db939a7420bb95743", null ], - [ "getUConstraints", "classKatabatic_1_1AutoContact.html#aaa2758181c73fb81e43550dea6b03041", null ], - [ "getCBXMin", "classKatabatic_1_1AutoContact.html#a0c391297a64d0ae15c14a6e803b0316e", null ], - [ "getCBXMax", "classKatabatic_1_1AutoContact.html#a20ab0da1716ecd002f3abc76285dd5a1", null ], - [ "getCBYMin", "classKatabatic_1_1AutoContact.html#acd040eea296d73195a2065819ba02ebc", null ], - [ "getCBYMax", "classKatabatic_1_1AutoContact.html#a25bae06d071e2e19696d3e950956d785", null ], - [ "getConstraintBox", "classKatabatic_1_1AutoContact.html#a0d59519da5ced04bca8f2849c9f9a890", null ], - [ "intersectConstraintBox", "classKatabatic_1_1AutoContact.html#a2b4fffa1c238d8379a3418012e4f60f0", null ], - [ "invalidate", "classKatabatic_1_1AutoContact.html#aabac50fd9b8e1bba7289573973658d18", null ], - [ "updateGeometry", "classKatabatic_1_1AutoContact.html#af6a2454547eeb7f5a519970dcb467e90", null ], - [ "updateTopology", "classKatabatic_1_1AutoContact.html#a690764ddc997fe9766a79c4b8e0c3e2f", null ], - [ "showTopologyError", "classKatabatic_1_1AutoContact.html#a779bf649464b9755d3b116a0eb4e3329", null ], - [ "checkTopology", "classKatabatic_1_1AutoContact.html#ac371cd5b837a8965c11297c197e70a45", null ], - [ "setGCell", "classKatabatic_1_1AutoContact.html#aa1a02e206437f1371a74cafc724b00d7", null ], - [ "setCBXMin", "classKatabatic_1_1AutoContact.html#a9fcb986110e79bc0044f7bfe503acc0c", null ], - [ "setCBXMax", "classKatabatic_1_1AutoContact.html#aaa7652f5db46cab9edb066d06ea979f9", null ], - [ "setCBYMin", "classKatabatic_1_1AutoContact.html#a5b598929b39ad3ec202405b31ac02b1d", null ], - [ "setCBYMax", "classKatabatic_1_1AutoContact.html#a1fdb3737d910a966e150a86d885f3c05", null ], - [ "setConstraintBox", "classKatabatic_1_1AutoContact.html#a5e5f791613d0ef8f4cf9e7d8f35dc4c5", null ], - [ "restrictConstraintBox", "classKatabatic_1_1AutoContact.html#ac893802d1c5518cab86f8341af817abe", null ], - [ "_getTopology", "classKatabatic_1_1AutoContact.html#a9d87e05e83562cd6a6b6c1b8ebe205bd", null ] -]; \ No newline at end of file diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoContactHTee-members.html b/deprecated/katabatic/doc/html/classKatabatic_1_1AutoContactHTee-members.html deleted file mode 100644 index b1786dc5..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoContactHTee-members.html +++ /dev/null @@ -1,141 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - - -
    -
    -
    AutoContactHTee Member List
    -
    -
    - -

    This is the complete list of members for AutoContactHTee, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    _getTopology(Contact *, Component *&anchor, Horizontal **&, Vertical **&, size_t)AutoContactprotectedstatic
    base() constAutoContactinline
    canDestroy(unsigned int flags=0) constAutoContact
    canMoveUp(const AutoSegment *moved) constAutoContact
    checkTopology()AutoContactvirtual
    create(GCell *, Net *, const Layer *)AutoContactHTeestatic
    getAllocateds()AutoContactstatic
    getAnchor() constAutoContactinline
    getAnchorHook()AutoContactinline
    getBodyHook()AutoContactinline
    getBoundingBox() constAutoContactvirtual
    getCBXMax() constAutoContactinline
    getCBXMin() constAutoContactinline
    getCBYMax() constAutoContactinline
    getCBYMin() constAutoContactinline
    getCenter() constAutoContactinline
    getConstraintBox() constAutoContactinline
    getDx() constAutoContactinline
    getDy() constAutoContactinline
    getGCell() constAutoContactinline
    getHalfHeight() constAutoContactinline
    getHalfWidth() constAutoContactinline
    getHeight() constAutoContactinline
    getId() constAutoContactinline
    getLayer() constAutoContactinline
    getLengths(DbU::Unit *lengths, AutoSegment::DepthLengthSet &)AutoContact
    getMaxDepth() constAutoContact
    getMinDepth() constAutoContact
    getName() constAutoContactvirtual
    getNativeConstraintBox() constAutoContactvirtual
    getNet() constAutoContactinline
    getOpposite(const AutoSegment *) constAutoContactHTeevirtual
    getPerpandicular(const AutoSegment *) constAutoContactHTeevirtual
    getPosition() constAutoContactinline
    getSegment(unsigned int) constAutoContactHTeevirtual
    getSlaveComponents() constAutoContactinline
    getStaticName()AutoContactstatic
    getUConstraints(unsigned int direction) constAutoContact
    getWidth() constAutoContactinline
    getX() constAutoContactinline
    getY() constAutoContactinline
    hasBadTopology() constAutoContactinline
    intersectConstraintBox(Box &box) constAutoContact
    invalidate(unsigned int flags=0)AutoContact
    isFixed() constAutoContactinline
    isHTee() constAutoContactinline
    isInCreationStage() constAutoContactinline
    isInvalidated() constAutoContactinline
    isInvalidatedCache() constAutoContactinline
    isTee(unsigned int direction) constAutoContact
    isTurn() constAutoContactinline
    isVTee() constAutoContactinline
    migrateConstraintBox(AutoContact *other)AutoContact
    restrictConstraintBox(DbU::Unit constraintMin, DbU::Unit constraintMax, unsigned int flags=KbWarnOnError)AutoContact
    setCBXMax(DbU::Unit xMax)AutoContactinline
    setCBXMin(DbU::Unit xMin)AutoContactinline
    setCBYMax(DbU::Unit yMax)AutoContactinline
    setCBYMin(DbU::Unit yMin)AutoContactinline
    setConstraintBox(const Box &box)AutoContact
    setDx(DbU::Unit)AutoContactinline
    setDy(DbU::Unit)AutoContactinline
    setGCell(GCell *)AutoContact
    setHeight(DbU::Unit)AutoContactinline
    setLayer(const Layer *)AutoContactinline
    setOffset(DbU::Unit dx, DbU::Unit dy)AutoContactinline
    setPosition(DbU::Unit width, DbU::Unit height)AutoContactinline
    setPosition(const Point &)AutoContactinline
    setSizes(DbU::Unit width, DbU::Unit height)AutoContactinline
    setWidth(DbU::Unit)AutoContactinline
    setX(DbU::Unit)AutoContactinline
    setY(DbU::Unit)AutoContactinline
    showTopologyError(const std::string &, unsigned int flags=0)AutoContact
    translate(const DbU::Unit &tx, const DbU::Unit &ty)AutoContactvirtual
    updateGeometry()AutoContactHTeevirtual
    updateTopology()AutoContactHTeevirtual
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoContactHTee.html b/deprecated/katabatic/doc/html/classKatabatic_1_1AutoContactHTee.html deleted file mode 100644 index 360a8186..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoContactHTee.html +++ /dev/null @@ -1,468 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - - -
    - -
    -
    AutoContactHTee Class Reference
    -
    -
    - -

    AutoContact H-Tee (two H, one V) - More...

    -
    -Inheritance diagram for AutoContactHTee:
    -
    -
    Inheritance graph
    - - - -
    [legend]
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    virtual AutoSegmentgetOpposite (const AutoSegment *) const
     
    virtual AutoSegmentgetPerpandicular (const AutoSegment *) const
     
    virtual AutoSegmentgetSegment (unsigned int) const
     
    virtual void updateGeometry ()
     
    virtual void updateTopology ()
     
    - Public Member Functions inherited from AutoContact
    HookgetBodyHook ()
     
    HookgetAnchorHook ()
     
    ComponentgetAnchor () const
     
    NetgetNet () const
     
    const LayergetLayer () const
     
    DbU::Unit getX () const
     
    DbU::Unit getY () const
     
    DbU::Unit getDx () const
     
    DbU::Unit getDy () const
     
    Point getCenter () const
     
    Point getPosition () const
     
    DbU::Unit getWidth () const
     
    DbU::Unit getHalfWidth () const
     
    DbU::Unit getHeight () const
     
    DbU::Unit getHalfHeight () const
     
    Components getSlaveComponents () const
     
    void setLayer (const Layer *)
     
    void setWidth (DbU::Unit)
     
    void setHeight (DbU::Unit)
     
    void setSizes (DbU::Unit width, DbU::Unit height)
     
    void setX (DbU::Unit)
     
    void setY (DbU::Unit)
     
    void setPosition (DbU::Unit width, DbU::Unit height)
     
    void setPosition (const Point &)
     
    void setDx (DbU::Unit)
     
    void setDy (DbU::Unit)
     
    void setOffset (DbU::Unit dx, DbU::Unit dy)
     
    virtual void translate (const DbU::Unit &tx, const DbU::Unit &ty)
     
    bool isInCreationStage () const
     
    bool isInvalidated () const
     
    bool isInvalidatedCache () const
     
    bool isTurn () const
     
    bool isTee (unsigned int direction) const
     
    bool isHTee () const
     
    bool isVTee () const
     
    bool isFixed () const
     
    bool hasBadTopology () const
     
    bool canDestroy (unsigned int flags=0) const
     
    bool canMoveUp (const AutoSegment *moved) const
     
    Contactbase () const
     
    virtual const NamegetName () const
     
    size_t getId () const
     
    virtual Box getBoundingBox () const
     
    GCellgetGCell () const
     
    unsigned int getMinDepth () const
     
    unsigned int getMaxDepth () const
     
    void getLengths (DbU::Unit *lengths, AutoSegment::DepthLengthSet &)
     
    virtual Box getNativeConstraintBox () const
     
    Interval getUConstraints (unsigned int direction) const
     
    DbU::Unit getCBXMin () const
     
    DbU::Unit getCBXMax () const
     
    DbU::Unit getCBYMin () const
     
    DbU::Unit getCBYMax () const
     
    Box getConstraintBox () const
     
    BoxintersectConstraintBox (Box &box) const
     
    void invalidate (unsigned int flags=0)
     
    void showTopologyError (const std::string &, unsigned int flags=0)
     
    virtual void checkTopology ()
     
    void setGCell (GCell *)
     
    void setCBXMin (DbU::Unit xMin)
     
    void setCBXMax (DbU::Unit xMax)
     
    void setCBYMin (DbU::Unit yMin)
     
    void setCBYMax (DbU::Unit yMax)
     
    void setConstraintBox (const Box &box)
     
    bool restrictConstraintBox (DbU::Unit constraintMin, DbU::Unit constraintMax, unsigned int flags=KbWarnOnError)
     
    void migrateConstraintBox (AutoContact *other)
     
    - - - - - - - - -

    -Static Public Member Functions

    static AutoContactHTeecreate (GCell *, Net *, const Layer *)
     
    - Static Public Member Functions inherited from AutoContact
    static size_t getAllocateds ()
     
    static const NamegetStaticName ()
     
    - - - - -

    -Additional Inherited Members

    - Static Protected Member Functions inherited from AutoContact
    static void _getTopology (Contact *, Component *&anchor, Horizontal **&, Vertical **&, size_t)
     
    -

    Detailed Description

    -

    AutoContact H-Tee (two H, one V)

    -

    AutoContact to build an horizontal tee (two H, one V).

    -

    Member Function Documentation

    - -

    ◆ create()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    AutoContactHTee * create (GCellgcell,
    Netnet,
    const Layerlayer 
    )
    -
    -static
    -
    -
    Parameters
    - - - - -
    gcellThe GCell into which create the AutoContact.
    netThe Net to which this AutoContact belongs.
    layerThe Layer of the AutoContact.
    -
    -
    -
    Returns
    The created AutoContactHTee.
    -

    Create a new AutoContactHTee.

    - -

    References Katabatic::CntInCreationStage, and Contact::create().

    - -

    Referenced by GCellTopology::_do_xG(), GCellTopology::_do_xG_1M1_1M2(), and GCellTopology::_do_xG_xM1_xM3().

    - -
    -
    - -

    ◆ getOpposite()

    - -
    -
    - - - - - -
    - - - - - - - - -
    AutoSegment * getOpposite (const AutoSegmentreference) const
    -
    -virtual
    -
    -

    Returns: The other AutoSegment the same direction as reference, this is only meaningful on AutoContactHTee or AutoContactVTee. If there is no opposite, NULL is returned.

    - -

    Implements AutoContact.

    - -
    -
    - -

    ◆ getPerpandicular()

    - -
    -
    - - - - - -
    - - - - - - - - -
    AutoSegment * getPerpandicular (const AutoSegmentreference) const
    -
    -virtual
    -
    -

    Returns: The AutoSegment in the perpandicular direction to reference, this is only meaningful on AutoContacTurn. It there is no unique perpandicular, NULL is returned.

    - -

    Implements AutoContact.

    - -
    -
    - -

    ◆ getSegment()

    - -
    -
    - - - - - -
    - - - - - - - - -
    AutoSegment * getSegment (unsigned int index) const
    -
    -virtual
    -
    -

    Returns: The nth anchored AutoSegment. The index is significant:

      -
    • 0 : first horizontal (h1).
    • -
    • 1 : second horizontal (h2).
    • -
    • 2 : first vertical (b1).
    • -
    • 3 : second vertical (b2).
    • -
    -

    Not all the indexes are filled for every AutoContact. For example Turn have h1 and b1, and HTee have h1, h2 and v1.

    - -

    Implements AutoContact.

    - -
    -
    - -

    ◆ updateGeometry()

    - -
    -
    - - - - - -
    - - - - - - - -
    void updateGeometry ()
    -
    -virtual
    -
    -

    Compute the new position of the AutoContact based on the AutoSegment positions. The Session mechanism ensure that all AutoSegment are set into their final positions before calling this updator.

    - -

    Implements AutoContact.

    - -

    References AutoContact::base(), DebugSession::close(), Katabatic::CntInvalidated, AutoContact::getNet(), AutoContact::getX(), AutoContact::getY(), AutoContact::hasBadTopology(), Go::invalidate(), AutoContact::isInvalidatedCache(), DebugSession::open(), AutoContact::setX(), and AutoContact::setY().

    - -
    -
    - -

    ◆ updateTopology()

    - -
    -
    - - - - - -
    - - - - - - - -
    void updateTopology ()
    -
    -virtual
    -
    -

    Restore the topology (i.e. connexity) of the contact after any number of connected segments has changed layer (at least one, up to three).

    -

    For any configuration, the connexity can be restored by making only one dogleg.

    -

    We distinguish two kind of layer changes:

      -
    1. The two horizontals (h1 and h2) are still on the same layer (either they both moved or the vertical only has moved, see figures 2 & 4). In that case, the dogleg is made on the vertical.
    2. -
    3. The two horizontals no longer are on the same layer (figures 1 & 3). In that case, the dogleg is made on the horizontal which is at the greater distance (in a layer sense) from the vertical.
    4. -
    -
    -updateTopologyHTee.png -
    -Update H-Tee Topology
    - -

    Implements AutoContact.

    - -

    References DebugSession::close(), Katabatic::CntBadTopology, RoutingGauge::getContactLayer(), AutoContact::getLayer(), RoutingGauge::getLayerDepth(), AutoContact::getNet(), Session::getRoutingGauge(), RoutingGauge::getRoutingLayer(), AutoContact::hasBadTopology(), AutoContact::isInvalidatedCache(), DebugSession::open(), AutoContact::setLayer(), and AutoContact::showTopologyError().

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoContactHTee.js b/deprecated/katabatic/doc/html/classKatabatic_1_1AutoContactHTee.js deleted file mode 100644 index cdf241b5..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoContactHTee.js +++ /dev/null @@ -1,8 +0,0 @@ -var classKatabatic_1_1AutoContactHTee = -[ - [ "create", "classKatabatic_1_1AutoContactHTee.html#a9b42579ac2487765c83e31f7ca3ee562", null ], - [ "getOpposite", "classKatabatic_1_1AutoContactHTee.html#aaf175a76573a5e3505b24fb2a8b0414f", null ], - [ "getSegment", "classKatabatic_1_1AutoContactHTee.html#a2f7d64767002f3bf2bbdf2f8f0e80105", null ], - [ "updateGeometry", "classKatabatic_1_1AutoContactHTee.html#a3e218f6934c51380fb15d0e2bd380071", null ], - [ "updateTopology", "classKatabatic_1_1AutoContactHTee.html#af5bf1f5e71204ef84346e4e036175431", null ] -]; \ No newline at end of file diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoContactHTee__inherit__graph.map b/deprecated/katabatic/doc/html/classKatabatic_1_1AutoContactHTee__inherit__graph.map deleted file mode 100644 index b64924e1..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoContactHTee__inherit__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoContactHTee__inherit__graph.md5 b/deprecated/katabatic/doc/html/classKatabatic_1_1AutoContactHTee__inherit__graph.md5 deleted file mode 100644 index 38e3056b..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoContactHTee__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -0b9e3655184fb9e69fae43f15ba23b63 \ No newline at end of file diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoContactHTee__inherit__graph.png b/deprecated/katabatic/doc/html/classKatabatic_1_1AutoContactHTee__inherit__graph.png deleted file mode 100644 index ad21a82f..00000000 Binary files a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoContactHTee__inherit__graph.png and /dev/null differ diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoContactTerminal-members.html b/deprecated/katabatic/doc/html/classKatabatic_1_1AutoContactTerminal-members.html deleted file mode 100644 index 613d0802..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoContactTerminal-members.html +++ /dev/null @@ -1,142 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - - -
    -
    -
    AutoContactTerminal Member List
    -
    -
    - -

    This is the complete list of members for AutoContactTerminal, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    _getTopology(Contact *, Component *&anchor, Horizontal **&, Vertical **&, size_t)AutoContactprotectedstatic
    base() constAutoContactinline
    canDestroy(unsigned int flags=0) constAutoContact
    canMoveUp(const AutoSegment *moved) constAutoContact
    checkTopology()AutoContactvirtual
    create(GCell *gcell, Component *anchor, const Layer *layer, Point point, DbU::Unit width, DbU::Unit height)AutoContactTerminalstatic
    create(GCell *gcell, Component *anchor, const Layer *layer, const DbU::Unit dx, const DbU::Unit dy, const DbU::Unit width, const DbU::Unit height)AutoContactTerminalstatic
    getAllocateds()AutoContactstatic
    getAnchor() constAutoContactinline
    getAnchorHook()AutoContactinline
    getBodyHook()AutoContactinline
    getBoundingBox() constAutoContactvirtual
    getCBXMax() constAutoContactinline
    getCBXMin() constAutoContactinline
    getCBYMax() constAutoContactinline
    getCBYMin() constAutoContactinline
    getCenter() constAutoContactinline
    getConstraintBox() constAutoContactinline
    getDx() constAutoContactinline
    getDy() constAutoContactinline
    getGCell() constAutoContactinline
    getHalfHeight() constAutoContactinline
    getHalfWidth() constAutoContactinline
    getHeight() constAutoContactinline
    getId() constAutoContactinline
    getLayer() constAutoContactinline
    getLengths(DbU::Unit *lengths, AutoSegment::DepthLengthSet &)AutoContact
    getMaxDepth() constAutoContact
    getMinDepth() constAutoContact
    getName() constAutoContactvirtual
    getNativeConstraintBox() constAutoContactTerminalvirtual
    getNet() constAutoContactinline
    getOpposite(const AutoSegment *) constAutoContactTerminalvirtual
    getPerpandicular(const AutoSegment *) constAutoContactTerminalvirtual
    getPosition() constAutoContactinline
    getSegment(unsigned int) constAutoContactTerminalvirtual
    getSlaveComponents() constAutoContactinline
    getStaticName()AutoContactstatic
    getUConstraints(unsigned int direction) constAutoContact
    getWidth() constAutoContactinline
    getX() constAutoContactinline
    getY() constAutoContactinline
    hasBadTopology() constAutoContactinline
    intersectConstraintBox(Box &box) constAutoContact
    invalidate(unsigned int flags=0)AutoContact
    isFixed() constAutoContactinline
    isHTee() constAutoContactinline
    isInCreationStage() constAutoContactinline
    isInvalidated() constAutoContactinline
    isInvalidatedCache() constAutoContactinline
    isTee(unsigned int direction) constAutoContact
    isTurn() constAutoContactinline
    isVTee() constAutoContactinline
    migrateConstraintBox(AutoContact *other)AutoContact
    restrictConstraintBox(DbU::Unit constraintMin, DbU::Unit constraintMax, unsigned int flags=KbWarnOnError)AutoContact
    setCBXMax(DbU::Unit xMax)AutoContactinline
    setCBXMin(DbU::Unit xMin)AutoContactinline
    setCBYMax(DbU::Unit yMax)AutoContactinline
    setCBYMin(DbU::Unit yMin)AutoContactinline
    setConstraintBox(const Box &box)AutoContact
    setDx(DbU::Unit)AutoContactinline
    setDy(DbU::Unit)AutoContactinline
    setGCell(GCell *)AutoContact
    setHeight(DbU::Unit)AutoContactinline
    setLayer(const Layer *)AutoContactinline
    setOffset(DbU::Unit dx, DbU::Unit dy)AutoContactinline
    setPosition(DbU::Unit width, DbU::Unit height)AutoContactinline
    setPosition(const Point &)AutoContactinline
    setSizes(DbU::Unit width, DbU::Unit height)AutoContactinline
    setWidth(DbU::Unit)AutoContactinline
    setX(DbU::Unit)AutoContactinline
    setY(DbU::Unit)AutoContactinline
    showTopologyError(const std::string &, unsigned int flags=0)AutoContact
    translate(const DbU::Unit &tx, const DbU::Unit &ty)AutoContactvirtual
    updateGeometry()AutoContactTerminalvirtual
    updateTopology()AutoContactTerminalvirtual
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoContactTerminal.html b/deprecated/katabatic/doc/html/classKatabatic_1_1AutoContactTerminal.html deleted file mode 100644 index 0066d725..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoContactTerminal.html +++ /dev/null @@ -1,608 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - - -
    - -
    -
    AutoContactTerminal Class Reference
    -
    -
    - -

    AutoContact Terminal (S/T is a Terminal) - More...

    -
    -Inheritance diagram for AutoContactTerminal:
    -
    -
    Inheritance graph
    - - - -
    [legend]
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    virtual Box getNativeConstraintBox () const
     
    virtual AutoSegmentgetSegment (unsigned int) const
     
    virtual AutoSegmentgetOpposite (const AutoSegment *) const
     
    virtual AutoSegmentgetPerpandicular (const AutoSegment *) const
     
    virtual void updateGeometry ()
     
    virtual void updateTopology ()
     
    - Public Member Functions inherited from AutoContact
    HookgetBodyHook ()
     
    HookgetAnchorHook ()
     
    ComponentgetAnchor () const
     
    NetgetNet () const
     
    const LayergetLayer () const
     
    DbU::Unit getX () const
     
    DbU::Unit getY () const
     
    DbU::Unit getDx () const
     
    DbU::Unit getDy () const
     
    Point getCenter () const
     
    Point getPosition () const
     
    DbU::Unit getWidth () const
     
    DbU::Unit getHalfWidth () const
     
    DbU::Unit getHeight () const
     
    DbU::Unit getHalfHeight () const
     
    Components getSlaveComponents () const
     
    void setLayer (const Layer *)
     
    void setWidth (DbU::Unit)
     
    void setHeight (DbU::Unit)
     
    void setSizes (DbU::Unit width, DbU::Unit height)
     
    void setX (DbU::Unit)
     
    void setY (DbU::Unit)
     
    void setPosition (DbU::Unit width, DbU::Unit height)
     
    void setPosition (const Point &)
     
    void setDx (DbU::Unit)
     
    void setDy (DbU::Unit)
     
    void setOffset (DbU::Unit dx, DbU::Unit dy)
     
    virtual void translate (const DbU::Unit &tx, const DbU::Unit &ty)
     
    bool isInCreationStage () const
     
    bool isInvalidated () const
     
    bool isInvalidatedCache () const
     
    bool isTurn () const
     
    bool isTee (unsigned int direction) const
     
    bool isHTee () const
     
    bool isVTee () const
     
    bool isFixed () const
     
    bool hasBadTopology () const
     
    bool canDestroy (unsigned int flags=0) const
     
    bool canMoveUp (const AutoSegment *moved) const
     
    Contactbase () const
     
    virtual const NamegetName () const
     
    size_t getId () const
     
    virtual Box getBoundingBox () const
     
    GCellgetGCell () const
     
    unsigned int getMinDepth () const
     
    unsigned int getMaxDepth () const
     
    void getLengths (DbU::Unit *lengths, AutoSegment::DepthLengthSet &)
     
    Interval getUConstraints (unsigned int direction) const
     
    DbU::Unit getCBXMin () const
     
    DbU::Unit getCBXMax () const
     
    DbU::Unit getCBYMin () const
     
    DbU::Unit getCBYMax () const
     
    Box getConstraintBox () const
     
    BoxintersectConstraintBox (Box &box) const
     
    void invalidate (unsigned int flags=0)
     
    void showTopologyError (const std::string &, unsigned int flags=0)
     
    virtual void checkTopology ()
     
    void setGCell (GCell *)
     
    void setCBXMin (DbU::Unit xMin)
     
    void setCBXMax (DbU::Unit xMax)
     
    void setCBYMin (DbU::Unit yMin)
     
    void setCBYMax (DbU::Unit yMax)
     
    void setConstraintBox (const Box &box)
     
    bool restrictConstraintBox (DbU::Unit constraintMin, DbU::Unit constraintMax, unsigned int flags=KbWarnOnError)
     
    void migrateConstraintBox (AutoContact *other)
     
    - - - - - - - - - - -

    -Static Public Member Functions

    static AutoContactTerminalcreate (GCell *gcell, Component *anchor, const Layer *layer, Point point, DbU::Unit width, DbU::Unit height)
     
    static AutoContactTerminalcreate (GCell *gcell, Component *anchor, const Layer *layer, const DbU::Unit dx, const DbU::Unit dy, const DbU::Unit width, const DbU::Unit height)
     
    - Static Public Member Functions inherited from AutoContact
    static size_t getAllocateds ()
     
    static const NamegetStaticName ()
     
    - - - - -

    -Additional Inherited Members

    - Static Protected Member Functions inherited from AutoContact
    static void _getTopology (Contact *, Component *&anchor, Horizontal **&, Vertical **&, size_t)
     
    -

    Detailed Description

    -

    AutoContact Terminal (S/T is a Terminal)

    -

    AutoContact that are directly attached by either source or target or both to a terminal.

    -

    Member Function Documentation

    - -

    ◆ create() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    AutoContactTerminal * create (GCellgcell,
    Componentrp,
    const Layerlayer,
    Point point,
    DbU::Unit width,
    DbU::Unit height 
    )
    -
    -static
    -
    -
    Parameters
    - - - - - - - -
    gcellThe GCell into which create the AutoContact.
    rpThe RoutingPad on which to anchor the AutoContact.
    layerThe Layer of the AutoContact.
    pointThe absolute position.
    widthThe width of the AutoContact.
    heightThe height of the AutoContact.
    -
    -
    -
    Returns
    The created AutoContact.
    -

    Create a new AutoContactTerminal anchored on rp. point gives the absolute position.

    - -

    References Hook::detach(), and Component::getBodyHook().

    - -

    Referenced by GCellTopology::doRp_AccessPad(), and GCellTopology::doRp_AutoContacts().

    - -
    -
    - -

    ◆ create() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    AutoContactTerminal * create (GCellgcell,
    Componentrp,
    const Layerlayer,
    const DbU::Unit x,
    const DbU::Unit y,
    const DbU::Unit width,
    const DbU::Unit height 
    )
    -
    -static
    -
    -
    Parameters
    - - - - - - - - -
    gcellThe GCell into which create the AutoContact.
    rpThe Component on which to anchor the AutoContact.
    layerThe Layer of the AutoContact.
    xThe absolute X position.
    yThe absolute Y position.
    widthThe width of the AutoContact.
    heightThe height of the AutoContact.
    -
    -
    -
    Returns
    The created AutoContact.
    -

    Create a new AutoContactTerminal anchored on rp. (x,y) gives the absolute position.

    -

    The anchor component rp is most often a Hurricane::RoutingPad (occurrencing a Hurricane::Segment) or directly a Hurricane::Segment, in case of RoutingPad layer promotion.

    - -

    References Katabatic::CntInCreationStage, Contact::create(), Component::getPosition(), and DbU::getValueString().

    - -
    -
    - -

    ◆ getNativeConstraintBox()

    - -
    -
    - - - - - -
    - - - - - - - -
    Box getNativeConstraintBox () const
    -
    -virtual
    -
    -

    Returns: The native constraint box (that is, whithout any user constraints applied). For AutoContactTerminal, this is the Box of the supporting external component, and for all others the bounding box of the owning GCell.

    - -

    Reimplemented from AutoContact.

    - -

    References AutoContact::getAnchor(), GCell::getBoundingBox(), Occurrence::getEntity(), RoutingPad::getOccurrence(), Transformation::getOrientation(), Occurrence::getPath(), Component::getPosition(), RoutingPad::getSourcePosition(), Segment::getSourcePosition(), RoutingPad::getTargetPosition(), Segment::getTargetPosition(), Path::getTransformation(), and DbU::getValueString().

    - -
    -
    - -

    ◆ getSegment()

    - -
    -
    - - - - - -
    - - - - - - - - -
    AutoSegment * getSegment (unsigned int index) const
    -
    -virtual
    -
    -

    Returns: The nth anchored AutoSegment. The index is significant:

      -
    • 0 : first horizontal (h1).
    • -
    • 1 : second horizontal (h2).
    • -
    • 2 : first vertical (b1).
    • -
    • 3 : second vertical (b2).
    • -
    -

    Not all the indexes are filled for every AutoContact. For example Turn have h1 and b1, and HTee have h1, h2 and v1.

    - -

    Implements AutoContact.

    - -

    References AutoSegment::isHorizontal(), and AutoSegment::isVertical().

    - -
    -
    - -

    ◆ getOpposite()

    - -
    -
    - - - - - -
    - - - - - - - - -
    AutoSegment * getOpposite (const AutoSegmentreference) const
    -
    -virtual
    -
    -

    Returns: The other AutoSegment the same direction as reference, this is only meaningful on AutoContactHTee or AutoContactVTee. If there is no opposite, NULL is returned.

    - -

    Implements AutoContact.

    - -
    -
    - -

    ◆ getPerpandicular()

    - -
    -
    - - - - - -
    - - - - - - - - -
    AutoSegment * getPerpandicular (const AutoSegmentreference) const
    -
    -virtual
    -
    -

    Returns: The AutoSegment in the perpandicular direction to reference, this is only meaningful on AutoContacTurn. It there is no unique perpandicular, NULL is returned.

    - -

    Implements AutoContact.

    - -
    -
    - -

    ◆ updateGeometry()

    - - - -

    ◆ updateTopology()

    - -
    -
    - - - - - -
    - - - - - - - -
    void updateTopology ()
    -
    -virtual
    -
    -

    Restore the topology (i.e. connexity) of the contact after the incident segment has changed layer.

    -

    Based on the layer depth delta between the terminal and the segment three case can occurs:

      -
    • The delta is zero, then just sets the layer of the contact to the common metal layer.
    • -
    • The delta is one, then sets the contact layer to VIA connecting the two layers.
    • -
    • The delta is two, then create a dogleg to restore the connexity. Depending on whether the terminal was attached to the source or target, sets the layer of the segments.
    • -
    • A delta of more than two is an error, and must never occurs.
    • -
    -

    As, by default, the perpandicular is set in the layer above the parallel, it may be necessary to adjust his layer as well (to the one below).

    -
    -updateTopologyTerminal.png -
    -Update Terminal Topology
    - -

    Implements AutoContact.

    - -

    References DebugSession::close(), Katabatic::CntBadTopology, AutoContact::getAnchor(), RoutingGauge::getContactLayer(), AutoContact::getLayer(), AutoSegment::getLayer(), RoutingGauge::getLayerDepth(), AutoContact::getNet(), Session::getRoutingGauge(), RoutingGauge::getRoutingLayer(), AutoSegment::invalidate(), AutoContact::isInvalidatedCache(), AutoSegment::makeDogleg(), DebugSession::open(), AutoContact::setLayer(), and AutoContact::showTopologyError().

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoContactTerminal.js b/deprecated/katabatic/doc/html/classKatabatic_1_1AutoContactTerminal.js deleted file mode 100644 index 3505f53d..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoContactTerminal.js +++ /dev/null @@ -1,10 +0,0 @@ -var classKatabatic_1_1AutoContactTerminal = -[ - [ "create", "classKatabatic_1_1AutoContactTerminal.html#a0d440e51525b09acc843f1d345850487", null ], - [ "create", "classKatabatic_1_1AutoContactTerminal.html#a60a625bca2cdfebcdcc7826ab781d1bb", null ], - [ "getNativeConstraintBox", "classKatabatic_1_1AutoContactTerminal.html#a762d33db26927e6db939a7420bb95743", null ], - [ "getSegment", "classKatabatic_1_1AutoContactTerminal.html#a2f7d64767002f3bf2bbdf2f8f0e80105", null ], - [ "getOpposite", "classKatabatic_1_1AutoContactTerminal.html#aaf175a76573a5e3505b24fb2a8b0414f", null ], - [ "updateGeometry", "classKatabatic_1_1AutoContactTerminal.html#a3e218f6934c51380fb15d0e2bd380071", null ], - [ "updateTopology", "classKatabatic_1_1AutoContactTerminal.html#af5bf1f5e71204ef84346e4e036175431", null ] -]; \ No newline at end of file diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoContactTerminal__inherit__graph.map b/deprecated/katabatic/doc/html/classKatabatic_1_1AutoContactTerminal__inherit__graph.map deleted file mode 100644 index f890035b..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoContactTerminal__inherit__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoContactTerminal__inherit__graph.md5 b/deprecated/katabatic/doc/html/classKatabatic_1_1AutoContactTerminal__inherit__graph.md5 deleted file mode 100644 index a3bfc811..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoContactTerminal__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -7b080442e8cabc4839b0ac5b43523b60 \ No newline at end of file diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoContactTerminal__inherit__graph.png b/deprecated/katabatic/doc/html/classKatabatic_1_1AutoContactTerminal__inherit__graph.png deleted file mode 100644 index 5eaac920..00000000 Binary files a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoContactTerminal__inherit__graph.png and /dev/null differ diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoContactTurn-members.html b/deprecated/katabatic/doc/html/classKatabatic_1_1AutoContactTurn-members.html deleted file mode 100644 index 6a3f5219..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoContactTurn-members.html +++ /dev/null @@ -1,141 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - - -
    -
    -
    AutoContactTurn Member List
    -
    -
    - -

    This is the complete list of members for AutoContactTurn, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    _getTopology(Contact *, Component *&anchor, Horizontal **&, Vertical **&, size_t)AutoContactprotectedstatic
    base() constAutoContactinline
    canDestroy(unsigned int flags=0) constAutoContact
    canMoveUp(const AutoSegment *moved) constAutoContact
    checkTopology()AutoContactvirtual
    create(GCell *, Net *, const Layer *)AutoContactTurnstatic
    getAllocateds()AutoContactstatic
    getAnchor() constAutoContactinline
    getAnchorHook()AutoContactinline
    getBodyHook()AutoContactinline
    getBoundingBox() constAutoContactvirtual
    getCBXMax() constAutoContactinline
    getCBXMin() constAutoContactinline
    getCBYMax() constAutoContactinline
    getCBYMin() constAutoContactinline
    getCenter() constAutoContactinline
    getConstraintBox() constAutoContactinline
    getDx() constAutoContactinline
    getDy() constAutoContactinline
    getGCell() constAutoContactinline
    getHalfHeight() constAutoContactinline
    getHalfWidth() constAutoContactinline
    getHeight() constAutoContactinline
    getId() constAutoContactinline
    getLayer() constAutoContactinline
    getLengths(DbU::Unit *lengths, AutoSegment::DepthLengthSet &)AutoContact
    getMaxDepth() constAutoContact
    getMinDepth() constAutoContact
    getName() constAutoContactvirtual
    getNativeConstraintBox() constAutoContactvirtual
    getNet() constAutoContactinline
    getOpposite(const AutoSegment *) constAutoContactTurnvirtual
    getPerpandicular(const AutoSegment *) constAutoContactTurnvirtual
    getPosition() constAutoContactinline
    getSegment(unsigned int) constAutoContactTurnvirtual
    getSlaveComponents() constAutoContactinline
    getStaticName()AutoContactstatic
    getUConstraints(unsigned int direction) constAutoContact
    getWidth() constAutoContactinline
    getX() constAutoContactinline
    getY() constAutoContactinline
    hasBadTopology() constAutoContactinline
    intersectConstraintBox(Box &box) constAutoContact
    invalidate(unsigned int flags=0)AutoContact
    isFixed() constAutoContactinline
    isHTee() constAutoContactinline
    isInCreationStage() constAutoContactinline
    isInvalidated() constAutoContactinline
    isInvalidatedCache() constAutoContactinline
    isTee(unsigned int direction) constAutoContact
    isTurn() constAutoContactinline
    isVTee() constAutoContactinline
    migrateConstraintBox(AutoContact *other)AutoContact
    restrictConstraintBox(DbU::Unit constraintMin, DbU::Unit constraintMax, unsigned int flags=KbWarnOnError)AutoContact
    setCBXMax(DbU::Unit xMax)AutoContactinline
    setCBXMin(DbU::Unit xMin)AutoContactinline
    setCBYMax(DbU::Unit yMax)AutoContactinline
    setCBYMin(DbU::Unit yMin)AutoContactinline
    setConstraintBox(const Box &box)AutoContact
    setDx(DbU::Unit)AutoContactinline
    setDy(DbU::Unit)AutoContactinline
    setGCell(GCell *)AutoContact
    setHeight(DbU::Unit)AutoContactinline
    setLayer(const Layer *)AutoContactinline
    setOffset(DbU::Unit dx, DbU::Unit dy)AutoContactinline
    setPosition(DbU::Unit width, DbU::Unit height)AutoContactinline
    setPosition(const Point &)AutoContactinline
    setSizes(DbU::Unit width, DbU::Unit height)AutoContactinline
    setWidth(DbU::Unit)AutoContactinline
    setX(DbU::Unit)AutoContactinline
    setY(DbU::Unit)AutoContactinline
    showTopologyError(const std::string &, unsigned int flags=0)AutoContact
    translate(const DbU::Unit &tx, const DbU::Unit &ty)AutoContactvirtual
    updateGeometry()AutoContactTurnvirtual
    updateTopology()AutoContactTurnvirtual
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoContactTurn.html b/deprecated/katabatic/doc/html/classKatabatic_1_1AutoContactTurn.html deleted file mode 100644 index ee452d8f..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoContactTurn.html +++ /dev/null @@ -1,470 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - - -
    - -
    -
    AutoContactTurn Class Reference
    -
    -
    - -

    AutoContact Turn (one H, one V) - More...

    -
    -Inheritance diagram for AutoContactTurn:
    -
    -
    Inheritance graph
    - - - -
    [legend]
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    virtual AutoSegmentgetOpposite (const AutoSegment *) const
     
    virtual AutoSegmentgetPerpandicular (const AutoSegment *) const
     
    virtual AutoSegmentgetSegment (unsigned int) const
     
    virtual void updateGeometry ()
     
    virtual void updateTopology ()
     
    - Public Member Functions inherited from AutoContact
    HookgetBodyHook ()
     
    HookgetAnchorHook ()
     
    ComponentgetAnchor () const
     
    NetgetNet () const
     
    const LayergetLayer () const
     
    DbU::Unit getX () const
     
    DbU::Unit getY () const
     
    DbU::Unit getDx () const
     
    DbU::Unit getDy () const
     
    Point getCenter () const
     
    Point getPosition () const
     
    DbU::Unit getWidth () const
     
    DbU::Unit getHalfWidth () const
     
    DbU::Unit getHeight () const
     
    DbU::Unit getHalfHeight () const
     
    Components getSlaveComponents () const
     
    void setLayer (const Layer *)
     
    void setWidth (DbU::Unit)
     
    void setHeight (DbU::Unit)
     
    void setSizes (DbU::Unit width, DbU::Unit height)
     
    void setX (DbU::Unit)
     
    void setY (DbU::Unit)
     
    void setPosition (DbU::Unit width, DbU::Unit height)
     
    void setPosition (const Point &)
     
    void setDx (DbU::Unit)
     
    void setDy (DbU::Unit)
     
    void setOffset (DbU::Unit dx, DbU::Unit dy)
     
    virtual void translate (const DbU::Unit &tx, const DbU::Unit &ty)
     
    bool isInCreationStage () const
     
    bool isInvalidated () const
     
    bool isInvalidatedCache () const
     
    bool isTurn () const
     
    bool isTee (unsigned int direction) const
     
    bool isHTee () const
     
    bool isVTee () const
     
    bool isFixed () const
     
    bool hasBadTopology () const
     
    bool canDestroy (unsigned int flags=0) const
     
    bool canMoveUp (const AutoSegment *moved) const
     
    Contactbase () const
     
    virtual const NamegetName () const
     
    size_t getId () const
     
    virtual Box getBoundingBox () const
     
    GCellgetGCell () const
     
    unsigned int getMinDepth () const
     
    unsigned int getMaxDepth () const
     
    void getLengths (DbU::Unit *lengths, AutoSegment::DepthLengthSet &)
     
    virtual Box getNativeConstraintBox () const
     
    Interval getUConstraints (unsigned int direction) const
     
    DbU::Unit getCBXMin () const
     
    DbU::Unit getCBXMax () const
     
    DbU::Unit getCBYMin () const
     
    DbU::Unit getCBYMax () const
     
    Box getConstraintBox () const
     
    BoxintersectConstraintBox (Box &box) const
     
    void invalidate (unsigned int flags=0)
     
    void showTopologyError (const std::string &, unsigned int flags=0)
     
    virtual void checkTopology ()
     
    void setGCell (GCell *)
     
    void setCBXMin (DbU::Unit xMin)
     
    void setCBXMax (DbU::Unit xMax)
     
    void setCBYMin (DbU::Unit yMin)
     
    void setCBYMax (DbU::Unit yMax)
     
    void setConstraintBox (const Box &box)
     
    bool restrictConstraintBox (DbU::Unit constraintMin, DbU::Unit constraintMax, unsigned int flags=KbWarnOnError)
     
    void migrateConstraintBox (AutoContact *other)
     
    - - - - - - - - -

    -Static Public Member Functions

    static AutoContactTurncreate (GCell *, Net *, const Layer *)
     
    - Static Public Member Functions inherited from AutoContact
    static size_t getAllocateds ()
     
    static const NamegetStaticName ()
     
    - - - - -

    -Additional Inherited Members

    - Static Protected Member Functions inherited from AutoContact
    static void _getTopology (Contact *, Component *&anchor, Horizontal **&, Vertical **&, size_t)
     
    -

    Detailed Description

    -

    AutoContact Turn (one H, one V)

    -

    AutoContact to make a turn (one H, one V).

    -

    Member Function Documentation

    - -

    ◆ create()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    AutoContactTurn * create (GCellgcell,
    Netnet,
    const Layerlayer 
    )
    -
    -static
    -
    -
    - -

    ◆ getOpposite()

    - -
    -
    - - - - - -
    - - - - - - - - -
    AutoSegment * getOpposite (const AutoSegmentreference) const
    -
    -virtual
    -
    -

    Returns: The other AutoSegment the same direction as reference, this is only meaningful on AutoContactHTee or AutoContactVTee. If there is no opposite, NULL is returned.

    - -

    Implements AutoContact.

    - -
    -
    - -

    ◆ getPerpandicular()

    - -
    -
    - - - - - -
    - - - - - - - - -
    AutoSegment * getPerpandicular (const AutoSegmentreference) const
    -
    -virtual
    -
    -

    Returns: The AutoSegment in the perpandicular direction to reference, this is only meaningful on AutoContacTurn. It there is no unique perpandicular, NULL is returned.

    - -

    Implements AutoContact.

    - -
    -
    - -

    ◆ getSegment()

    - -
    -
    - - - - - -
    - - - - - - - - -
    AutoSegment * getSegment (unsigned int index) const
    -
    -virtual
    -
    -

    Returns: The nth anchored AutoSegment. The index is significant:

      -
    • 0 : first horizontal (h1).
    • -
    • 1 : second horizontal (h2).
    • -
    • 2 : first vertical (b1).
    • -
    • 3 : second vertical (b2).
    • -
    -

    Not all the indexes are filled for every AutoContact. For example Turn have h1 and b1, and HTee have h1, h2 and v1.

    - -

    Implements AutoContact.

    - -
    -
    - -

    ◆ updateGeometry()

    - -
    -
    - - - - - -
    - - - - - - - -
    void updateGeometry ()
    -
    -virtual
    -
    -

    Compute the new position of the AutoContact based on the AutoSegment positions. The Session mechanism ensure that all AutoSegment are set into their final positions before calling this updator.

    - -

    Implements AutoContact.

    - -

    References AutoContact::base(), DebugSession::close(), Katabatic::CntInvalidated, AutoContact::getNet(), AutoContact::getX(), AutoContact::getY(), AutoContact::hasBadTopology(), Go::invalidate(), AutoContact::isInvalidatedCache(), DebugSession::open(), AutoContact::setX(), and AutoContact::setY().

    - -
    -
    - -

    ◆ updateTopology()

    - -
    -
    - - - - - -
    - - - - - - - -
    void updateTopology ()
    -
    -virtual
    -
    -

    Restore the topology (i.e. connexity) of the contact after one or both connected segments has changed layer.

    -

    Based on the layer depth delta between the two perpandiculars segments. Three case can occurs:

      -
    • The delta is zero, then just sets the layer of the contact to the common metal layer (turn in same layer).
    • -
    • The delta is one, then sets the contact layer to VIA connecting the two layers.
    • -
    • The delta cannot be equal to two, due to the alternatives routing directions, it would mean a turn connecting two horizontals (or verticals) in different layers.
    • -
    • The delta is three, then create a dogleg to restore the connexity. The dogleg will be created on the connected segment which as been layer invalidated. If both of them have been invalidated, the horizontal one is preferred.
    • -
    • A delta of more than three is an error, and must never occurs.
    • -
    -
    -updateTopologyTurn.png -
    -Update Turn Topology
    - -

    Implements AutoContact.

    - -

    References DebugSession::close(), Katabatic::CntBadTopology, RoutingGauge::getContactLayer(), AutoContact::getLayer(), AutoSegment::getLayer(), RoutingGauge::getLayerDepth(), AutoContact::getNet(), Session::getRoutingGauge(), RoutingGauge::getRoutingLayer(), AutoContact::hasBadTopology(), AutoSegment::invalidate(), AutoContact::isInvalidatedCache(), AutoSegment::isInvalidatedLayer(), AutoSegment::makeDogleg(), DebugSession::open(), AutoContact::setLayer(), and AutoContact::showTopologyError().

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoContactTurn.js b/deprecated/katabatic/doc/html/classKatabatic_1_1AutoContactTurn.js deleted file mode 100644 index fc6346e8..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoContactTurn.js +++ /dev/null @@ -1,8 +0,0 @@ -var classKatabatic_1_1AutoContactTurn = -[ - [ "create", "classKatabatic_1_1AutoContactTurn.html#a9d4adb00ccea486f5478bb24e171bdb3", null ], - [ "getOpposite", "classKatabatic_1_1AutoContactTurn.html#aaf175a76573a5e3505b24fb2a8b0414f", null ], - [ "getSegment", "classKatabatic_1_1AutoContactTurn.html#a2f7d64767002f3bf2bbdf2f8f0e80105", null ], - [ "updateGeometry", "classKatabatic_1_1AutoContactTurn.html#a3e218f6934c51380fb15d0e2bd380071", null ], - [ "updateTopology", "classKatabatic_1_1AutoContactTurn.html#af5bf1f5e71204ef84346e4e036175431", null ] -]; \ No newline at end of file diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoContactTurn__inherit__graph.map b/deprecated/katabatic/doc/html/classKatabatic_1_1AutoContactTurn__inherit__graph.map deleted file mode 100644 index b067b9ee..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoContactTurn__inherit__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoContactTurn__inherit__graph.md5 b/deprecated/katabatic/doc/html/classKatabatic_1_1AutoContactTurn__inherit__graph.md5 deleted file mode 100644 index 741f4c9e..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoContactTurn__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -e4d281beb0b1961880ba5afb89f0ef16 \ No newline at end of file diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoContactTurn__inherit__graph.png b/deprecated/katabatic/doc/html/classKatabatic_1_1AutoContactTurn__inherit__graph.png deleted file mode 100644 index e9348e9f..00000000 Binary files a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoContactTurn__inherit__graph.png and /dev/null differ diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoContactVTee-members.html b/deprecated/katabatic/doc/html/classKatabatic_1_1AutoContactVTee-members.html deleted file mode 100644 index 7911b9f7..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoContactVTee-members.html +++ /dev/null @@ -1,141 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - - -
    -
    -
    AutoContactVTee Member List
    -
    -
    - -

    This is the complete list of members for AutoContactVTee, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    _getTopology(Contact *, Component *&anchor, Horizontal **&, Vertical **&, size_t)AutoContactprotectedstatic
    base() constAutoContactinline
    canDestroy(unsigned int flags=0) constAutoContact
    canMoveUp(const AutoSegment *moved) constAutoContact
    checkTopology()AutoContactvirtual
    create(GCell *, Net *, const Layer *)AutoContactVTeestatic
    getAllocateds()AutoContactstatic
    getAnchor() constAutoContactinline
    getAnchorHook()AutoContactinline
    getBodyHook()AutoContactinline
    getBoundingBox() constAutoContactvirtual
    getCBXMax() constAutoContactinline
    getCBXMin() constAutoContactinline
    getCBYMax() constAutoContactinline
    getCBYMin() constAutoContactinline
    getCenter() constAutoContactinline
    getConstraintBox() constAutoContactinline
    getDx() constAutoContactinline
    getDy() constAutoContactinline
    getGCell() constAutoContactinline
    getHalfHeight() constAutoContactinline
    getHalfWidth() constAutoContactinline
    getHeight() constAutoContactinline
    getId() constAutoContactinline
    getLayer() constAutoContactinline
    getLengths(DbU::Unit *lengths, AutoSegment::DepthLengthSet &)AutoContact
    getMaxDepth() constAutoContact
    getMinDepth() constAutoContact
    getName() constAutoContactvirtual
    getNativeConstraintBox() constAutoContactvirtual
    getNet() constAutoContactinline
    getOpposite(const AutoSegment *) constAutoContactVTeevirtual
    getPerpandicular(const AutoSegment *) constAutoContactVTeevirtual
    getPosition() constAutoContactinline
    getSegment(unsigned int) constAutoContactVTeevirtual
    getSlaveComponents() constAutoContactinline
    getStaticName()AutoContactstatic
    getUConstraints(unsigned int direction) constAutoContact
    getWidth() constAutoContactinline
    getX() constAutoContactinline
    getY() constAutoContactinline
    hasBadTopology() constAutoContactinline
    intersectConstraintBox(Box &box) constAutoContact
    invalidate(unsigned int flags=0)AutoContact
    isFixed() constAutoContactinline
    isHTee() constAutoContactinline
    isInCreationStage() constAutoContactinline
    isInvalidated() constAutoContactinline
    isInvalidatedCache() constAutoContactinline
    isTee(unsigned int direction) constAutoContact
    isTurn() constAutoContactinline
    isVTee() constAutoContactinline
    migrateConstraintBox(AutoContact *other)AutoContact
    restrictConstraintBox(DbU::Unit constraintMin, DbU::Unit constraintMax, unsigned int flags=KbWarnOnError)AutoContact
    setCBXMax(DbU::Unit xMax)AutoContactinline
    setCBXMin(DbU::Unit xMin)AutoContactinline
    setCBYMax(DbU::Unit yMax)AutoContactinline
    setCBYMin(DbU::Unit yMin)AutoContactinline
    setConstraintBox(const Box &box)AutoContact
    setDx(DbU::Unit)AutoContactinline
    setDy(DbU::Unit)AutoContactinline
    setGCell(GCell *)AutoContact
    setHeight(DbU::Unit)AutoContactinline
    setLayer(const Layer *)AutoContactinline
    setOffset(DbU::Unit dx, DbU::Unit dy)AutoContactinline
    setPosition(DbU::Unit width, DbU::Unit height)AutoContactinline
    setPosition(const Point &)AutoContactinline
    setSizes(DbU::Unit width, DbU::Unit height)AutoContactinline
    setWidth(DbU::Unit)AutoContactinline
    setX(DbU::Unit)AutoContactinline
    setY(DbU::Unit)AutoContactinline
    showTopologyError(const std::string &, unsigned int flags=0)AutoContact
    translate(const DbU::Unit &tx, const DbU::Unit &ty)AutoContactvirtual
    updateGeometry()AutoContactVTeevirtual
    updateTopology()AutoContactVTeevirtual
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoContactVTee.html b/deprecated/katabatic/doc/html/classKatabatic_1_1AutoContactVTee.html deleted file mode 100644 index a8a9dc53..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoContactVTee.html +++ /dev/null @@ -1,460 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - - -
    - -
    -
    AutoContactVTee Class Reference
    -
    -
    - -

    AutoContact V-Tee (one H, two V) - More...

    -
    -Inheritance diagram for AutoContactVTee:
    -
    -
    Inheritance graph
    - - - -
    [legend]
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    virtual AutoSegmentgetOpposite (const AutoSegment *) const
     
    virtual AutoSegmentgetPerpandicular (const AutoSegment *) const
     
    virtual AutoSegmentgetSegment (unsigned int) const
     
    virtual void updateGeometry ()
     
    virtual void updateTopology ()
     
    - Public Member Functions inherited from AutoContact
    HookgetBodyHook ()
     
    HookgetAnchorHook ()
     
    ComponentgetAnchor () const
     
    NetgetNet () const
     
    const LayergetLayer () const
     
    DbU::Unit getX () const
     
    DbU::Unit getY () const
     
    DbU::Unit getDx () const
     
    DbU::Unit getDy () const
     
    Point getCenter () const
     
    Point getPosition () const
     
    DbU::Unit getWidth () const
     
    DbU::Unit getHalfWidth () const
     
    DbU::Unit getHeight () const
     
    DbU::Unit getHalfHeight () const
     
    Components getSlaveComponents () const
     
    void setLayer (const Layer *)
     
    void setWidth (DbU::Unit)
     
    void setHeight (DbU::Unit)
     
    void setSizes (DbU::Unit width, DbU::Unit height)
     
    void setX (DbU::Unit)
     
    void setY (DbU::Unit)
     
    void setPosition (DbU::Unit width, DbU::Unit height)
     
    void setPosition (const Point &)
     
    void setDx (DbU::Unit)
     
    void setDy (DbU::Unit)
     
    void setOffset (DbU::Unit dx, DbU::Unit dy)
     
    virtual void translate (const DbU::Unit &tx, const DbU::Unit &ty)
     
    bool isInCreationStage () const
     
    bool isInvalidated () const
     
    bool isInvalidatedCache () const
     
    bool isTurn () const
     
    bool isTee (unsigned int direction) const
     
    bool isHTee () const
     
    bool isVTee () const
     
    bool isFixed () const
     
    bool hasBadTopology () const
     
    bool canDestroy (unsigned int flags=0) const
     
    bool canMoveUp (const AutoSegment *moved) const
     
    Contactbase () const
     
    virtual const NamegetName () const
     
    size_t getId () const
     
    virtual Box getBoundingBox () const
     
    GCellgetGCell () const
     
    unsigned int getMinDepth () const
     
    unsigned int getMaxDepth () const
     
    void getLengths (DbU::Unit *lengths, AutoSegment::DepthLengthSet &)
     
    virtual Box getNativeConstraintBox () const
     
    Interval getUConstraints (unsigned int direction) const
     
    DbU::Unit getCBXMin () const
     
    DbU::Unit getCBXMax () const
     
    DbU::Unit getCBYMin () const
     
    DbU::Unit getCBYMax () const
     
    Box getConstraintBox () const
     
    BoxintersectConstraintBox (Box &box) const
     
    void invalidate (unsigned int flags=0)
     
    void showTopologyError (const std::string &, unsigned int flags=0)
     
    virtual void checkTopology ()
     
    void setGCell (GCell *)
     
    void setCBXMin (DbU::Unit xMin)
     
    void setCBXMax (DbU::Unit xMax)
     
    void setCBYMin (DbU::Unit yMin)
     
    void setCBYMax (DbU::Unit yMax)
     
    void setConstraintBox (const Box &box)
     
    bool restrictConstraintBox (DbU::Unit constraintMin, DbU::Unit constraintMax, unsigned int flags=KbWarnOnError)
     
    void migrateConstraintBox (AutoContact *other)
     
    - - - - - - - - -

    -Static Public Member Functions

    static AutoContactVTeecreate (GCell *, Net *, const Layer *)
     
    - Static Public Member Functions inherited from AutoContact
    static size_t getAllocateds ()
     
    static const NamegetStaticName ()
     
    - - - - -

    -Additional Inherited Members

    - Static Protected Member Functions inherited from AutoContact
    static void _getTopology (Contact *, Component *&anchor, Horizontal **&, Vertical **&, size_t)
     
    -

    Detailed Description

    -

    AutoContact V-Tee (one H, two V)

    -

    AutoContact to build a vertical tee (two V, one H).

    -

    Member Function Documentation

    - -

    ◆ create()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    AutoContactVTee * create (GCellgcell,
    Netnet,
    const Layerlayer 
    )
    -
    -static
    -
    -
    Parameters
    - - - - -
    gcellThe GCell into which create the AutoContact.
    netThe Net to which this AutoContact belongs.
    layerThe Layer of the AutoContact.
    -
    -
    -
    Returns
    The created AutoContactVTee.
    -

    Create a new AutoContactVTee.

    - -

    References Katabatic::CntInCreationStage, and Contact::create().

    - -

    Referenced by GCellTopology::_do_xG(), GCellTopology::_do_xG_xM1_xM3(), GCellTopology::_do_xG_xM2(), and GCellTopology::_do_xG_xM3().

    - -
    -
    - -

    ◆ getOpposite()

    - -
    -
    - - - - - -
    - - - - - - - - -
    AutoSegment * getOpposite (const AutoSegmentreference) const
    -
    -virtual
    -
    -

    Returns: The other AutoSegment the same direction as reference, this is only meaningful on AutoContactHTee or AutoContactVTee. If there is no opposite, NULL is returned.

    - -

    Implements AutoContact.

    - -
    -
    - -

    ◆ getPerpandicular()

    - -
    -
    - - - - - -
    - - - - - - - - -
    AutoSegment * getPerpandicular (const AutoSegmentreference) const
    -
    -virtual
    -
    -

    Returns: The AutoSegment in the perpandicular direction to reference, this is only meaningful on AutoContacTurn. It there is no unique perpandicular, NULL is returned.

    - -

    Implements AutoContact.

    - -
    -
    - -

    ◆ getSegment()

    - -
    -
    - - - - - -
    - - - - - - - - -
    AutoSegment * getSegment (unsigned int index) const
    -
    -virtual
    -
    -

    Returns: The nth anchored AutoSegment. The index is significant:

      -
    • 0 : first horizontal (h1).
    • -
    • 1 : second horizontal (h2).
    • -
    • 2 : first vertical (b1).
    • -
    • 3 : second vertical (b2).
    • -
    -

    Not all the indexes are filled for every AutoContact. For example Turn have h1 and b1, and HTee have h1, h2 and v1.

    - -

    Implements AutoContact.

    - -
    -
    - -

    ◆ updateGeometry()

    - -
    -
    - - - - - -
    - - - - - - - -
    void updateGeometry ()
    -
    -virtual
    -
    -

    Compute the new position of the AutoContact based on the AutoSegment positions. The Session mechanism ensure that all AutoSegment are set into their final positions before calling this updator.

    - -

    Implements AutoContact.

    - -

    References AutoContact::base(), DebugSession::close(), Katabatic::CntInvalidated, AutoContact::getNet(), AutoContact::getX(), AutoContact::getY(), AutoContact::hasBadTopology(), Go::invalidate(), AutoContact::isInvalidatedCache(), DebugSession::open(), AutoContact::setX(), and AutoContact::setY().

    - -
    -
    - -

    ◆ updateTopology()

    - -
    -
    - - - - - -
    - - - - - - - -
    void updateTopology ()
    -
    -virtual
    -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoContactVTee.js b/deprecated/katabatic/doc/html/classKatabatic_1_1AutoContactVTee.js deleted file mode 100644 index 35e17500..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoContactVTee.js +++ /dev/null @@ -1,8 +0,0 @@ -var classKatabatic_1_1AutoContactVTee = -[ - [ "create", "classKatabatic_1_1AutoContactVTee.html#ab6932aef1faf4881375cc989f5cd9c2c", null ], - [ "getOpposite", "classKatabatic_1_1AutoContactVTee.html#aaf175a76573a5e3505b24fb2a8b0414f", null ], - [ "getSegment", "classKatabatic_1_1AutoContactVTee.html#a2f7d64767002f3bf2bbdf2f8f0e80105", null ], - [ "updateGeometry", "classKatabatic_1_1AutoContactVTee.html#a3e218f6934c51380fb15d0e2bd380071", null ], - [ "updateTopology", "classKatabatic_1_1AutoContactVTee.html#af5bf1f5e71204ef84346e4e036175431", null ] -]; \ No newline at end of file diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoContactVTee__inherit__graph.map b/deprecated/katabatic/doc/html/classKatabatic_1_1AutoContactVTee__inherit__graph.map deleted file mode 100644 index 92a46683..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoContactVTee__inherit__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoContactVTee__inherit__graph.md5 b/deprecated/katabatic/doc/html/classKatabatic_1_1AutoContactVTee__inherit__graph.md5 deleted file mode 100644 index ac2c3a0f..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoContactVTee__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -ec4f3d0fb8d64f1b5cfffba37740147d \ No newline at end of file diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoContactVTee__inherit__graph.png b/deprecated/katabatic/doc/html/classKatabatic_1_1AutoContactVTee__inherit__graph.png deleted file mode 100644 index 6843327b..00000000 Binary files a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoContactVTee__inherit__graph.png and /dev/null differ diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoContact__inherit__graph.map b/deprecated/katabatic/doc/html/classKatabatic_1_1AutoContact__inherit__graph.map deleted file mode 100644 index c7511989..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoContact__inherit__graph.map +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoContact__inherit__graph.md5 b/deprecated/katabatic/doc/html/classKatabatic_1_1AutoContact__inherit__graph.md5 deleted file mode 100644 index b75b7e1d..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoContact__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -fd724acc32cb9d1853d00c36148edac4 \ No newline at end of file diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoContact__inherit__graph.png b/deprecated/katabatic/doc/html/classKatabatic_1_1AutoContact__inherit__graph.png deleted file mode 100644 index 8ad72b98..00000000 Binary files a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoContact__inherit__graph.png and /dev/null differ diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoHorizontal-members.html b/deprecated/katabatic/doc/html/classKatabatic_1_1AutoHorizontal-members.html deleted file mode 100644 index 862107dd..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoHorizontal-members.html +++ /dev/null @@ -1,196 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - - -
    -
    -
    AutoHorizontal Member List
    -
    -
    - -

    This is the complete list of members for AutoHorizontal, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    _canSlacken() constAutoHorizontalvirtual
    _getFlags() constAutoSegmentinlineprotected
    _invalidate()AutoSegmentprotected
    _makeDogleg(GCell *, unsigned int flags)AutoHorizontalvirtual
    _postCreate()AutoHorizontalprotectedvirtual
    _preCreate(AutoContact *source, AutoContact *target)AutoSegmentprotectedstatic
    _preDestroy()AutoHorizontalprotectedvirtual
    Katabatic::AutoSegment::AutoSegment(Segment *segment)AutoSegmentprotected
    base()AutoHorizontalvirtual
    base() constAutoHorizontalvirtual
    canDogleg(Interval)AutoSegment
    canMoveULeft(float reserve=0.0) constAutoHorizontalvirtual
    canMoveUp(float reserve=0.0, unsigned int flags=0) constAutoSegment
    canMoveURight(float reserve=0.0) constAutoHorizontalvirtual
    canonize(unsigned int flags=KbNoFlags)AutoSegment
    canPivotDown(float reserve=0.0, unsigned int flags=0) constAutoSegment
    canPivotUp(float reserve=0.0, unsigned int flags=0) constAutoSegment
    canReduce() constAutoSegment
    canSlacken(unsigned int flags=0) constAutoSegment
    checkConstraints() constAutoHorizontalvirtual
    checkPositions() constAutoHorizontalvirtual
    computeOptimal(set< AutoSegment *> &processeds)AutoSegment
    computeTerminal()AutoSegment
    create(AutoContact *source, AutoContact *target, Segment *hurricaneSegment)AutoSegmentstatic
    create(AutoContact *source, AutoContact *target, unsigned int dir, size_t depth=RoutingGauge::nlayerdepth)AutoSegmentstatic
    getAligneds(unsigned int flags=KbNoFlags)AutoSegment
    getAnchors() constAutoSegmentinline
    getAutoSource() constAutoSegmentinline
    getAutoTarget() constAutoSegmentinline
    getAxis() constAutoSegmentinline
    getBoundingBox() constAutoSegmentinline
    getCanonical(DbU::Unit &min, DbU::Unit &max)AutoSegmentvirtual
    getCanonical(Interval &i)AutoSegmentinline
    getCell() constAutoSegmentinline
    getConstraints(DbU::Unit &min, DbU::Unit &max) constAutoHorizontalvirtual
    Katabatic::AutoSegment::getConstraints(Interval &i) constAutoSegmentinline
    getCost(DbU::Unit axis) constAutoSegmentvirtual
    getDirection() constAutoHorizontalvirtual
    getDuSource() constAutoHorizontalvirtual
    getDuTarget() constAutoHorizontalvirtual
    getExtremity() constAutoSegmentinline
    getGCell() constAutoSegmentinline
    getGCells(vector< GCell *> &) constAutoHorizontalvirtual
    getHorizontal()AutoHorizontalvirtual
    getId() constAutoSegmentinline
    getLayer() constAutoSegmentinline
    getLength() constAutoSegmentinline
    getMinSpanU() constAutoSegment
    getNet() constAutoSegmentinline
    getOnSourceContact(unsigned int direction)AutoSegment
    getOnTargetContact(unsigned int direction)AutoSegment
    getOppositeAnchor(Component *) constAutoSegmentinline
    getOppositeAnchor(AutoContact *) constAutoSegment
    getOptimal(Interval &i) constAutoSegment
    getOptimalMax() constAutoSegmentinline
    getOptimalMin() constAutoSegmentinline
    getOrigin() constAutoSegmentinline
    getParent() constAutoSegmentinline
    getPerpandiculars()AutoSegment
    getPerpandicularsBound(set< AutoSegment *> &)AutoSegment
    getSlack() constAutoSegmentvirtual
    getSource() constAutoSegmentinline
    getSourceConstraints(unsigned int flags=0) constAutoHorizontalvirtual
    getSourceHook()AutoSegmentinline
    getSourcePosition() constAutoSegmentinline
    getSourceU() constAutoHorizontalvirtual
    getSourceX() constAutoSegmentinline
    getSourceY() constAutoSegmentinline
    getSpanU() constAutoHorizontalvirtual
    getTarget() constAutoSegmentinline
    getTargetConstraints(unsigned int flags=0) constAutoHorizontalvirtual
    getTargetHook()AutoSegmentinline
    getTargetPosition() constAutoSegmentinline
    getTargetU() constAutoHorizontalvirtual
    getTargetX() constAutoSegmentinline
    getTargetY() constAutoSegmentinline
    getUserConstraints() constAutoSegmentinline
    getVertical()AutoSegmentinlinevirtual
    getWidth() constAutoSegmentinline
    getX() constAutoSegmentvirtual
    getY() constAutoSegmentvirtual
    invalidate(unsigned int flags=KbPropagate)AutoSegmentvirtual
    invert()AutoSegmentinline
    isBipoint() constAutoSegmentinline
    isCanonical() constAutoSegmentinline
    isCreated() constAutoSegmentinline
    isDogleg() constAutoSegmentinline
    isFixed() constAutoSegmentinline
    isGlobal() constAutoSegmentinline
    isHorizontal() constAutoSegmentinline
    isInvalidated() constAutoSegmentinline
    isInvalidatedLayer() constAutoSegmentinline
    isLayerChange() constAutoSegmentinline
    isLocal() constAutoSegmentinline
    isReduced() constAutoSegmentinline
    isSlackened() constAutoSegmentinline
    isSpinBottom() constAutoSegmentinline
    isSpinTop() constAutoSegmentinline
    isSpinTopOrBottom() constAutoSegmentinline
    isStrap() constAutoSegmentinline
    isStrongTerminal(unsigned int flags=0) constAutoSegment
    isUnsetAxis() constAutoSegmentinline
    isVertical() constAutoSegmentinline
    isWeakTerminal() constAutoSegmentinline
    makeDogleg(AutoContact *)AutoSegment
    makeDogleg(Interval, unsigned int flags=KbNoFlags)AutoSegment
    makeDogleg(GCell *, unsigned int flags=KbNoFlags)AutoSegment
    mergeUserConstraints(const Interval &)AutoSegment
    moveULeft()AutoHorizontalvirtual
    moveURight()AutoHorizontalvirtual
    mustRaise() constAutoSegment
    raise()AutoSegment
    reduce()AutoSegment
    reduceDoglegLayer()AutoSegment
    resetUserConstraints()AutoSegmentinline
    revalidate()AutoSegment
    setAxis(DbU::Unit, unsigned int flags=KbNoFlags)AutoSegment
    setDuSource(DbU::Unit)AutoHorizontalvirtual
    setDuTarget(DbU::Unit)AutoHorizontalvirtual
    setFlags(unsigned int)AutoSegmentinline
    setLayer(const Layer *)AutoSegmentinline
    setOptimalMax(DbU::Unit max)AutoSegmentinline
    setOptimalMin(DbU::Unit min)AutoSegmentinline
    slacken(unsigned int flags)AutoSegment
    toConstraintAxis(unsigned int flags=KbRealignate)AutoSegment
    toOptimalAxis(unsigned int flags=KbRealignate)AutoSegment
    unsetFlags(unsigned int)AutoSegmentinline
    updateOrient()AutoHorizontalvirtual
    updatePositions()AutoHorizontalvirtual
    ~AutoSegment()AutoSegmentprotectedvirtual
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoHorizontal.html b/deprecated/katabatic/doc/html/classKatabatic_1_1AutoHorizontal.html deleted file mode 100644 index d12a78d4..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoHorizontal.html +++ /dev/null @@ -1,1247 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - - -
    - -
    -
    AutoHorizontal Class Reference
    -
    -
    - -

    Concrete Horizontal AutoSegment. - More...

    -
    -Inheritance diagram for AutoHorizontal:
    -
    -
    Inheritance graph
    - - - -
    [legend]
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    virtual bool _canSlacken () const
     
    virtual bool canMoveULeft (float reserve=0.0) const
     
    virtual bool canMoveURight (float reserve=0.0) const
     
    virtual Segmentbase ()
     
    virtual Segmentbase () const
     
    virtual HorizontalgetHorizontal ()
     
    virtual DbU::Unit getSourceU () const
     
    virtual DbU::Unit getTargetU () const
     
    virtual DbU::Unit getDuSource () const
     
    virtual DbU::Unit getDuTarget () const
     
    virtual Interval getSpanU () const
     
    virtual bool getConstraints (DbU::Unit &min, DbU::Unit &max) const
     
    virtual Interval getSourceConstraints (unsigned int flags=0) const
     
    virtual Interval getTargetConstraints (unsigned int flags=0) const
     
    virtual unsigned int getDirection () const
     
    virtual size_t getGCells (vector< GCell *> &) const
     
    virtual void setDuSource (DbU::Unit)
     
    virtual void setDuTarget (DbU::Unit)
     
    virtual void updateOrient ()
     
    virtual void updatePositions ()
     
    virtual bool checkPositions () const
     
    virtual bool checkConstraints () const
     
    virtual unsigned int _makeDogleg (GCell *, unsigned int flags)
     
    virtual bool moveULeft ()
     
    virtual bool moveURight ()
     
    - Public Member Functions inherited from AutoSegment
    virtual VerticalgetVertical ()
     
    CellgetCell () const
     
    NetgetNet () const
     
    const LayergetLayer () const
     
    Box getBoundingBox () const
     
    HookgetSourceHook ()
     
    HookgetTargetHook ()
     
    ContactgetSource () const
     
    ContactgetTarget () const
     
    ComponentgetOppositeAnchor (Component *) const
     
    Components getAnchors () const
     
    virtual DbU::Unit getX () const
     
    virtual DbU::Unit getY () const
     
    DbU::Unit getWidth () const
     
    DbU::Unit getLength () const
     
    DbU::Unit getSourcePosition () const
     
    DbU::Unit getTargetPosition () const
     
    DbU::Unit getSourceX () const
     
    DbU::Unit getSourceY () const
     
    DbU::Unit getTargetX () const
     
    DbU::Unit getTargetY () const
     
    void invert ()
     
    void setLayer (const Layer *)
     
    bool isHorizontal () const
     
    bool isVertical () const
     
    bool isGlobal () const
     
    bool isLocal () const
     
    bool isFixed () const
     
    bool isBipoint () const
     
    bool isWeakTerminal () const
     
    bool isStrongTerminal (unsigned int flags=0) const
     
    bool isLayerChange () const
     
    bool isSpinTop () const
     
    bool isSpinBottom () const
     
    bool isSpinTopOrBottom () const
     
    bool isReduced () const
     
    bool isStrap () const
     
    bool isDogleg () const
     
    bool isInvalidated () const
     
    bool isInvalidatedLayer () const
     
    bool isCreated () const
     
    bool isCanonical () const
     
    bool isUnsetAxis () const
     
    bool isSlackened () const
     
    bool canReduce () const
     
    bool mustRaise () const
     
    unsigned int canDogleg (Interval)
     
    bool canMoveUp (float reserve=0.0, unsigned int flags=0) const
     
    bool canPivotUp (float reserve=0.0, unsigned int flags=0) const
     
    bool canPivotDown (float reserve=0.0, unsigned int flags=0) const
     
    bool canSlacken (unsigned int flags=0) const
     
    unsigned long getId () const
     
    GCellgetGCell () const
     
    AutoContactgetAutoSource () const
     
    AutoContactgetAutoTarget () const
     
    AutoContactgetOppositeAnchor (AutoContact *) const
     
    size_t getPerpandicularsBound (set< AutoSegment *> &)
     
    AutoSegmentgetParent () const
     
    DbU::Unit getAxis () const
     
    DbU::Unit getOrigin () const
     
    DbU::Unit getExtremity () const
     
    Interval getMinSpanU () const
     
    bool getConstraints (Interval &i) const
     
    const IntervalgetUserConstraints () const
     
    virtual DbU::Unit getSlack () const
     
    DbU::Unit getOptimalMin () const
     
    DbU::Unit getOptimalMax () const
     
    IntervalgetOptimal (Interval &i) const
     
    virtual DbU::Unit getCost (DbU::Unit axis) const
     
    virtual AutoSegmentgetCanonical (DbU::Unit &min, DbU::Unit &max)
     
    AutoSegmentgetCanonical (Interval &i)
     
    void unsetFlags (unsigned int)
     
    void setFlags (unsigned int)
     
    void computeTerminal ()
     
    void mergeUserConstraints (const Interval &)
     
    void resetUserConstraints ()
     
    void setOptimalMin (DbU::Unit min)
     
    void setOptimalMax (DbU::Unit max)
     
    void revalidate ()
     
    AutoSegmentmakeDogleg (AutoContact *)
     
    unsigned int makeDogleg (Interval, unsigned int flags=KbNoFlags)
     
    unsigned int makeDogleg (GCell *, unsigned int flags=KbNoFlags)
     
    bool slacken (unsigned int flags)
     
    bool reduceDoglegLayer ()
     
    bool reduce ()
     
    bool raise ()
     
    AutoSegmentcanonize (unsigned int flags=KbNoFlags)
     
    virtual void invalidate (unsigned int flags=KbPropagate)
     
    void computeOptimal (set< AutoSegment *> &processeds)
     
    void setAxis (DbU::Unit, unsigned int flags=KbNoFlags)
     
    bool toConstraintAxis (unsigned int flags=KbRealignate)
     
    bool toOptimalAxis (unsigned int flags=KbRealignate)
     
    AutoSegments getOnSourceContact (unsigned int direction)
     
    AutoSegments getOnTargetContact (unsigned int direction)
     
    AutoSegments getAligneds (unsigned int flags=KbNoFlags)
     
    AutoSegments getPerpandiculars ()
     
    - - - - - - - - - - - - - - -

    -Protected Member Functions

    virtual void _postCreate ()
     
    virtual void _preDestroy ()
     
    - Protected Member Functions inherited from AutoSegment
     AutoSegment (Segment *segment)
     
    virtual ~AutoSegment ()
     
    void _invalidate ()
     
    unsigned int _getFlags () const
     
    - - - - - - - - - -

    -Additional Inherited Members

    - Static Public Member Functions inherited from AutoSegment
    static AutoSegmentcreate (AutoContact *source, AutoContact *target, Segment *hurricaneSegment)
     
    static AutoSegmentcreate (AutoContact *source, AutoContact *target, unsigned int dir, size_t depth=RoutingGauge::nlayerdepth)
     
    - Static Protected Member Functions inherited from AutoSegment
    static void _preCreate (AutoContact *source, AutoContact *target)
     
    -

    Detailed Description

    -

    Concrete Horizontal AutoSegment.

    -

    Member Function Documentation

    - -

    ◆ _canSlacken()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool _canSlacken () const
    -
    -virtual
    -
    -

    Returns: true if the segment can be slackened. That is, source or target constraints are less than three pitches.

    - -

    Implements AutoSegment.

    - -

    References Interval::contains(), AutoSegment::getAutoSource(), AutoSegment::getAutoTarget(), AutoContact::getGCell(), GCell::getSide(), Interval::getSize(), DbU::getValueString(), Interval::inflate(), and Katabatic::KbVertical.

    - -
    -
    - -

    ◆ canMoveULeft()

    - -
    -
    - - - - - -
    - - - - - - - - -
    bool canMoveULeft (float reserve = 0.0) const
    -
    -virtual
    -
    -
    Returns
    true if the global segment can be moved on the left GCell (for a vertical) or down (for an horizontal). The move is accepted only if it do not change the amount of global wiring. Thus the following conditions:
      -
    • The segment mustn't be on the leftmost GCell (obvious...).
    • -
    • The segment must be global.
    • -
    • The source and target contacts must be AutoContactTurn(s).
    • -
    • At least one of the perpandicular must be global and connected through the target. That is, it's a global which extends toward left.
    • -
    • The GCell of maximum density on the left must remains below the current GCell of maximum density, with a margin of reserve (expressed in total saturation percentage).
    • -
    -
    - -

    Implements AutoSegment.

    - -

    References AutoSegment::getAutoSource(), AutoSegment::getAutoTarget(), GCell::getDown(), AutoContact::getGCell(), AutoSegment::getGCell(), AutoSegment::getLayer(), RoutingGauge::getLayerDepth(), GCell::getRight(), Session::getRoutingGauge(), AutoContact::getSegment(), GCell::getWDensity(), and AutoSegment::isGlobal().

    - -
    -
    - -

    ◆ canMoveURight()

    - -
    -
    - - - - - -
    - - - - - - - - -
    bool canMoveURight (float reserve = 0.0) const
    -
    -virtual
    -
    -
    Returns
    true if the global segment can be moved on the right GCell (for a vertical) or up (for an horizontal). The move is accepted only if it do not change the amount of global wiring. Thus the following conditions:
      -
    • The segment mustn't be on the leftmost GCell (obvious...).
    • -
    • The segment must be global.
    • -
    • The source and target contacts must be AutoContactTurn(s).
    • -
    • At least one of the perpandicular must be global and connected through the source. That is, it's a global which extends toward right.
    • -
    • The GCell of maximum density on the left must remains below the current GCell of maximum density, with a margin of reserve (expressed in total saturation percentage).
    • -
    -
    - -

    Implements AutoSegment.

    - -

    References AutoSegment::getAutoSource(), AutoSegment::getAutoTarget(), AutoContact::getGCell(), AutoSegment::getGCell(), AutoSegment::getLayer(), RoutingGauge::getLayerDepth(), GCell::getRight(), Session::getRoutingGauge(), AutoContact::getSegment(), GCell::getUp(), GCell::getWDensity(), and AutoSegment::isGlobal().

    - -
    -
    - -

    ◆ base() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - -
    Segment * base ()
    -
    -virtual
    -
    -

    Returns: the decorated Hurricane::Segment.

    - -

    Implements AutoSegment.

    - -
    -
    - -

    ◆ base() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - -
    Segment * base () const
    -
    -virtual
    -
    -

    Returns: the decorated Hurricane::Segment (const flavor).

    - -

    Implements AutoSegment.

    - -
    -
    - -

    ◆ getHorizontal()

    - -
    -
    - - - - - -
    - - - - - - - -
    Horizontal * getHorizontal ()
    -
    -virtual
    -
    -

    Returns: If the decorated segment is a Hurricane::Horizontal, return it. NULL otherwise.

    - -

    Reimplemented from AutoSegment.

    - -
    -
    - -

    ◆ getSourceU()

    - -
    -
    - - - - - -
    - - - - - - - -
    DbU::Unit getSourceU () const
    -
    -virtual
    -
    -

    Returns: The AutoSegment uniform source position. (X for an horizontal and Y for a Vertical).

    - -

    Implements AutoSegment.

    - -

    References Segment::getSourceX().

    - -
    -
    - -

    ◆ getTargetU()

    - -
    -
    - - - - - -
    - - - - - - - -
    DbU::Unit getTargetU () const
    -
    -virtual
    -
    -

    Returns: The AutoSegment uniform target position. (X for an horizontal and Y for a Vertical).

    - -

    Implements AutoSegment.

    - -

    References Segment::getTargetX().

    - -
    -
    - -

    ◆ getDuSource()

    - -
    -
    - - - - - -
    - - - - - - - -
    DbU::Unit getDuSource () const
    -
    -virtual
    -
    -

    Returns: The AutoSegment uniform delta from source. (dX for an horizontal and dY for a Vertical).

    - -

    Implements AutoSegment.

    - -

    References Horizontal::getDxSource().

    - -
    -
    - -

    ◆ getDuTarget()

    - -
    -
    - - - - - -
    - - - - - - - -
    DbU::Unit getDuTarget () const
    -
    -virtual
    -
    -

    Returns: The AutoSegment uniform delta from source. (dX for an horizontal and dY for a Vertical).

    - -

    Implements AutoSegment.

    - -

    References Horizontal::getDxTarget().

    - -
    -
    - -

    ◆ getSpanU()

    - -
    -
    - - - - - -
    - - - - - - - -
    Interval getSpanU () const
    -
    -virtual
    -
    -

    Returns: The AutoSegment uniform occupying interval (on X for horizontal and on Y for vertical).

    - -

    Implements AutoSegment.

    - -

    References Segment::getSourceX(), and Segment::getTargetX().

    - -
    -
    - -

    ◆ getConstraints()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    bool getConstraints (DbU::Unitmin,
    DbU::Unitmax 
    ) const
    -
    -virtual
    -
    -

    Returns: in min & max the allowed range for the segment axis.

    - -

    Implements AutoSegment.

    - -

    References AutoSegment::getAutoSource(), AutoSegment::getAutoTarget(), AutoContact::getCBYMax(), AutoContact::getCBYMin(), AutoSegment::getUserConstraints(), and DbU::getValueString().

    - -
    -
    - -

    ◆ getSourceConstraints()

    - -
    -
    - - - - - -
    - - - - - - - - -
    Interval getSourceConstraints (unsigned int flags = 0) const
    -
    -virtual
    -
    -
    Returns
    The Interval into witch the source AutoContact can vary. By default all deduced constraints and user constraints are took into account. If flags contains KbNativeConstraints the constraint returned is only the enclosing GCell.
    - -

    Implements AutoSegment.

    - -

    References AutoSegment::getAutoSource(), Box::getYMax(), Box::getYMin(), and Katabatic::KbNativeConstraints.

    - -
    -
    - -

    ◆ getTargetConstraints()

    - -
    -
    - - - - - -
    - - - - - - - - -
    Interval getTargetConstraints (unsigned int flags = 0) const
    -
    -virtual
    -
    -
    Returns
    The Interval into witch the target AutoContact can vary. By default all deduced constraints and user constraints are took into account. If flags contains KbNativeConstraints the constraint returned is only the enclosing GCell.
    - -

    Implements AutoSegment.

    - -

    References AutoSegment::getAutoTarget(), Box::getYMax(), Box::getYMin(), and Katabatic::KbNativeConstraints.

    - -
    -
    - -

    ◆ getDirection()

    - -
    -
    - - - - - -
    - - - - - - - -
    unsigned int getDirection () const
    -
    -virtual
    -
    -

    Returns: Katabatic::KbHorizontal or Katabatic::KbVertical according to the decorated segment.

    - -

    Implements AutoSegment.

    - -

    References Katabatic::KbHorizontal.

    - -
    -
    - -

    ◆ getGCells()

    - -
    -
    - - - - - -
    - - - - - - - - -
    size_t getGCells (vector< GCell *> & gcells) const
    -
    -virtual
    -
    -
    Parameters
    - - -
    gcellsA vector that will be filled by all the GCells that the segment overlap. In increasing order, from source to target.
    -
    -
    -
    Returns
    The vector's size.
    - -

    Implements AutoSegment.

    - -

    References AutoSegment::getAutoSource(), AutoSegment::getAutoTarget(), AutoContact::getGCell(), AutoSegment::getGCell(), and GCell::getRight().

    - -
    -
    - -

    ◆ setDuSource()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void setDuSource (DbU::Unit du)
    -
    -virtual
    -
    -

    Set the uniform dU from source anchor (dX for Horizontal, dY for Vertical).

    - -

    Implements AutoSegment.

    - -
    -
    - -

    ◆ setDuTarget()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void setDuTarget (DbU::Unit du)
    -
    -virtual
    -
    -

    Set the uniform dU from target anchor (dX for Horizontal, dY for Vertical).

    - -

    Implements AutoSegment.

    - -
    -
    - -

    ◆ updateOrient()

    - -
    -
    - - - - - -
    - - - - - - - -
    void updateOrient ()
    -
    -virtual
    -
    -

    Ensure that source is lower than target. Swap them if needed. Swap never occurs on global segment because their source and target anchors are from different GCell, which are already ordered.

    - -

    Implements AutoSegment.

    - -

    References Segment::getSourceX(), Segment::getTargetX(), Segment::invert(), Katabatic::SegSourceBottom, Katabatic::SegSourceTop, Katabatic::SegStrongTerminal, Katabatic::SegTargetBottom, Katabatic::SegTargetTop, AutoSegment::setFlags(), and AutoSegment::unsetFlags().

    - -
    -
    - -

    ◆ updatePositions()

    - -
    -
    - - - - - -
    - - - - - - - -
    void updatePositions ()
    -
    -virtual
    -
    -

    Update the segment begenning and ending positions. The positions takes into account the extension caps and reflect the real space used by the segment under it's long axis.

    - -

    Implements AutoSegment.

    - -

    References Session::getExtensionCap(), AutoSegment::getLayer(), Segment::getSourceX(), and Segment::getTargetX().

    - -
    -
    - -

    ◆ checkPositions()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool checkPositions () const
    -
    -virtual
    -
    -

    Returns: true if the relative positions of source & target are coherent. (source <= target).

    - -

    Implements AutoSegment.

    - -

    References Session::getExtensionCap(), AutoSegment::getLayer(), Segment::getSourceX(), Segment::getTargetX(), and DbU::getValueString().

    - -
    -
    - -

    ◆ checkConstraints()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool checkConstraints () const
    -
    -virtual
    -
    -

    Returns: true if the constraint intervel is coherent (non-empty or punctual in the worst case).

    - -

    Implements AutoSegment.

    - -

    References AutoSegment::getAutoSource(), AutoSegment::getAutoTarget(), and Interval::intersect().

    - -
    -
    - -

    ◆ _makeDogleg()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    unsigned int _makeDogleg (GCelldoglegGCell,
    unsigned int flags 
    )
    -
    -virtual
    -
    -

    This method is the workhorse for the various dogleg and topology restauration methods. It is the atomic method that actually make the dogleg on this segment.

    -

    Returns: Katabatic::KbUseAboveLayer if the dogleg is using the above layer (Katabatic::KbUseBelowLayer for the below layer).

    -

    Break the current segment in two (a.k.a. making a dogleg).

      -
    • The segment is broken inside doglegGCell.
    • -
    • Two new segments are createds, one perpandicular and one parallel.
    • -
    • The original segment is always kept attached to the source. (the new parallel fragment is attached to the target).
    • -
    • The perpandicular segment is in the layer above by default. If we are already on the topmost routing layer, the below layer is used.
    • -
    • If the segment pass through the breaking GCell, it's axis is set into the center. If the segment is local, the axis is the middle of the segment.
    • -
    • The Local/Global kind of the original segment is updated. The local/global status is computed by the constructor of the AutoSegment for the perpandicular and the new parallel.
    • -
    • The terminal state is updated. If the segment is a strong terminal the part that is no longer directly connected to the terminal is demoted to Katabatic::SegWeakTerminal1.
    • -
    • The perpandicular is obviously a canonical. If the broken segment is canonical, the original is left canonical and only the new parallel is re-canonized. Otherwise, we re-canonise both sets of aligned segments (the one on the source and the one on the target).
    • -
    • The three segments are added to the session dogleg stack.
    • -
    -

    After this method call the net topology is guarantee to be valid.

    -
    -_makeDogleg-1.png -
    -Example Case 1
    -
    -_makeDogleg-2.png -
    -Example Case 2
    - -

    Implements AutoSegment.

    - -

    References AutoSegment::canonize(), DebugSession::close(), AutoContactTurn::create(), AutoSegment::create(), Session::dogleg(), AutoSegment::getAutoSource(), AutoSegment::getAutoTarget(), Session::getConfiguration(), RoutingGauge::getContactLayer(), AutoContact::getGCell(), Component::getLayer(), AutoSegment::getLayer(), RoutingGauge::getLayerDepth(), Component::getNet(), AutoSegment::getNet(), GCell::getRight(), Session::getRoutingGauge(), RoutingGauge::getRoutingLayer(), AutoSegment::getSourceX(), AutoSegment::getTargetX(), GCell::getX(), GCell::getXMax(), AutoSegment::getY(), AutoContact::invalidate(), AutoSegment::invalidate(), AutoSegment::isCanonical(), AutoSegment::isLocal(), AutoSegment::isSlackened(), AutoSegment::isWeakTerminal(), Katabatic::KbHorizontal, Katabatic::KbUseAboveLayer, Katabatic::KbUseBelowLayer, Katabatic::KbVertical, AutoContact::migrateConstraintBox(), DebugSession::open(), GCell::removeHSegment(), Katabatic::SegCanonical, Katabatic::SegDogleg, Katabatic::SegGlobal, Katabatic::SegNotAligned, Katabatic::SegSlackened, Katabatic::SegWeakTerminal1, AutoSegment::setFlags(), AutoSegment::setLayer(), and AutoSegment::unsetFlags().

    - -
    -
    - -

    ◆ moveULeft()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool moveULeft ()
    -
    -virtual
    -
    -

    This function do not manage an aligned set. It applies on this segment only.

    -

    Displace an Horizontal or Vertical segment to the GCell below (a.k.a. lower or inferior). Rules for displacement:

      -
    • The segment must be connected at both end to a turn contact (we do not want to manage more complex cases for the time beeing).
    • -
    • And, of course, the segment must not already by on the bottomost GCell...
    • -
    -

    The displacement take care of:

      -
    • Managing the status of the various perpandiculars. The stretched one are made global if needed. The shrinked one made local, if needed.
    • -
    • The supporting AutoContact (source & target) are changed of GCell.
    • -
    • If the segment is global, the go-through GCells are updateds.
    • -
    -

    Returns: true if the move has succeeded.

    -
    -moveULeft-1.png -
    -moveULeft() for an Horizontal
    - -

    Implements AutoSegment.

    - -

    References GCell::addVSegment(), AutoSegment::getAutoSource(), AutoSegment::getAutoTarget(), GCell::getDown(), AutoContact::getGCell(), AutoSegment::getGCell(), GCell::getRight(), AutoContact::getSegment(), GCell::getSide(), Interval::getVMax(), AutoSegment::isLocal(), Katabatic::KbVertical, GCell::removeVSegment(), Katabatic::SegGlobal, AutoSegment::setAxis(), AutoSegment::setFlags(), AutoContact::setGCell(), and AutoSegment::unsetFlags().

    - -
    -
    - -

    ◆ moveURight()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool moveURight ()
    -
    -virtual
    -
    -

    This function do not manage an aligned set. It applies on this segment only.

    -

    Displace an Horizontal or Vertical segment to the GCell above (a.k.a. upper or superior). Rules for displacement:

    -
    See also
    AutoSegment::moveULeft() for a complete description.
    - -

    Implements AutoSegment.

    - -

    References GCell::addVSegment(), AutoSegment::getAutoSource(), AutoSegment::getAutoTarget(), AutoContact::getGCell(), AutoSegment::getGCell(), GCell::getRight(), AutoContact::getSegment(), GCell::getSide(), GCell::getUp(), Interval::getVMin(), AutoSegment::isLocal(), Katabatic::KbVertical, GCell::removeVSegment(), Katabatic::SegGlobal, AutoSegment::setAxis(), AutoSegment::setFlags(), AutoContact::setGCell(), and AutoSegment::unsetFlags().

    - -
    -
    - -

    ◆ _postCreate()

    - -
    -
    - - - - - -
    - - - - - - - -
    void _postCreate ()
    -
    -protectedvirtual
    -
    -

    In addition to AutoSegment::_postCreate(), detect whether the segment is global or local and register it in the relevant GCells (if needed).

    -

    If the segment is anchored directly on a terminal, adjust the axis so it's connected.

    - -

    Reimplemented from AutoSegment.

    - -

    References AutoSegment::_postCreate(), GCell::addHSegment(), AutoSegment::getAutoSource(), AutoSegment::getAutoTarget(), AutoContact::getGCell(), GCell::getRight(), GCell::getX(), Component::getY(), Katabatic::SegGlobal, AutoSegment::setFlags(), and AutoContact::setY().

    - -
    -
    - -

    ◆ _preDestroy()

    - -
    -
    - - - - - -
    - - - - - - - -
    void _preDestroy ()
    -
    -protectedvirtual
    -
    -

    Perform operations that must be done before the actual destructor is called. Merely whidrawn the AutoSegment from the lookup/Session mechanism.

    - -

    Reimplemented from AutoSegment.

    - -

    References AutoSegment::_preDestroy(), AutoSegment::getAutoSource(), AutoSegment::getAutoTarget(), AutoContact::getGCell(), AutoSegment::getId(), GCell::getRight(), GCell::getX(), and GCell::removeHSegment().

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoHorizontal.js b/deprecated/katabatic/doc/html/classKatabatic_1_1AutoHorizontal.js deleted file mode 100644 index 10b3f3c6..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoHorizontal.js +++ /dev/null @@ -1,30 +0,0 @@ -var classKatabatic_1_1AutoHorizontal = -[ - [ "_canSlacken", "classKatabatic_1_1AutoHorizontal.html#ab0c6fe24404afe19268a7b796fa74bec", null ], - [ "canMoveULeft", "classKatabatic_1_1AutoHorizontal.html#aa9e85f38a842d1966eb72afccb446676", null ], - [ "canMoveURight", "classKatabatic_1_1AutoHorizontal.html#a7559a856712400a9325665842e0bcd64", null ], - [ "base", "classKatabatic_1_1AutoHorizontal.html#a9e651c17b47f82166a02865c9296a2df", null ], - [ "base", "classKatabatic_1_1AutoHorizontal.html#adcd751c3ec393fabdef5ede0ffff6f2d", null ], - [ "getHorizontal", "classKatabatic_1_1AutoHorizontal.html#a659b8ed90de679564924afe07af478de", null ], - [ "getSourceU", "classKatabatic_1_1AutoHorizontal.html#a3932d5ce9094ead510e4e33bd4e78e1a", null ], - [ "getTargetU", "classKatabatic_1_1AutoHorizontal.html#a8e5f2a51f56c6bdb74024ac77c08a22a", null ], - [ "getDuSource", "classKatabatic_1_1AutoHorizontal.html#a44998a5f0d71597006fe4f3ffed8e3d1", null ], - [ "getDuTarget", "classKatabatic_1_1AutoHorizontal.html#a4f505a59109fc6087696f483ccc7f9dc", null ], - [ "getSpanU", "classKatabatic_1_1AutoHorizontal.html#a9409a4b64c21fa8b1517149728f0a4c1", null ], - [ "getConstraints", "classKatabatic_1_1AutoHorizontal.html#aff207f4cc3c3682ed57369fdfe157d2d", null ], - [ "getSourceConstraints", "classKatabatic_1_1AutoHorizontal.html#a3c24695921b612a57c5ac60ff0aa3878", null ], - [ "getTargetConstraints", "classKatabatic_1_1AutoHorizontal.html#aaa70ba865e312fb30f81fa7f973a0376", null ], - [ "getDirection", "classKatabatic_1_1AutoHorizontal.html#a09d03fbca9ab891c2f25bdae7f89a899", null ], - [ "getGCells", "classKatabatic_1_1AutoHorizontal.html#ab681dca7dc930e06cacc2de85bf99166", null ], - [ "setDuSource", "classKatabatic_1_1AutoHorizontal.html#a756616a1967c5ad8efd08be96d18f25d", null ], - [ "setDuTarget", "classKatabatic_1_1AutoHorizontal.html#a9df2ef68c1fbf4159cc837be5c699b53", null ], - [ "updateOrient", "classKatabatic_1_1AutoHorizontal.html#a59058f4593049c583c5b3698ff81b299", null ], - [ "updatePositions", "classKatabatic_1_1AutoHorizontal.html#a9662a77c2ed8553d6a0312c5292060ad", null ], - [ "checkPositions", "classKatabatic_1_1AutoHorizontal.html#acfbdc94b1e84bd192087df53ead1f06f", null ], - [ "checkConstraints", "classKatabatic_1_1AutoHorizontal.html#a46576c7c5c5146f8fa53a821b0766994", null ], - [ "_makeDogleg", "classKatabatic_1_1AutoHorizontal.html#a36c0eecad40d3559b5378caefec6a7e0", null ], - [ "moveULeft", "classKatabatic_1_1AutoHorizontal.html#a1fa2421b74bf0eb934b7002fd3da2321", null ], - [ "moveURight", "classKatabatic_1_1AutoHorizontal.html#aa469e37853e31f8b1bc817518c896d62", null ], - [ "_postCreate", "classKatabatic_1_1AutoHorizontal.html#a3715b38135ca24745f610bebd3407c10", null ], - [ "_preDestroy", "classKatabatic_1_1AutoHorizontal.html#a7c13d9795eafd477994961f8a0d962d0", null ] -]; \ No newline at end of file diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoHorizontal__inherit__graph.map b/deprecated/katabatic/doc/html/classKatabatic_1_1AutoHorizontal__inherit__graph.map deleted file mode 100644 index 7be7dace..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoHorizontal__inherit__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoHorizontal__inherit__graph.md5 b/deprecated/katabatic/doc/html/classKatabatic_1_1AutoHorizontal__inherit__graph.md5 deleted file mode 100644 index 0e36719b..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoHorizontal__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -436980c5fc676b7ec86e590ffab38cb8 \ No newline at end of file diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoHorizontal__inherit__graph.png b/deprecated/katabatic/doc/html/classKatabatic_1_1AutoHorizontal__inherit__graph.png deleted file mode 100644 index 567dc27c..00000000 Binary files a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoHorizontal__inherit__graph.png and /dev/null differ diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegment-members.html b/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegment-members.html deleted file mode 100644 index 10889efe..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegment-members.html +++ /dev/null @@ -1,196 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - - -
    -
    -
    AutoSegment Member List
    -
    -
    - -

    This is the complete list of members for AutoSegment, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    _canSlacken() const =0AutoSegmentpure virtual
    _getFlags() constAutoSegmentinlineprotected
    _invalidate()AutoSegmentprotected
    _makeDogleg(GCell *, unsigned int flags)=0AutoSegmentpure virtual
    _postCreate()AutoSegmentprotectedvirtual
    _preCreate(AutoContact *source, AutoContact *target)AutoSegmentprotectedstatic
    _preDestroy()AutoSegmentprotectedvirtual
    AutoSegment(Segment *segment)AutoSegmentprotected
    base() const =0AutoSegmentpure virtual
    base()=0AutoSegmentpure virtual
    canDogleg(Interval)AutoSegment
    canMoveULeft(float reserve=0.0) const =0AutoSegmentpure virtual
    canMoveUp(float reserve=0.0, unsigned int flags=0) constAutoSegment
    canMoveURight(float reserve=0.0) const =0AutoSegmentpure virtual
    canonize(unsigned int flags=KbNoFlags)AutoSegment
    canPivotDown(float reserve=0.0, unsigned int flags=0) constAutoSegment
    canPivotUp(float reserve=0.0, unsigned int flags=0) constAutoSegment
    canReduce() constAutoSegment
    canSlacken(unsigned int flags=0) constAutoSegment
    checkConstraints() const =0AutoSegmentpure virtual
    checkPositions() const =0AutoSegmentpure virtual
    computeOptimal(set< AutoSegment *> &processeds)AutoSegment
    computeTerminal()AutoSegment
    create(AutoContact *source, AutoContact *target, Segment *hurricaneSegment)AutoSegmentstatic
    create(AutoContact *source, AutoContact *target, unsigned int dir, size_t depth=RoutingGauge::nlayerdepth)AutoSegmentstatic
    getAligneds(unsigned int flags=KbNoFlags)AutoSegment
    getAnchors() constAutoSegmentinline
    getAutoSource() constAutoSegmentinline
    getAutoTarget() constAutoSegmentinline
    getAxis() constAutoSegmentinline
    getBoundingBox() constAutoSegmentinline
    getCanonical(DbU::Unit &min, DbU::Unit &max)AutoSegmentvirtual
    getCanonical(Interval &i)AutoSegmentinline
    getCell() constAutoSegmentinline
    getConstraints(DbU::Unit &min, DbU::Unit &max) const =0AutoSegmentpure virtual
    getConstraints(Interval &i) constAutoSegmentinline
    getCost(DbU::Unit axis) constAutoSegmentvirtual
    getDirection() const =0AutoSegmentpure virtual
    getDuSource() const =0AutoSegmentpure virtual
    getDuTarget() const =0AutoSegmentpure virtual
    getExtremity() constAutoSegmentinline
    getGCell() constAutoSegmentinline
    getGCells(vector< GCell *> &) const =0AutoSegmentpure virtual
    getHorizontal()AutoSegmentinlinevirtual
    getId() constAutoSegmentinline
    getLayer() constAutoSegmentinline
    getLength() constAutoSegmentinline
    getMinSpanU() constAutoSegment
    getNet() constAutoSegmentinline
    getOnSourceContact(unsigned int direction)AutoSegment
    getOnTargetContact(unsigned int direction)AutoSegment
    getOppositeAnchor(Component *) constAutoSegmentinline
    getOppositeAnchor(AutoContact *) constAutoSegment
    getOptimal(Interval &i) constAutoSegment
    getOptimalMax() constAutoSegmentinline
    getOptimalMin() constAutoSegmentinline
    getOrigin() constAutoSegmentinline
    getParent() constAutoSegmentinline
    getPerpandiculars()AutoSegment
    getPerpandicularsBound(set< AutoSegment *> &)AutoSegment
    getSlack() constAutoSegmentvirtual
    getSource() constAutoSegmentinline
    getSourceConstraints(unsigned int flags=0) const =0AutoSegmentpure virtual
    getSourceHook()AutoSegmentinline
    getSourcePosition() constAutoSegmentinline
    getSourceU() const =0AutoSegmentpure virtual
    getSourceX() constAutoSegmentinline
    getSourceY() constAutoSegmentinline
    getSpanU() const =0AutoSegmentpure virtual
    getTarget() constAutoSegmentinline
    getTargetConstraints(unsigned int flags=0) const =0AutoSegmentpure virtual
    getTargetHook()AutoSegmentinline
    getTargetPosition() constAutoSegmentinline
    getTargetU() const =0AutoSegmentpure virtual
    getTargetX() constAutoSegmentinline
    getTargetY() constAutoSegmentinline
    getUserConstraints() constAutoSegmentinline
    getVertical()AutoSegmentinlinevirtual
    getWidth() constAutoSegmentinline
    getX() constAutoSegmentvirtual
    getY() constAutoSegmentvirtual
    invalidate(unsigned int flags=KbPropagate)AutoSegmentvirtual
    invert()AutoSegmentinline
    isBipoint() constAutoSegmentinline
    isCanonical() constAutoSegmentinline
    isCreated() constAutoSegmentinline
    isDogleg() constAutoSegmentinline
    isFixed() constAutoSegmentinline
    isGlobal() constAutoSegmentinline
    isHorizontal() constAutoSegmentinline
    isInvalidated() constAutoSegmentinline
    isInvalidatedLayer() constAutoSegmentinline
    isLayerChange() constAutoSegmentinline
    isLocal() constAutoSegmentinline
    isReduced() constAutoSegmentinline
    isSlackened() constAutoSegmentinline
    isSpinBottom() constAutoSegmentinline
    isSpinTop() constAutoSegmentinline
    isSpinTopOrBottom() constAutoSegmentinline
    isStrap() constAutoSegmentinline
    isStrongTerminal(unsigned int flags=0) constAutoSegment
    isUnsetAxis() constAutoSegmentinline
    isVertical() constAutoSegmentinline
    isWeakTerminal() constAutoSegmentinline
    makeDogleg(AutoContact *)AutoSegment
    makeDogleg(Interval, unsigned int flags=KbNoFlags)AutoSegment
    makeDogleg(GCell *, unsigned int flags=KbNoFlags)AutoSegment
    mergeUserConstraints(const Interval &)AutoSegment
    moveULeft()=0AutoSegmentpure virtual
    moveURight()=0AutoSegmentpure virtual
    mustRaise() constAutoSegment
    raise()AutoSegment
    reduce()AutoSegment
    reduceDoglegLayer()AutoSegment
    resetUserConstraints()AutoSegmentinline
    revalidate()AutoSegment
    setAxis(DbU::Unit, unsigned int flags=KbNoFlags)AutoSegment
    setDuSource(DbU::Unit du)=0AutoSegmentpure virtual
    setDuTarget(DbU::Unit du)=0AutoSegmentpure virtual
    setFlags(unsigned int)AutoSegmentinline
    setLayer(const Layer *)AutoSegmentinline
    setOptimalMax(DbU::Unit max)AutoSegmentinline
    setOptimalMin(DbU::Unit min)AutoSegmentinline
    slacken(unsigned int flags)AutoSegment
    toConstraintAxis(unsigned int flags=KbRealignate)AutoSegment
    toOptimalAxis(unsigned int flags=KbRealignate)AutoSegment
    unsetFlags(unsigned int)AutoSegmentinline
    updateOrient()=0AutoSegmentpure virtual
    updatePositions()=0AutoSegmentpure virtual
    ~AutoSegment()AutoSegmentprotectedvirtual
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegment.html b/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegment.html deleted file mode 100644 index ee8f0614..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegment.html +++ /dev/null @@ -1,4381 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - - - -
    - -

    Abstract base class for AutoSegment. - More...

    -
    -Inheritance diagram for AutoSegment:
    -
    -
    Inheritance graph
    - - - - -
    [legend]
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    virtual Segmentbase () const =0
     
    virtual Segmentbase ()=0
     
    virtual HorizontalgetHorizontal ()
     
    virtual VerticalgetVertical ()
     
    CellgetCell () const
     
    NetgetNet () const
     
    const LayergetLayer () const
     
    Box getBoundingBox () const
     
    HookgetSourceHook ()
     
    HookgetTargetHook ()
     
    ContactgetSource () const
     
    ContactgetTarget () const
     
    ComponentgetOppositeAnchor (Component *) const
     
    Components getAnchors () const
     
    virtual DbU::Unit getX () const
     
    virtual DbU::Unit getY () const
     
    DbU::Unit getWidth () const
     
    DbU::Unit getLength () const
     
    DbU::Unit getSourcePosition () const
     
    DbU::Unit getTargetPosition () const
     
    DbU::Unit getSourceX () const
     
    DbU::Unit getSourceY () const
     
    DbU::Unit getTargetX () const
     
    DbU::Unit getTargetY () const
     
    void invert ()
     
    void setLayer (const Layer *)
     
    bool isHorizontal () const
     
    bool isVertical () const
     
    bool isGlobal () const
     
    bool isLocal () const
     
    bool isFixed () const
     
    bool isBipoint () const
     
    bool isWeakTerminal () const
     
    bool isStrongTerminal (unsigned int flags=0) const
     
    bool isLayerChange () const
     
    bool isSpinTop () const
     
    bool isSpinBottom () const
     
    bool isSpinTopOrBottom () const
     
    bool isReduced () const
     
    bool isStrap () const
     
    bool isDogleg () const
     
    bool isInvalidated () const
     
    bool isInvalidatedLayer () const
     
    bool isCreated () const
     
    bool isCanonical () const
     
    bool isUnsetAxis () const
     
    bool isSlackened () const
     
    virtual bool _canSlacken () const =0
     
    bool canReduce () const
     
    bool mustRaise () const
     
    unsigned int canDogleg (Interval)
     
    virtual bool canMoveULeft (float reserve=0.0) const =0
     
    virtual bool canMoveURight (float reserve=0.0) const =0
     
    bool canMoveUp (float reserve=0.0, unsigned int flags=0) const
     
    bool canPivotUp (float reserve=0.0, unsigned int flags=0) const
     
    bool canPivotDown (float reserve=0.0, unsigned int flags=0) const
     
    bool canSlacken (unsigned int flags=0) const
     
    virtual bool checkPositions () const =0
     
    virtual bool checkConstraints () const =0
     
    unsigned long getId () const
     
    virtual unsigned int getDirection () const =0
     
    GCellgetGCell () const
     
    virtual size_t getGCells (vector< GCell *> &) const =0
     
    AutoContactgetAutoSource () const
     
    AutoContactgetAutoTarget () const
     
    AutoContactgetOppositeAnchor (AutoContact *) const
     
    size_t getPerpandicularsBound (set< AutoSegment *> &)
     
    AutoSegmentgetParent () const
     
    DbU::Unit getAxis () const
     
    virtual DbU::Unit getSourceU () const =0
     
    virtual DbU::Unit getTargetU () const =0
     
    virtual DbU::Unit getDuSource () const =0
     
    virtual DbU::Unit getDuTarget () const =0
     
    DbU::Unit getOrigin () const
     
    DbU::Unit getExtremity () const
     
    virtual Interval getSpanU () const =0
     
    Interval getMinSpanU () const
     
    virtual Interval getSourceConstraints (unsigned int flags=0) const =0
     
    virtual Interval getTargetConstraints (unsigned int flags=0) const =0
     
    virtual bool getConstraints (DbU::Unit &min, DbU::Unit &max) const =0
     
    bool getConstraints (Interval &i) const
     
    const IntervalgetUserConstraints () const
     
    virtual DbU::Unit getSlack () const
     
    DbU::Unit getOptimalMin () const
     
    DbU::Unit getOptimalMax () const
     
    IntervalgetOptimal (Interval &i) const
     
    virtual DbU::Unit getCost (DbU::Unit axis) const
     
    virtual AutoSegmentgetCanonical (DbU::Unit &min, DbU::Unit &max)
     
    AutoSegmentgetCanonical (Interval &i)
     
    void unsetFlags (unsigned int)
     
    void setFlags (unsigned int)
     
    virtual void setDuSource (DbU::Unit du)=0
     
    virtual void setDuTarget (DbU::Unit du)=0
     
    void computeTerminal ()
     
    virtual void updateOrient ()=0
     
    virtual void updatePositions ()=0
     
    void mergeUserConstraints (const Interval &)
     
    void resetUserConstraints ()
     
    void setOptimalMin (DbU::Unit min)
     
    void setOptimalMax (DbU::Unit max)
     
    void revalidate ()
     
    AutoSegmentmakeDogleg (AutoContact *)
     
    unsigned int makeDogleg (Interval, unsigned int flags=KbNoFlags)
     
    unsigned int makeDogleg (GCell *, unsigned int flags=KbNoFlags)
     
    virtual unsigned int _makeDogleg (GCell *, unsigned int flags)=0
     
    virtual bool moveULeft ()=0
     
    virtual bool moveURight ()=0
     
    bool slacken (unsigned int flags)
     
    bool reduceDoglegLayer ()
     
    bool reduce ()
     
    bool raise ()
     
    AutoSegmentcanonize (unsigned int flags=KbNoFlags)
     
    virtual void invalidate (unsigned int flags=KbPropagate)
     
    void computeOptimal (set< AutoSegment *> &processeds)
     
    void setAxis (DbU::Unit, unsigned int flags=KbNoFlags)
     
    bool toConstraintAxis (unsigned int flags=KbRealignate)
     
    bool toOptimalAxis (unsigned int flags=KbRealignate)
     
    AutoSegments getOnSourceContact (unsigned int direction)
     
    AutoSegments getOnTargetContact (unsigned int direction)
     
    AutoSegments getAligneds (unsigned int flags=KbNoFlags)
     
    AutoSegments getPerpandiculars ()
     
    - - - - - -

    -Static Public Member Functions

    static AutoSegmentcreate (AutoContact *source, AutoContact *target, Segment *hurricaneSegment)
     
    static AutoSegmentcreate (AutoContact *source, AutoContact *target, unsigned int dir, size_t depth=RoutingGauge::nlayerdepth)
     
    - - - - - - - - - - - - - -

    -Protected Member Functions

     AutoSegment (Segment *segment)
     
    virtual ~AutoSegment ()
     
    virtual void _postCreate ()
     
    virtual void _preDestroy ()
     
    void _invalidate ()
     
    unsigned int _getFlags () const
     
    - - - -

    -Static Protected Member Functions

    static void _preCreate (AutoContact *source, AutoContact *target)
     
    -

    Detailed Description

    -

    Abstract base class for AutoSegment.

    -

    -Creating AutoHorizontal & AutoVertical

    -

    AutoSegment is the abstract base class for AutoHorizontal and AutoVertical. They are must be created only through the factory method: AutoSegment::create().

    -

    -Characteristics of AutoSegments

    -
      -
    • -Unique ID: to ease the enforcing of a deterministic behavior and to gain some independance from the pointers, each AutoSegment is associated with an unique identifier. IDs are now directly taken from the Hurricane::Segment.
    • -
    • -Source contact is always lesser than Target contact (Xs,Ys) < (Xt,Yt).
    • -
    • -When assembled through AutoContactVTee or AutoContactHTee, AutoSegments became (i.e. must be kept) aligneds. Among a set of aligned AutoSegments, we distinguish a representative trough which we can manipulate the whole set. This representative is called the canonical AutoSegment and is the one with the lowest id).
    • -
    • -

      When an aligned set contains at least one global, all the segments of the set are tagged Katabatic::SegWeakGlobal. This is especially useful on local ones to know if they are part of a much longer wire.

      -

      Conversely, a set of aligned may contains only local segments and thus will not have the flag set.

      -
    • -
    • -To allow some optimization, the Katabatic::SegNotAligned tells if a segment is part of an aligned set. It is deduced from the type of both source and target contact: not on the parallel branch of a tee.
    • -
    -

    The Ever Fragmenting Data Structure

    -

    All the transformations applied to the database, after it's initial building, can be reduced to making new doglegs (and layer changes). Another way to put it, is that no Tee is ever created after the initial stage. The consequence is that the segments are only fragmenting more and more (up to a certain limit). The aligneds sets are progessively broken apart as needed, and until there remains only one tee per set (the two segments on the aligned branch).

    -

    -Operations on AutoSegments

    -
      -
    • -Slackening. Constraints transmited through either source or target AutoContact are too tight (tighter than the GCell), by adding straps in the perpandicular direction, the full slack of the segment is restored.
    • -
    • -Layer Change. One or two layers above or below the current layer. One up/down may means into the perpandicular routing direction.
    • -
    • -Dogleg Creation. Mean breaking the segment in two. This operation is used to slacken the constraints on a segment or restore connexity on source/target contact after a layer change. The new segment is always created on the source.
    • -
    • -Reduction/Raising. When a segment is a short dogleg, no greater than one picth, it can use the layer of the perpandiculars.
    • -
    -

    -Invalidate on AutoSegments

    -

    The simple invalidation of an AutoSegment do not invalidate it's source & target contact.

    -

    An axis position change or a layer change both invalidate the AutoSegment and it's source & target contacts.

    -

    For the complete invalidation/revalidation mechanism see Session Algorithm.

    -

    -Main Attributes of AutoSegments

    -

    AutoSegment retains all attributes from Segment. The Segment itself beeing accessible through the base() methods.

      -
    • -An unique Id (for determinism).
    • -
    • -The GCell from wich it starts from. It is the GCell of the source AutoContact.
    • -
    • -A state, combination of flags from Katabatic::AutoSegmentFlag.
    • -
    • -An interval for the optimal range of the AutoSegment axis.
    • -
    • -An interval for user's defined constraint on the axis.
    • -
    • -The interval giving the complete length of the AutoSegment, that is, with all extentions cap taken into account. This interval is refered as the span.
    • -
    • -A small counter, of the number of reduced neighbors (never exceed two).
    • -
    -

    -Implementation Details

    -

    AutoSegment / AutoHorizontal & AutoVertical are kind of decorators of Hurricane::Segment (they do not scrictly respect the pattern).

    -

    Canonical AutoSegment can should be considered as a kind of Composite.

    -

    Thoses objects are created using a Factory method.

    -

    -Methods Classification

    - - - - -

    Constructor & Destructor Documentation

    - -

    ◆ AutoSegment()

    - - - -

    ◆ ~AutoSegment()

    - -
    -
    - - - - - -
    - - - - - - - -
    ~AutoSegment ()
    -
    -protectedvirtual
    -
    -

    AutoSegment destructor. It is not directly accessible, instead use one flavor of the AutoSegment::create().

    - -

    References AutoSegment::isGlobal().

    - -
    -
    -

    Member Function Documentation

    - -

    ◆ create() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    AutoSegment * create (AutoContactsource,
    AutoContacttarget,
    SegmenthurricaneSegment 
    )
    -
    -static
    -
    -
    Parameters
    - - - - -
    sourceThe source AutoContact.
    targetThe target AutoContact.
    hurricaneSegmentThe Hurricane::Segment to decorate.
    -
    -
    -
    Returns
    The AutoHorizontal/AutoVertical decorator segment.
    -

    Factory method to create AutoHorizontal or AutoVertical. It is important to note that this function may modify the underlying Hurricane::Segment.

      -
    • Layer is set to the default (bottom) routing Layers.
    • -
    • Source & target anchor of hurricaneSegment are set on source and target. If the hurricaneSegment is already anchored and source or target are not the one decorating the anchors, an exception is thrown.
    • -
    - -

    References AutoSegment::_postCreate(), Hook::attach(), Hook::detach(), AutoContact::getBodyHook(), Session::getKatabatic(), Component::getLayer(), Session::getRoutingLayer(), Segment::getSource(), Segment::getSourceHook(), Segment::getTarget(), Segment::getTargetHook(), DbU::getValueString(), Segment::getWidth(), AutoContact::getX(), AutoContact::getY(), AutoContact::isFixed(), KatabaticEngine::isGMetal(), Session::lookup(), Segment::setLayer(), Segment::setWidth(), Vertical::setX(), and Horizontal::setY().

    - -

    Referenced by GCellTopology::_do_1G_1M3(), GCellTopology::_do_1G_xM1(), GCellTopology::_do_xG(), GCellTopology::_do_xG_1M1_1M2(), GCellTopology::_do_xG_1Pad(), GCellTopology::_do_xG_xM1_xM3(), GCellTopology::_do_xG_xM2(), GCellTopology::_do_xG_xM3(), AutoHorizontal::_makeDogleg(), AutoVertical::_makeDogleg(), AutoSegment::create(), GCellTopology::doRp_Access(), GCellTopology::doRp_AutoContacts(), GCellTopology::doRp_StairCaseH(), GCellTopology::doRp_StairCaseV(), and anonymous_namespace{LoadGrByNet.cpp}::singleGCell().

    - -
    -
    - -

    ◆ create() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    AutoSegment * create (AutoContactsource,
    AutoContacttarget,
    unsigned int dir,
    size_t depth = RoutingGauge::nlayerdepth 
    )
    -
    -static
    -
    -
    Parameters
    - - - - - -
    sourceThe source AutoContact.
    targetThe target AutoContact.
    dirSpecify the segment direction.
    depthThe layer, given by it's depth in the RoutingGauge.
    -
    -
    -
    Returns
    The AutoHorizontal/AutoVertical.
    -

    Factory method to create AutoHorizontal or AutoVertical. flags indicate the direction (KbHorizontal or KbVertical). The underlying Hurricane segment is also created.

    - -

    References AutoContact::base(), Horizontal::create(), Vertical::create(), AutoSegment::create(), Session::getRoutingLayer(), AutoContact::getX(), AutoContact::getY(), AutoContact::isFixed(), Katabatic::KbHorizontal, and Katabatic::KbVertical.

    - -
    -
    - -

    ◆ base() [1/2]

    - - - -

    ◆ base() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - -
    Segment * base ()
    -
    -pure virtual
    -
    -

    Returns: the decorated Hurricane::Segment.

    - -

    Implemented in AutoVertical, and AutoHorizontal.

    - -
    -
    - -

    ◆ getHorizontal()

    - -
    -
    - - - - - -
    - - - - - - - -
    Horizontal * getHorizontal ()
    -
    -inlinevirtual
    -
    -

    Returns: If the decorated segment is a Hurricane::Horizontal, return it. NULL otherwise.

    - -

    Reimplemented in AutoHorizontal.

    - -
    -
    - -

    ◆ getVertical()

    - -
    -
    - - - - - -
    - - - - - - - -
    Vertical * getVertical ()
    -
    -inlinevirtual
    -
    -

    Returns: If the decorated segment is a Hurricane::Vertical, return it. NULL otherwise.

    - -

    Reimplemented in AutoVertical.

    - -
    -
    - -

    ◆ getCell()

    - -
    -
    - - - - - -
    - - - - - - - -
    Cell * getCell () const
    -
    -inline
    -
    -
    See also
    Segment::getCell().
    - -

    References AutoSegment::base(), and Entity::getCell().

    - -
    -
    - -

    ◆ getNet()

    - -
    -
    - - - - - -
    - - - - - - - -
    Net * getNet () const
    -
    -inline
    -
    -
    - -

    ◆ getLayer()

    - - - -

    ◆ getBoundingBox()

    - -
    -
    - - - - - -
    - - - - - - - -
    BoundingBox * getBoundingBox () const
    -
    -inline
    -
    -
    - -

    ◆ getSourceHook()

    - -
    -
    - - - - - -
    - - - - - - - -
    Hook * getSourceHook ()
    -
    -inline
    -
    -
    - -

    ◆ getTargetHook()

    - -
    -
    - - - - - -
    - - - - - - - -
    Hook * getTargetHook ()
    -
    -inline
    -
    -
    - -

    ◆ getSource()

    - -
    -
    - - - - - -
    - - - - - - - -
    Contact * getSource () const
    -
    -inline
    -
    -
    - -

    ◆ getTarget()

    - -
    -
    - - - - - -
    - - - - - - - -
    Contact * getTarget () const
    -
    -inline
    -
    -
    - -

    ◆ getOppositeAnchor() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - -
    Component * getOppositeAnchor (Componentanchor) const
    -
    -inline
    -
    -
    - -

    ◆ getAnchors()

    - -
    -
    - - - - - -
    - - - - - - - -
    Components getAnchors () const
    -
    -inline
    -
    -
    See also
    Segment::getAnchors().
    - -
    -
    - -

    ◆ getX()

    - -
    -
    - - - - - -
    - - - - - - - -
    DbU::Unit getX () const
    -
    -virtual
    -
    -
    - -

    ◆ getY()

    - -
    -
    - - - - - -
    - - - - - - - -
    DbU::Unit getY () const
    -
    -virtual
    -
    -
    - -

    ◆ getWidth()

    - -
    -
    - - - - - -
    - - - - - - - -
    DbU::Unit getWidth () const
    -
    -inline
    -
    -
    - -

    ◆ getLength()

    - -
    -
    - - - - - -
    - - - - - - - -
    DbU::Unit getLength () const
    -
    -inline
    -
    -
    - -

    ◆ getSourcePosition()

    - -
    -
    - - - - - -
    - - - - - - - -
    DbU::Unit getSourcePosition () const
    -
    -inline
    -
    -
    - -

    ◆ getTargetPosition()

    - -
    -
    - - - - - -
    - - - - - - - -
    DbU::Unit getTargetPosition () const
    -
    -inline
    -
    -
    - -

    ◆ getSourceX()

    - -
    -
    - - - - - -
    - - - - - - - -
    DbU::Unit getSourceX () const
    -
    -inline
    -
    -
    - -

    ◆ getSourceY()

    - -
    -
    - - - - - -
    - - - - - - - -
    DbU::Unit getSourceY () const
    -
    -inline
    -
    -
    - -

    ◆ getTargetX()

    - -
    -
    - - - - - -
    - - - - - - - -
    DbU::Unit getTargetX () const
    -
    -inline
    -
    -
    - -

    ◆ getTargetY()

    - -
    -
    - - - - - -
    - - - - - - - -
    DbU::Unit getTargetY () const
    -
    -inline
    -
    -
    - -

    ◆ invert()

    - -
    -
    - - - - - -
    - - - - - - - -
    DbU::Unit invert ()
    -
    -inline
    -
    -
    See also
    Segment::invert().
    - -

    References AutoSegment::base(), and Segment::invert().

    - -
    -
    - -

    ◆ setLayer()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void setLayer (const Layerlayer)
    -
    -inline
    -
    -
    - -

    ◆ isHorizontal()

    - - - -

    ◆ isVertical()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool isVertical () const
    -
    -inline
    -
    -

    Returns: true if the Hurricane::Segment is Vertical.

    - -

    References Katabatic::SegHorizontal.

    - -

    Referenced by AutoSegment::computeOptimal(), and AutoContactTerminal::getSegment().

    - -
    -
    - -

    ◆ isGlobal()

    - - - -

    ◆ isLocal()

    - - - -

    ◆ isFixed()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool isFixed () const
    -
    -inline
    -
    -

    Returns: true if segment must not be moved by the router.

    - -

    References Katabatic::SegFixed.

    - -

    Referenced by AutoSegment::canMoveUp(), AutoSegment::canPivotDown(), AutoSegment::canPivotUp(), and AutoSegment::makeDogleg().

    - -
    -
    - -

    ◆ isBipoint()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool isBipoint () const
    -
    -inline
    -
    -

    Returns: true if the segment straigh join two terminals.

    - -

    References Katabatic::SegBipoint.

    - -
    -
    - -

    ◆ isWeakTerminal()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool isWeakTerminal () const
    -
    -inline
    -
    -

    Returns: true if segment is indirectly connected to a terminal.

    - -

    References Katabatic::SegWeakTerminal.

    - -

    Referenced by AutoHorizontal::_makeDogleg(), and AutoVertical::_makeDogleg().

    - -
    -
    - -

    ◆ isStrongTerminal()

    - -
    -
    - - - - - - - - -
    bool isStrongTerminal (unsigned int flags = 0) const
    -
    -

    Returns: true if segment is directly connected to a terminal.

    - -

    References AutoSegment::getAligneds(), Katabatic::KbPropagate, and Katabatic::SegStrongTerminal.

    - -

    Referenced by AutoSegment::canMoveUp(), AutoSegment::canPivotDown(), and AutoSegment::canPivotUp().

    - -
    -
    - -

    ◆ isLayerChange()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool isLayerChange () const
    -
    -inline
    -
    -

    Returns: true if segment is a strap used only to connect between two different metal layers on the way up or down.

    - -

    References Katabatic::SegLayerChange.

    - -

    Referenced by AutoSegment::canMoveUp(), AutoSegment::canPivotDown(), and AutoSegment::canPivotUp().

    - -
    -
    - -

    ◆ isSpinTop()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool isSpinTop () const
    -
    -inline
    -
    -

    Returns: true if segment is connected to turns and both perpandiculars segments are in the top layer (candidate for reduction).

    - -

    Referenced by AutoSegment::canReduce(), AutoSegment::isSpinTopOrBottom(), AutoSegment::mustRaise(), and AutoSegment::reduceDoglegLayer().

    - -
    -
    - -

    ◆ isSpinBottom()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool isSpinBottom () const
    -
    -inline
    -
    -

    Returns: true if segment is connected to turns and both perpandiculars segments are in the bottom layer (candidate for reduction).

    - -

    Referenced by AutoSegment::canReduce(), AutoSegment::isSpinTopOrBottom(), AutoSegment::mustRaise(), and AutoSegment::reduceDoglegLayer().

    - -
    -
    - -

    ◆ isSpinTopOrBottom()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool isSpinTopOrBottom () const
    -
    -inline
    -
    -

    Returns: true if segment is either spin top or spin bottom (candidate for reduction).

    - -

    References AutoSegment::isSpinBottom(), and AutoSegment::isSpinTop().

    - -

    Referenced by AutoSegment::canReduce().

    - -
    -
    - -

    ◆ isReduced()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool isReduced () const
    -
    -inline
    -
    -

    Returns: true if segment is actually in a reduced state: it's effective layer will be the one of it's perpandiculars.

    - -

    References Katabatic::SegIsReduced.

    - -

    Referenced by AutoSegment::reduceDoglegLayer(), and AutoSegment::revalidate().

    - -
    -
    - -

    ◆ isStrap()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool isStrap () const
    -
    -inline
    -
    -

    Returns: true if segment has been created from a slackening operation to restore the slack of another segment.

    - -

    References Katabatic::SegStrap.

    - -
    -
    - -

    ◆ isDogleg()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool isDogleg () const
    -
    -inline
    -
    -

    Returns: true if segment has been created as the perpandicular part of a dogleg.

    - -

    References Katabatic::SegDogleg.

    - -

    Referenced by AutoSegment::toConstraintAxis().

    - -
    -
    - -

    ◆ isInvalidated()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool isInvalidated () const
    -
    -inline
    -
    -

    Returns: true if segment has been moved or topologicaly altered.

    - -

    References Katabatic::SegInvalidated.

    - -

    Referenced by AutoSegment::_invalidate(), AutoSegment::invalidate(), and AutoSegment::revalidate().

    - -
    -
    - -

    ◆ isInvalidatedLayer()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool isInvalidatedLayer () const
    -
    -inline
    -
    -

    Returns: true if segment has been changed of layer. Source and Target AutoContact may need to be altered.

    - -

    References Katabatic::SegInvalidatedLayer.

    - -

    Referenced by AutoContactTurn::updateTopology().

    - -
    -
    - -

    ◆ isCreated()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool isCreated () const
    -
    -inline
    -
    -

    Returns: true if segment has just been created and is not revalidated for the first time

    - -

    References Katabatic::SegCreated.

    - -

    Referenced by AutoContactTerminal::updateGeometry().

    - -
    -
    - -

    ◆ isCanonical()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool isCanonical () const
    -
    -inline
    -
    -
    - -

    ◆ isUnsetAxis()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool isUnsetAxis () const
    -
    -inline
    -
    -

    Returns: true if the segment axis has never been set.

    - -

    References Katabatic::SegAxisSet.

    - -
    -
    - -

    ◆ isSlackened()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool isSlackened () const
    -
    -inline
    -
    -

    Returns: true if the segment has already been slackened.

    - -

    References Katabatic::SegSlackened.

    - -

    Referenced by AutoHorizontal::_makeDogleg(), and AutoVertical::_makeDogleg().

    - -
    -
    - -

    ◆ _canSlacken()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool _canSlacken () const
    -
    -pure virtual
    -
    -

    Returns: true if the segment can be slackened. That is, source or target constraints are less than three pitches.

    - -

    Implemented in AutoVertical, and AutoHorizontal.

    - -

    Referenced by AutoSegment::canSlacken().

    - -
    -
    - -

    ◆ canReduce()

    - -
    -
    - - - - - - - -
    bool canReduce () const
    -
    -

    Returns: true if the segment can be reduced. That is:

      -
    • Source & target are AutoContactTurn.
    • -
    • It is either spin top or spin bottom, that is connecting perpandiculars both in the same layer.
    • -
    • Has a length less or equal one pitch in the perpandicular direction.
    • -
    • Neither of the perpandicular are also reduceds.
    • -
    - -

    References AutoSegment::getAutoSource(), AutoSegment::getAutoTarget(), AutoSegment::getLength(), AutoSegment::isGlobal(), AutoSegment::isSpinBottom(), AutoSegment::isSpinTop(), AutoSegment::isSpinTopOrBottom(), and AutoContact::isTurn().

    - -

    Referenced by AutoSegment::reduce().

    - -
    -
    - -

    ◆ mustRaise()

    - -
    -
    - - - - - - - -
    bool mustRaise () const
    -
    -

    Returns: true if the segment must be reduced. That is:

      -
    • It is in reduced state...
    • -
    • It is no longer spin top or spin bottom.
    • -
    • It's length exceed one pitch in the perpandicular direction.
    • -
    - -

    References AutoSegment::getLength(), AutoSegment::isSpinBottom(), AutoSegment::isSpinTop(), and Katabatic::SegIsReduced.

    - -
    -
    - -

    ◆ canDogleg()

    - -
    -
    - - - - - - - - -
    unsigned int canDogleg (Interval interval)
    -
    -

    Returns: non-zero if the aligned set of segment can be broken outside interval. The returned value could be zero (failure) or Katabatic::KbDoglegOnLeft or Katabatic::KbDoglegOnRight menaing that the aligned set could be broken on the left of the interval (resp. right of it).

    - -

    References Interval::contains(), AutoSegment::getAligneds(), AutoSegment::getSpanU(), Interval::getVMax(), Interval::getVMin(), Katabatic::KbDoglegOnLeft, and Katabatic::KbDoglegOnRight.

    - -
    -
    - -

    ◆ canMoveULeft()

    - -
    -
    - - - - - -
    - - - - - - - - -
    bool canMoveULeft (float reserve = 0.0) const
    -
    -pure virtual
    -
    -
    Returns
    true if the global segment can be moved on the left GCell (for a vertical) or down (for an horizontal). The move is accepted only if it do not change the amount of global wiring. Thus the following conditions:
      -
    • The segment mustn't be on the leftmost GCell (obvious...).
    • -
    • The segment must be global.
    • -
    • The source and target contacts must be AutoContactTurn(s).
    • -
    • At least one of the perpandicular must be global and connected through the target. That is, it's a global which extends toward left.
    • -
    • The GCell of maximum density on the left must remains below the current GCell of maximum density, with a margin of reserve (expressed in total saturation percentage).
    • -
    -
    - -

    Implemented in AutoVertical, and AutoHorizontal.

    - -
    -
    - -

    ◆ canMoveURight()

    - -
    -
    - - - - - -
    - - - - - - - - -
    bool canMoveURight (float reserve = 0.0) const
    -
    -pure virtual
    -
    -
    Returns
    true if the global segment can be moved on the right GCell (for a vertical) or up (for an horizontal). The move is accepted only if it do not change the amount of global wiring. Thus the following conditions:
      -
    • The segment mustn't be on the leftmost GCell (obvious...).
    • -
    • The segment must be global.
    • -
    • The source and target contacts must be AutoContactTurn(s).
    • -
    • At least one of the perpandicular must be global and connected through the source. That is, it's a global which extends toward right.
    • -
    • The GCell of maximum density on the left must remains below the current GCell of maximum density, with a margin of reserve (expressed in total saturation percentage).
    • -
    -
    - -

    Implemented in AutoVertical, and AutoHorizontal.

    - -
    -
    - -

    ◆ canMoveUp()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    bool canMoveUp (float reserve = 0.0,
    unsigned int flags = 0 
    ) const
    -
    -
    Parameters
    - - - -
    reserveNumber of track that must remains free after the move.
    flagsModificate the method behavior, see below.
    -
    -
    -
    Returns
    true if the segment can be moved up, that is to the next layer above in the same preferred routing direction. This method will check that in every GCell of the segment, at least reserve tracks are still avalaible after the segment has been moved up (reserve can be less than 1.0).
    -

    Possible (bitwise) value for flags :

      -
    • KbAllowTerminal : allow strong terminal to be moved up.
    • -
    • KbAllowLocal : allow local segments to be moved up.
    • -
    • KbPropagate : perform the check on the whole aligned set.
    • -
    • KbWithPerpands : also check the density on the perpandiculars begin & end GCell, there must be at least a 0.5 density reserve on them.
    • -
    - -

    References AutoSegment::getAligneds(), AutoSegment::getAutoSource(), AutoSegment::getAutoTarget(), Session::getConfiguration(), GCell::getFragmentation(), AutoSegment::getGCells(), GCell::getIndex(), AutoSegment::getLayer(), RoutingGauge::getLayerDepth(), Session::getRoutingGauge(), AutoSegment::isFixed(), AutoSegment::isLayerChange(), AutoSegment::isLocal(), AutoSegment::isStrongTerminal(), Katabatic::KbPropagate, and Katabatic::KbWithPerpands.

    - -
    -
    - -

    ◆ canPivotUp()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    bool canPivotUp (float reserve = 0.0,
    unsigned int flags = 0 
    ) const
    -
    -
    Parameters
    - - - -
    reserveNumber of track that must remains free after the move.
    flagsModificate the method behavior, see below.
    -
    -
    -

    Checks of the segment can be pivoted up. The difference between canMoveUp() and canPivotUp() lies in the fact that no perpandicular segment needs to be altered if the current segment is moved up. For example an M3 segment connected to only M4 can be pivoted up (in M5), but if connected to M2, it cannot.

    -

    Possible (bitwise) value for flags :

      -
    • KbPropagate : perform the check on the whole aligned set.
    • -
    • KbIgnoreContacts : do not check the source & target layers to know if the segment can be pivoted up.
    • -
    - -

    References AutoSegment::getAligneds(), AutoSegment::getAutoSource(), AutoSegment::getAutoTarget(), AutoSegment::getGCells(), AutoSegment::getLayer(), RoutingGauge::getLayerDepth(), AutoContact::getMinDepth(), Session::getRoutingGauge(), AutoSegment::isFixed(), AutoSegment::isLayerChange(), AutoSegment::isLocal(), AutoSegment::isStrongTerminal(), and Katabatic::KbPropagate.

    - -
    -
    - -

    ◆ canPivotDown()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    bool canPivotDown (float reserve = 0.0,
    unsigned int flags = 0 
    ) const
    -
    -
    Parameters
    - - - -
    reserveNumber of track that must remains free after the move.
    flagsModificate the method behavior, see below.
    -
    -
    -

    Checks of the segment can be pivoted down. The difference between canMoveDown() and canPivotDown() lies in the fact that no perpandicular segment needs to be altered if the current segment is moved down.

    -

    Possible (bitwise) value for flags :

      -
    • KbPropagate : perform the check on the whole aligned set.
    • -
    - -

    References AutoSegment::getAligneds(), AutoSegment::getAutoSource(), AutoSegment::getAutoTarget(), AutoSegment::getGCells(), AutoSegment::getLayer(), RoutingGauge::getLayerDepth(), AutoContact::getMaxDepth(), Session::getRoutingGauge(), AutoSegment::isFixed(), AutoSegment::isLayerChange(), AutoSegment::isLocal(), AutoSegment::isStrongTerminal(), and Katabatic::KbPropagate.

    - -
    -
    - -

    ◆ canSlacken()

    - -
    -
    - - - - - - - - -
    bool canSlacken (unsigned int flags = 0) const
    -
    -

    Returns: true if the segment can be slackened. That is, source or target constraints are less than three pitches.

    -

    If flags contains KbPropagate, look on the whole aligned set.

    - -

    References AutoSegment::_canSlacken(), AutoSegment::getAligneds(), AutoSegment::isGlobal(), and Katabatic::KbPropagate.

    - -
    -
    - -

    ◆ checkPositions()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool checkPositions () const
    -
    -pure virtual
    -
    -

    Returns: true if the relative positions of source & target are coherent. (source <= target).

    - -

    Implemented in AutoVertical, and AutoHorizontal.

    - -
    -
    - -

    ◆ checkConstraints()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool checkConstraints () const
    -
    -pure virtual
    -
    -

    Returns: true if the constraint intervel is coherent (non-empty or punctual in the worst case).

    - -

    Implemented in AutoVertical, and AutoHorizontal.

    - -
    -
    - -

    ◆ getId()

    - -
    -
    - - - - - -
    - - - - - - - -
    unsigned long getId () const
    -
    -inline
    -
    -

    Returns: The AutoSegment unique identifier.

    - -

    Referenced by AutoHorizontal::_preDestroy(), and AutoVertical::_preDestroy().

    - -
    -
    - -

    ◆ getDirection()

    - -
    -
    - - - - - -
    - - - - - - - -
    unsigned int getDirection () const
    -
    -pure virtual
    -
    -

    Returns: Katabatic::KbHorizontal or Katabatic::KbVertical according to the decorated segment.

    - -

    Implemented in AutoVertical, and AutoHorizontal.

    - -

    Referenced by AutoSegment::getMinSpanU(), AutoSegment::getPerpandicularsBound(), and AutoSegment::makeDogleg().

    - -
    -
    - -

    ◆ getGCell()

    - - - -

    ◆ getGCells()

    - -
    -
    - - - - - -
    - - - - - - - - -
    size_t getGCells (vector< GCell *> & gcells) const
    -
    -pure virtual
    -
    -
    Parameters
    - - -
    gcellsA vector that will be filled by all the GCells that the segment overlap. In increasing order, from source to target.
    -
    -
    -
    Returns
    The vector's size.
    - -

    Implemented in AutoVertical, and AutoHorizontal.

    - -

    Referenced by AutoSegment::canMoveUp(), AutoSegment::canPivotDown(), and AutoSegment::canPivotUp().

    - -
    -
    - -

    ◆ getAutoSource()

    - - - -

    ◆ getAutoTarget()

    - - - -

    ◆ getOppositeAnchor() [2/2]

    - -
    -
    - - - - - - - - -
    AutoContact * getOppositeAnchor (AutoContactcontact) const
    -
    -

    Returns: The source or target AutoContact opposite to contact.

    - -

    References AutoContact::base(), AutoSegment::getOppositeAnchor(), and Session::lookup().

    - -
    -
    - -

    ◆ getPerpandicularsBound()

    - -
    -
    - - - - - - - - -
    size_t getPerpandicularsBound (set< AutoSegment *> & bounds)
    -
    -
    Parameters
    - - -
    boundsA vector that will be filled by all the AutoSegments perpandicular to this one that induce a constraint.
    -
    -
    -
    Returns
    The vector's size.
    - -

    References AutoSegment::getDirection(), Component::getSlaveComponents(), Collection< Type >::getSubSet(), and Session::lookup().

    - -
    -
    - -

    ◆ getParent()

    - -
    -
    - - - - - -
    - - - - - - - -
    AutoSegment * getParent () const
    -
    -inline
    -
    -

    Returns: If this segment has been created by a dogleg operation, the parent is the one from which we fragmented.

    - -
    -
    - -

    ◆ getAxis()

    - -
    -
    - - - - - -
    - - - - - - - -
    DbU::Unit getAxis () const
    -
    -inline
    -
    -
    - -

    ◆ getSourceU()

    - -
    -
    - - - - - -
    - - - - - - - -
    DbU::Unit getSourceU () const
    -
    -pure virtual
    -
    -

    Returns: The AutoSegment uniform source position. (X for an horizontal and Y for a Vertical).

    - -

    Implemented in AutoVertical, and AutoHorizontal.

    - -
    -
    - -

    ◆ getTargetU()

    - -
    -
    - - - - - -
    - - - - - - - -
    DbU::Unit getTargetU () const
    -
    -pure virtual
    -
    -

    Returns: The AutoSegment uniform target position. (X for an horizontal and Y for a Vertical).

    - -

    Implemented in AutoVertical, and AutoHorizontal.

    - -
    -
    - -

    ◆ getDuSource()

    - -
    -
    - - - - - -
    - - - - - - - -
    DbU::Unit getDuSource () const
    -
    -pure virtual
    -
    -

    Returns: The AutoSegment uniform delta from source. (dX for an horizontal and dY for a Vertical).

    - -

    Implemented in AutoVertical, and AutoHorizontal.

    - -
    -
    - -

    ◆ getDuTarget()

    - -
    -
    - - - - - -
    - - - - - - - -
    DbU::Unit getDuTarget () const
    -
    -pure virtual
    -
    -

    Returns: The AutoSegment uniform delta from source. (dX for an horizontal and dY for a Vertical).

    - -

    Implemented in AutoVertical, and AutoHorizontal.

    - -
    -
    - -

    ◆ getOrigin()

    - -
    -
    - - - - - -
    - - - - - - - -
    DbU::Unit getOrigin () const
    -
    -inline
    -
    -

    Returns: The AutoSegment uniform source (lowest) GCell coordinate. (dX for an horizontal and dY for a Vertical).

    - -

    References GCell::getX(), GCell::getY(), and AutoSegment::isHorizontal().

    - -

    Referenced by AutoSegment::computeOptimal(), AutoSegment::getOptimalMax(), AutoSegment::getOptimalMin(), AutoSegment::setOptimalMax(), and AutoSegment::setOptimalMin().

    - -
    -
    - -

    ◆ getExtremity()

    - -
    -
    - - - - - -
    - - - - - - - -
    DbU::Unit getExtremity () const
    -
    -inline
    -
    -

    Returns: The AutoSegment uniform target (greatest) GCell coordinate. (dX for an horizontal and dY for a Vertical).

    - -

    References GCell::getXMax(), GCell::getYMax(), and AutoSegment::isHorizontal().

    - -

    Referenced by AutoSegment::computeOptimal().

    - -
    -
    - -

    ◆ getSpanU()

    - -
    -
    - - - - - -
    - - - - - - - -
    Interval getSpanU () const
    -
    -pure virtual
    -
    -

    Returns: The AutoSegment uniform occupying interval (on X for horizontal and on Y for vertical).

    - -

    Implemented in AutoVertical, and AutoHorizontal.

    - -

    Referenced by AutoSegment::canDogleg(), and AutoSegment::makeDogleg().

    - -
    -
    - -

    ◆ getMinSpanU()

    - -
    -
    - - - - - - - -
    Interval getMinSpanU () const
    -
    -
    Returns
    The AutoSegment uniform minimum occupying interval, computed from the constraints of all the supporting aligned AutoContacts. (on X for horizontal and on Y for vertical).
    - -

    References AutoSegment::getDirection(), Interval::getVMax(), and Interval::getVMin().

    - -
    -
    - -

    ◆ getSourceConstraints()

    - -
    -
    - - - - - -
    - - - - - - - - -
    Interval getSourceConstraints (unsigned int flags = 0) const
    -
    -pure virtual
    -
    -
    Returns
    The Interval into witch the source AutoContact can vary. By default all deduced constraints and user constraints are took into account. If flags contains KbNativeConstraints the constraint returned is only the enclosing GCell.
    - -

    Implemented in AutoVertical, and AutoHorizontal.

    - -

    Referenced by AutoSegment::makeDogleg().

    - -
    -
    - -

    ◆ getTargetConstraints()

    - -
    -
    - - - - - -
    - - - - - - - - -
    Interval getTargetConstraints (unsigned int flags = 0) const
    -
    -pure virtual
    -
    -
    Returns
    The Interval into witch the target AutoContact can vary. By default all deduced constraints and user constraints are took into account. If flags contains KbNativeConstraints the constraint returned is only the enclosing GCell.
    - -

    Implemented in AutoVertical, and AutoHorizontal.

    - -

    Referenced by AutoSegment::makeDogleg().

    - -
    -
    - -

    ◆ getConstraints() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    bool getConstraints (DbU::Unitmin,
    DbU::Unitmax 
    ) const
    -
    -pure virtual
    -
    -

    Returns: in min & max the allowed range for the segment axis.

    - -

    Implemented in AutoVertical, and AutoHorizontal.

    - -

    Referenced by AutoSegment::computeOptimal(), AutoSegment::getConstraints(), AutoSegment::getSlack(), AutoSegment::toConstraintAxis(), and AutoSegment::toOptimalAxis().

    - -
    -
    - -

    ◆ getConstraints() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - -
    bool getConstraints (Intervali) const
    -
    -inline
    -
    -

    Returns: in i the allowed range for the segment axis.

    - -

    References AutoSegment::getConstraints(), Interval::getVMax(), and Interval::getVMin().

    - -
    -
    - -

    ◆ getUserConstraints()

    - -
    -
    - - - - - -
    - - - - - - - -
    const Interval & getUserConstraints () const
    -
    -inline
    -
    -

    Returns: A reference to the additional constraints added to the axis of the segment.

    - -

    Referenced by AutoHorizontal::getConstraints(), and AutoVertical::getConstraints().

    - -
    -
    - -

    ◆ getSlack()

    - -
    -
    - - - - - -
    - - - - - - - -
    DbU::Unit getSlack () const
    -
    -virtual
    -
    -

    Returns: The length of the axis constraint interval.

    - -

    References AutoSegment::getConstraints().

    - -
    -
    - -

    ◆ getOptimalMin()

    - -
    -
    - - - - - -
    - - - - - - - -
    DbU::Unit getOptimalMin () const
    -
    -inline
    -
    -

    Returns: The AutoSegment minimum axis optimal range.

    - -

    References AutoSegment::getOrigin(), and DbU::lambda().

    - -

    Referenced by AutoSegment::getCost(), AutoSegment::getOptimal(), and AutoSegment::toOptimalAxis().

    - -
    -
    - -

    ◆ getOptimalMax()

    - -
    -
    - - - - - -
    - - - - - - - -
    DbU::Unit getOptimalMax () const
    -
    -inline
    -
    -

    Returns: The AutoSegment maximum axis optimal range.

    - -

    References AutoSegment::getOrigin(), and DbU::lambda().

    - -

    Referenced by AutoSegment::getCost(), AutoSegment::getOptimal(), and AutoSegment::toOptimalAxis().

    - -
    -
    - -

    ◆ getOptimal()

    - -
    -
    - - - - - - - - -
    Interval & getOptimal (Intervali) const
    -
    -

    Inialize i with the AutoSegment axis optimal range.

    - -

    References AutoSegment::getOptimalMax(), AutoSegment::getOptimalMin(), Interval::getVMax(), and Interval::getVMin().

    - -
    -
    - -

    ◆ getCost()

    - -
    -
    - - - - - -
    - - - - - - - - -
    DbU::Unit getCost (DbU::Unit axis) const
    -
    -virtual
    -
    -
    Returns
    The cost if this segment is placed at axis. The cost is null if axis is inside the optimal interval and is the distance toward the nearest bound outside.
    - -

    References AutoSegment::getOptimalMax(), and AutoSegment::getOptimalMin().

    - -
    -
    - -

    ◆ getCanonical() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    AutoSegment * getCanonical (DbU::Unitmin,
    DbU::Unitmax 
    )
    -
    -virtual
    -
    -
    Returns
    The canonical segment associated to this one. Additionnaly compute the source & target position of the whole set of aligned segments.
    - -

    References AutoSegment::base(), AutoSegment::getAligneds(), AutoSegment::getSourcePosition(), AutoSegment::getTargetPosition(), and AutoSegment::isCanonical().

    - -

    Referenced by AutoSegment::getCanonical().

    - -
    -
    - -

    ◆ getCanonical() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - -
    AutoSegment * getCanonical (Intervali)
    -
    -inline
    -
    -
    Returns
    The canonical segment associated to this one. Additionnaly compute the source & target position of the whole set of aligned segments.
    - -

    References AutoSegment::getCanonical(), Interval::getVMax(), and Interval::getVMin().

    - -
    -
    - -

    ◆ unsetFlags()

    - - - -

    ◆ setFlags()

    - - - -

    ◆ setDuSource()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void setDuSource (DbU::Unit du)
    -
    -pure virtual
    -
    -

    Set the uniform dU from source anchor (dX for Horizontal, dY for Vertical).

    - -

    Implemented in AutoVertical, and AutoHorizontal.

    - -
    -
    - -

    ◆ setDuTarget()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void setDuTarget (DbU::Unit du)
    -
    -pure virtual
    -
    -

    Set the uniform dU from target anchor (dX for Horizontal, dY for Vertical).

    - -

    Implemented in AutoVertical, and AutoHorizontal.

    - -
    -
    - -

    ◆ computeTerminal()

    - -
    -
    - - - - - - - -
    void computeTerminal ()
    -
    -

    Recompute the terminal status of an AutoSegment. Initially, a segment which source or target is a terminal is flagged as SegStrongTerminal. After a topological modification, if the segment is no longer directly attached to a terminal, the status is progessively weakened. Once it reaches the weakest level, it stays on it so the algorithm can work out which segments is a start to a path toward a terminal.

    -

    Status from stronger to weaker:

    -
    Remark: The weakening is poorly done. After making a dogleg we do not
    know which of the segment must be weakened if not directly attached on a terminal. We must examinate source & target.
    - -

    References AutoSegment::_getFlags(), AutoSegment::getAutoSource(), AutoSegment::getAutoTarget(), Katabatic::SegWeakTerminal, Katabatic::SegWeakTerminal1, Katabatic::SegWeakTerminal2, AutoSegment::setFlags(), and AutoSegment::unsetFlags().

    - -
    -
    - -

    ◆ updateOrient()

    - -
    -
    - - - - - -
    - - - - - - - -
    void updateOrient ()
    -
    -pure virtual
    -
    -

    Ensure that source is lower than target. Swap them if needed. Swap never occurs on global segment because their source and target anchors are from different GCell, which are already ordered.

    - -

    Implemented in AutoVertical, and AutoHorizontal.

    - -

    Referenced by AutoSegment::_postCreate(), and AutoSegment::revalidate().

    - -
    -
    - -

    ◆ updatePositions()

    - -
    -
    - - - - - -
    - - - - - - - -
    void updatePositions ()
    -
    -pure virtual
    -
    -

    Update the segment begenning and ending positions. The positions takes into account the extension caps and reflect the real space used by the segment under it's long axis.

    - -

    Implemented in AutoVertical, and AutoHorizontal.

    - -

    Referenced by AutoSegment::_postCreate(), and AutoSegment::revalidate().

    - -
    -
    - -

    ◆ mergeUserConstraints()

    - -
    -
    - - - - - - - - -
    void mergeUserConstraints (const Intervalconstraints)
    -
    -

    Constraints applies on the valid axis interval. Merge in constraints with the user's constraints. The resulting constraints is the intersection of the former user's contraints and the one given as argument.

    - -

    References Interval::intersection().

    - -
    -
    - -

    ◆ resetUserConstraints()

    - -
    -
    - - - - - -
    - - - - - - - -
    void resetUserConstraints ()
    -
    -inline
    -
    -

    Constraints applies on the valid axis interval. Suppress all user's constraints.

    - -
    -
    - -

    ◆ setOptimalMin()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void setOptimalMin (DbU::Unit min)
    -
    -inline
    -
    -

    Sets the lower bound of the optimal axis interval.

    - -

    References DbU::getLambda(), and AutoSegment::getOrigin().

    - -

    Referenced by AutoSegment::computeOptimal().

    - -
    -
    - -

    ◆ setOptimalMax()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void setOptimalMax (DbU::Unit max)
    -
    -inline
    -
    -

    Sets the lower bound of the optimal axis interval.

    - -

    References DbU::getLambda(), and AutoSegment::getOrigin().

    - -

    Referenced by AutoSegment::AutoSegment(), and AutoSegment::computeOptimal().

    - -
    -
    - -

    ◆ revalidate()

    - - - -

    ◆ makeDogleg() [1/3]

    - -
    -
    - - - - - - - - -
    AutoSegment * makeDogleg (AutoContactfrom)
    -
    -
    Parameters
    - - -
    fromThe AutoContact from which we want to make a dogleg.
    -
    -
    -

    This method is dedicated for the restauration of topology connexity on AutoContcact after a layer change on one of their connected AutoSegment.

    -

    It perform three operations:

      -
    1. Create a dogleg on the AutoSegment (using the normal GCell variant).
    2. -
    3. Adjust the layers of the dogleg according whether we are going up or down from the AutoContact from to the segment.
    4. -
    5. Returns the new AutoSegment connected to from (it may be the same as before, if the AutoContact is the source of the segment).
    6. -
    - -

    References Layer::contains(), AutoSegment::getAutoSource(), RoutingGauge::getContactLayer(), Session::getDoglegs(), AutoContact::getGCell(), AutoContact::getLayer(), AutoSegment::getLayer(), RoutingGauge::getLayerDepth(), Session::getRoutingGauge(), RoutingGauge::getRoutingLayer(), AutoContact::getX(), AutoContact::getY(), and AutoSegment::isHorizontal().

    - -

    Referenced by AutoContactTurn::updateTopology(), and AutoContactTerminal::updateTopology().

    - -
    -
    - -

    ◆ makeDogleg() [2/3]

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    unsigned int makeDogleg (Interval interval,
    unsigned int flags = KbNoFlags 
    )
    -
    -

    Make a dogleg in a set of aligned segments, thus the dogleg may not be created on this segment but in one which span intersect interval.

    -

    Returns: A set of flags telling if the break has occured on the left candidate (Katabatic::KbDoglegOnLeft) or right (Katabatic::KbDoglegOnRight). it is combined with the flag telling if the above or below layer was used for the dogleg. In case of failure, zero is returned.

    -

    Break the set of aligned segments so the break point is outside interval. The break point so can occurs on the left of the interval (Katabatic::KbDoglegOnLeft) or on the right of the interval (Katabatic::KbDoglegOnRight). When the set of aligned segments fully enclose interval, a choice has to be made between the left and right candidate. The rules are as follow:

      -
    • A left candidate include the min of the interval into it's span.
    • -
    • A right candidate include the max of the interval into it's span.
    • -
    • In certain topologies, there can be more than left or right candidates (more than one segment of the set intersect the bounds of the interval). Thoses candidates are ecludeds.
    • -
    • If the two candidates are avalaibles, we choose the one with the greated native constraints.
    • -
    • In case of strict equality, the left candidate is choosen.
    • -
    -
    -_makeDogleg-4.png -
    -Example Case 4
    - -

    References AutoSegment::_makeDogleg(), Interval::contains(), AutoSegment::getAligneds(), AutoSegment::getAutoSource(), AutoSegment::getAutoTarget(), AutoSegment::getDirection(), Session::getDoglegs(), AutoContact::getGCell(), GCell::getRight(), GCell::getSide(), Interval::getSize(), AutoSegment::getSourceConstraints(), AutoSegment::getSpanU(), AutoSegment::getTargetConstraints(), GCell::getUp(), DbU::getValueString(), Interval::getVMax(), Interval::getVMin(), Katabatic::KbDoglegOnLeft, Katabatic::KbDoglegOnRight, Katabatic::KbHorizontal, and Katabatic::KbNativeConstraints.

    - -
    -
    - -

    ◆ makeDogleg() [3/3]

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    unsigned int makeDogleg (GCelldoglegGCell,
    unsigned int flags = KbNoFlags 
    )
    -
    -

    Make a dogleg in a set of aligned segments, thus the dogleg may not be created on this segment but in the one which is under doglegGCell.

    -

    Returns: A flag telling if the above or below layer was used for the perpandicular segment (Katabatic::KbUseAboveLayer or Katabatic::KbUseBelowLayer).

    - -

    References AutoSegment::_makeDogleg(), Katabatic::EngineGlobalLoaded, AutoSegment::getAligneds(), AutoSegment::getDirection(), Session::getKatabatic(), GCell::getSide(), AutoSegment::getSpanU(), Interval::intersect(), and AutoSegment::isFixed().

    - -
    -
    - -

    ◆ _makeDogleg()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    unsigned int _makeDogleg (GCelldoglegGCell,
    unsigned int flags 
    )
    -
    -pure virtual
    -
    -

    This method is the workhorse for the various dogleg and topology restauration methods. It is the atomic method that actually make the dogleg on this segment.

    -

    Returns: Katabatic::KbUseAboveLayer if the dogleg is using the above layer (Katabatic::KbUseBelowLayer for the below layer).

    -

    Break the current segment in two (a.k.a. making a dogleg).

      -
    • The segment is broken inside doglegGCell.
    • -
    • Two new segments are createds, one perpandicular and one parallel.
    • -
    • The original segment is always kept attached to the source. (the new parallel fragment is attached to the target).
    • -
    • The perpandicular segment is in the layer above by default. If we are already on the topmost routing layer, the below layer is used.
    • -
    • If the segment pass through the breaking GCell, it's axis is set into the center. If the segment is local, the axis is the middle of the segment.
    • -
    • The Local/Global kind of the original segment is updated. The local/global status is computed by the constructor of the AutoSegment for the perpandicular and the new parallel.
    • -
    • The terminal state is updated. If the segment is a strong terminal the part that is no longer directly connected to the terminal is demoted to Katabatic::SegWeakTerminal1.
    • -
    • The perpandicular is obviously a canonical. If the broken segment is canonical, the original is left canonical and only the new parallel is re-canonized. Otherwise, we re-canonise both sets of aligned segments (the one on the source and the one on the target).
    • -
    • The three segments are added to the session dogleg stack.
    • -
    -

    After this method call the net topology is guarantee to be valid.

    -
    -_makeDogleg-1.png -
    -Example Case 1
    -
    -_makeDogleg-2.png -
    -Example Case 2
    - -

    Implemented in AutoVertical, and AutoHorizontal.

    - -

    Referenced by AutoSegment::makeDogleg().

    - -
    -
    - -

    ◆ moveULeft()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool moveULeft ()
    -
    -pure virtual
    -
    -

    This function do not manage an aligned set. It applies on this segment only.

    -

    Displace an Horizontal or Vertical segment to the GCell below (a.k.a. lower or inferior). Rules for displacement:

      -
    • The segment must be connected at both end to a turn contact (we do not want to manage more complex cases for the time beeing).
    • -
    • And, of course, the segment must not already by on the bottomost GCell...
    • -
    -

    The displacement take care of:

      -
    • Managing the status of the various perpandiculars. The stretched one are made global if needed. The shrinked one made local, if needed.
    • -
    • The supporting AutoContact (source & target) are changed of GCell.
    • -
    • If the segment is global, the go-through GCells are updateds.
    • -
    -

    Returns: true if the move has succeeded.

    -
    -moveULeft-1.png -
    -moveULeft() for an Horizontal
    - -

    Implemented in AutoVertical, and AutoHorizontal.

    - -
    -
    - -

    ◆ moveURight()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool moveURight ()
    -
    -pure virtual
    -
    -

    This function do not manage an aligned set. It applies on this segment only.

    -

    Displace an Horizontal or Vertical segment to the GCell above (a.k.a. upper or superior). Rules for displacement:

    -
    See also
    AutoSegment::moveULeft() for a complete description.
    - -

    Implemented in AutoVertical, and AutoHorizontal.

    - -
    -
    - -

    ◆ slacken()

    - -
    -
    - - - - - - - - -
    void slacken (unsigned int flags)
    -
    -

    If the the AutoSegment is attached trough source and/or target to a terminal with too tight constraints, create a dogleg on overconstrained extremities.

    -

    If flags contains Katabatic::KbPropagate, not only the current segment will be looked up, but the whole aligned set. Note that due to the structure of the database, there can be no more than two terminal connected segments on the whole set (one on each extremity).

    -

    If flags contains Katabatic::KbHalfSlacken, the number of tracks under which the constraints are considered too tight is 3. Otherwise it is 10, that is a whole GCell side span. This flag should be used when a long set of global wire is overconstrained by only one of it's terminal, the other one offering sufficient slack (typically: 8).

    -

    The segment will also be slackened from it's terminal if the difference between the current slack (resulting from all the constraints of the aligned set) and the native slack is less than 3 tracks. This case means that we are already near the native slack and it not sufficent enough a degree of freedom.

    -
    -_slacken-1.png -
    -slacken() for an Horizontal
    -

    The slacken() method reject the slackening of short locals as shown in figure 2.a. One way or another, we must connect to the terminal through this short local. If we cannot place it, breaking it in two other short local wouldn't help. In fact, it will only clutter more the GCell and make subsequent routing more difficult.

    -

    The figures 2.b and 2.c shows the special case of slackening an horizontal from an horizontal terminal. In the original configuration, the slack on segment id:10 is null, it's only choice is to be aligned with the terminal. If a slackening is requested, it generally implies that the horizontal track is blocked, and close to the terminal. Based on thoses hypothesis, when we slacken the segment id:10 we impose that the source contact is fixed on the terminal itself. That is, the segment id:10 will be reduced to a zero-length and we made an immediate turn (see 2.c ).

    -
    -_slacken-2.png -
    -slacken() for an Horizontal (special cases)
    - -

    References AutoSegment::getAligneds(), and Katabatic::KbPropagate.

    - -
    -
    - -

    ◆ reduceDoglegLayer()

    - -
    -
    - - - - - - - -
    bool reduceDoglegLayer ()
    -
    -

    Perform the actual layer change on a reduced segment. This method is to be called juste before destroying the Katabatic database.

    -

    Returns: true if a change occurs.

    - -

    References AutoSegment::getAutoSource(), AutoSegment::getAutoTarget(), Session::getRoutingLayer(), AutoSegment::isReduced(), AutoSegment::isSpinBottom(), AutoSegment::isSpinTop(), AutoContact::setLayer(), and AutoSegment::setLayer().

    - -
    -
    - -

    ◆ reduce()

    - -
    -
    - - - - - - - -
    bool reduce ()
    -
    -

    Sets the segment into reduced state.

    -

    Returns: true if the operation did succeed. The layer will not be actually changed until the Katabatic database is saved/destroyed.

    -

    A segment can be reduced if:

      -
    • Source & target are AutoContactTurn.
    • -
    • It is either spin top or spin bottom, that is connecting perpandiculars both in the same layer.
    • -
    • Has a length less or equal one pitch in the perpandicular direction.
    • -
    • Neither of the perpandicular are also reduceds.
    • -
    -
    -reduce-1.png -
    -Reduce Example
    -

    If segment id:12 is reduced, it prevents id:10 & id:14 to be also reduced, by increasing the _reduced counter. In this example id:14 is spin top and id:12 is spin bottom.

    -

    If we reduce two adjacent segments, one will go up while the other will go down (they will actually exchange their layers), it will thus defeat the purpose of creating a same layer dogleg. Besides, the turn contact between them will be changed into a pure metal one, generating a disconnexion...

    -
    See also
    AutoSegment::raise()
    - -

    References AutoSegment::canReduce(), AutoSegment::getAutoSource(), AutoSegment::getAutoTarget(), AutoContact::getPerpandicular(), and Katabatic::SegIsReduced.

    - -
    -
    - -

    ◆ raise()

    - -
    -
    - - - - - - - -
    bool raise ()
    -
    -

    Get a segment out of reduced state.

    -

    Returns: true if a state change did really take place.

    -
    See also
    AutoSegment::reduce()
    - -

    References AutoSegment::getAutoSource(), AutoSegment::getAutoTarget(), AutoContact::getPerpandicular(), and Katabatic::SegIsReduced.

    - -
    -
    - -

    ◆ canonize()

    - -
    -
    - - - - - - - - -
    AutoSegment * canonize (unsigned int flags = KbNoFlags)
    -
    -

    Find and set the canonical AutoSegment from a set of aligneds. For the time beeing we assumes that there is no merging process, so the Segments will only gets more and more fragmented. This implies that a segment can become canonical but it will never revert to normal status.

    -

    The canonical AutoSegment is the one with the lowest Id. This a way of ensuring reproductible results. Note that the canonical one may not be the geometrically lowest one.

    -
    Remark: Canonical aware method.
    - -

    References AutoSegment::getAligneds(), AutoSegment::isCanonical(), AutoSegment::isGlobal(), Katabatic::SegCanonical, Katabatic::SegNotAligned, Katabatic::SegWeakGlobal, AutoSegment::setFlags(), and AutoSegment::unsetFlags().

    - -

    Referenced by AutoHorizontal::_makeDogleg(), and AutoVertical::_makeDogleg().

    - -
    -
    - -

    ◆ invalidate()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void invalidate (unsigned int flags = KbPropagate)
    -
    -virtual
    -
    -

    Invalidate this AutoSegment, or if the Katabatic::KbPropagate flags is set, the whole set of aligned segments.

    -
    Remark: If Katabatic is in the destruction stage, this function does nothing.
    -
    Remark: Canonical aware method.
    - -

    References AutoSegment::_invalidate(), AutoSegment::getAligneds(), AutoSegment::isInvalidated(), Katabatic::KbPropagate, Katabatic::KbSource, Katabatic::KbTarget, and AutoSegment::setFlags().

    - -

    Referenced by AutoHorizontal::_makeDogleg(), AutoVertical::_makeDogleg(), AutoSegment::_postCreate(), AutoContactVTee::updateTopology(), AutoContactTurn::updateTopology(), and AutoContactTerminal::updateTopology().

    - -
    -
    - -

    ◆ computeOptimal()

    - -
    -
    - - - - - - - - -
    Interval computeOptimal (set< AutoSegment *> & processeds)
    -
    -
    - -

    ◆ setAxis()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void setAxis (DbU::Unit axis,
    unsigned int flags = KbNoFlags 
    )
    -
    -
    Parameters
    - - - -
    axisThe new position of the axis.
    flagsSee KbRealignate.
    -
    -
    -

    Set the axis of an aligned set. This method does nothing if not called on the canonical AutoSegment of the set. If the new value of the axis is equal to the previous one, nothing is done (non-canonical AutoSegment are not looked after). To force an actual axis set, with invalidation of the whole AutoSegment set, set the KbRealignate flag.

    -
    Remark: Canonical aware method.
    - -

    References AutoSegment::getAligneds(), AutoSegment::getAxis(), AutoSegment::isCanonical(), AutoSegment::isHorizontal(), Katabatic::KbRealignate, and DbU::toLambda().

    - -

    Referenced by AutoHorizontal::moveULeft(), AutoVertical::moveULeft(), AutoHorizontal::moveURight(), AutoVertical::moveURight(), AutoSegment::toConstraintAxis(), and AutoSegment::toOptimalAxis().

    - -
    -
    - -

    ◆ toConstraintAxis()

    - -
    -
    - - - - - - - - -
    bool toConstraintAxis (unsigned int flags = KbRealignate)
    -
    -

    If the AutoSegment axis is outside the constraint interval, put it on nearest bound. This method is active only on canonical AutoSegments.

    -
    Returns
    true if an actual axis change is made.
    -
    Remark: Canonical aware method.
    - -

    References AutoSegment::getAutoSource(), AutoSegment::getAxis(), AutoSegment::getConstraints(), AutoContact::getGCell(), Interval::getHalfSize(), GCell::getSide(), AutoSegment::isCanonical(), AutoSegment::isDogleg(), AutoSegment::isHorizontal(), Katabatic::KbHorizontal, Katabatic::KbVertical, and AutoSegment::setAxis().

    - -
    -
    - -

    ◆ toOptimalAxis()

    - -
    -
    - - - - - - - - -
    bool toOptimalAxis (unsigned int flags = KbRealignate)
    -
    -

    If the AutoSegment axis is outside the optimal interval, put it on nearest bound. This method is active only on canonical AutoSegments.

    -
    Returns
    true if an actual axis change is made.
    -
    Remark: Canonical aware method.
    - -

    References AutoSegment::getAxis(), AutoSegment::getConstraints(), AutoSegment::getOptimalMax(), AutoSegment::getOptimalMin(), AutoSegment::isCanonical(), Katabatic::KbRealignate, and AutoSegment::setAxis().

    - -
    -
    - -

    ◆ getOnSourceContact()

    - -
    -
    - - - - - - - - -
    AutoSegments getOnSourceContact (unsigned int direction)
    -
    -

    Returns: The Collection of AutoSegment in direction that are on this segment source contact.

    - -

    References AutoSegment::getSource(), and Collection< Type >::getSubSet().

    - -
    -
    - -

    ◆ getOnTargetContact()

    - -
    -
    - - - - - - - - -
    AutoSegments getOnTargetContact (unsigned int direction)
    -
    -

    Returns: The Collection of AutoSegment in direction that are on this segment target contact.

    - -

    References Collection< Type >::getSubSet(), and AutoSegment::getTarget().

    - -
    -
    - -

    ◆ getAligneds()

    - -
    -
    - - - - - - - - -
    AutoSegments getAligneds (unsigned int flags = KbNoFlags)
    -
    -
    - -

    ◆ getPerpandiculars()

    - -
    -
    - - - - - - - -
    AutoSegments getPerpandiculars ()
    -
    -

    The Collection of all AutoSegments directly perpandiculars to the whole aligned set.

    - -

    Referenced by AutoSegment::computeOptimal().

    - -
    -
    - -

    ◆ _preCreate()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void _preCreate (AutoContactsource,
    AutoContacttarget 
    )
    -
    -staticprotected
    -
    -

    Perform sanity checks before allowing the actual creation of an AutoSegment. If an error occurs throw an exception.

    -

    Check for:

      -
    • source and target must not be NULL.
    • -
    • source and target must be different.
    • -
    - -
    -
    - -

    ◆ _postCreate()

    - -
    -
    - - - - - -
    - - - - - - - -
    void _postCreate ()
    -
    -protectedvirtual
    -
    -

    Perform operations that, given the data structure cannot be done in the constructor. Also allows for sharing code with the derived classes. Currently:

    - -

    Reimplemented in AutoVertical, and AutoHorizontal.

    - -

    References AutoSegment::getNet(), Session::invalidate(), AutoSegment::invalidate(), Session::link(), Observable::notify(), AutoSegment::updateOrient(), and AutoSegment::updatePositions().

    - -

    Referenced by AutoHorizontal::_postCreate(), AutoVertical::_postCreate(), and AutoSegment::create().

    - -
    -
    - -

    ◆ _preDestroy()

    - -
    -
    - - - - - -
    - - - - - - - -
    void _preDestroy ()
    -
    -protectedvirtual
    -
    -

    Perform operations that must be done before the actual destructor is called. Merely whidrawn the AutoSegment from the lookup/Session mechanism.

    - -

    Reimplemented in AutoVertical, and AutoHorizontal.

    - -

    References Observable::notify(), and Session::unlink().

    - -

    Referenced by AutoHorizontal::_preDestroy(), and AutoVertical::_preDestroy().

    - -
    -
    - -

    ◆ _invalidate()

    - -
    -
    - - - - - -
    - - - - - - - -
    Interval _invalidate ()
    -
    -protected
    -
    -

    Invalidate this segment. The segment is scheduled into the Session revalidation mechanism.

    - -

    References Session::invalidate(), AutoSegment::isInvalidated(), Observable::notify(), Katabatic::SegInvalidated, and AutoSegment::setFlags().

    - -

    Referenced by AutoSegment::invalidate().

    - -
    -
    - -

    ◆ _getFlags()

    - -
    -
    - - - - - -
    - - - - - - - -
    unsigned int _getFlags () const
    -
    -inlineprotected
    -
    -

    Sets flags given as arguments.

    - -

    Referenced by AutoSegment::computeTerminal().

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegment.js b/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegment.js deleted file mode 100644 index b82a5637..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegment.js +++ /dev/null @@ -1,124 +0,0 @@ -var classKatabatic_1_1AutoSegment = -[ - [ "AutoSegment", "classKatabatic_1_1AutoSegment.html#ae64a61508d148cb4a0ee9b5ffb177659", null ], - [ "~AutoSegment", "classKatabatic_1_1AutoSegment.html#a5d135025de0c1725d6252099c2e70e2b", null ], - [ "create", "classKatabatic_1_1AutoSegment.html#ab0cc9e57beeceec519cd4bd3e415569e", null ], - [ "create", "classKatabatic_1_1AutoSegment.html#aa843c016071177179486e47ebd0c92c9", null ], - [ "base", "classKatabatic_1_1AutoSegment.html#a53877ff5ef48eb0030c2581a6eeb3c09", null ], - [ "base", "classKatabatic_1_1AutoSegment.html#ade416d0483aefe986988fa89a7cf6fcf", null ], - [ "getHorizontal", "classKatabatic_1_1AutoSegment.html#a659b8ed90de679564924afe07af478de", null ], - [ "getVertical", "classKatabatic_1_1AutoSegment.html#ab6a809b6f3ef3cf5385fa35580e31e7a", null ], - [ "getCell", "classKatabatic_1_1AutoSegment.html#a148fdf09f18e7adb39a73c747f165266", null ], - [ "getNet", "classKatabatic_1_1AutoSegment.html#adf3e1a980233163de0ca34a5c3575998", null ], - [ "getLayer", "classKatabatic_1_1AutoSegment.html#a304ee4e02745811e04ac6fb688bf834f", null ], - [ "getBoundingBox", "classKatabatic_1_1AutoSegment.html#a4e70b34c1b87c093c4405d9d2e924a05", null ], - [ "getSourceHook", "classKatabatic_1_1AutoSegment.html#a1defbbaef0a1975993e157a8d5f68ded", null ], - [ "getTargetHook", "classKatabatic_1_1AutoSegment.html#ad62048f68151e5db987b5a7c79cce4ed", null ], - [ "getSource", "classKatabatic_1_1AutoSegment.html#a6f00fc7f0357778613214c4e57d9bc2f", null ], - [ "getTarget", "classKatabatic_1_1AutoSegment.html#ac92a1ae33842aab5d067b393dd2596fe", null ], - [ "getOppositeAnchor", "classKatabatic_1_1AutoSegment.html#a898ede38fc37409371bff9d7dc7f917a", null ], - [ "getAnchors", "classKatabatic_1_1AutoSegment.html#a7b72661b3586b369ebf3adc59a5239c2", null ], - [ "getX", "classKatabatic_1_1AutoSegment.html#a852afe759ce2cb8cb9c0524fc1e23387", null ], - [ "getY", "classKatabatic_1_1AutoSegment.html#ac597d25a34a79fb4393211c70f5a1bc3", null ], - [ "getWidth", "classKatabatic_1_1AutoSegment.html#aa018d3e74791b77d2def527248b9b00a", null ], - [ "getLength", "classKatabatic_1_1AutoSegment.html#a5370f2cf21823e1fa58d0627ee53c483", null ], - [ "getSourcePosition", "classKatabatic_1_1AutoSegment.html#a60c1e9c6cda9445e409e00ff22b1f52c", null ], - [ "getTargetPosition", "classKatabatic_1_1AutoSegment.html#a2b6bdf8fa83a7ce4cafa61314bee4e43", null ], - [ "getSourceX", "classKatabatic_1_1AutoSegment.html#ab160396298a1a51b9988ad246dc2a47f", null ], - [ "getSourceY", "classKatabatic_1_1AutoSegment.html#a232af840ba84faa0b1411ba1c3a418f1", null ], - [ "getTargetX", "classKatabatic_1_1AutoSegment.html#ae80b70bf8e29a74d8a5f61d1257c6cf2", null ], - [ "getTargetY", "classKatabatic_1_1AutoSegment.html#a0917c7f78a251822ea0ac6f48298d1c5", null ], - [ "invert", "classKatabatic_1_1AutoSegment.html#acbac6289ab14574da20f26c933e2e741", null ], - [ "setLayer", "classKatabatic_1_1AutoSegment.html#aad4271c35e0162c8a4d034dca07f5a4b", null ], - [ "isHorizontal", "classKatabatic_1_1AutoSegment.html#ac46ac3b48d712750c7888b48964ac189", null ], - [ "isVertical", "classKatabatic_1_1AutoSegment.html#a2bb30e82aad1f321af4a065338775f36", null ], - [ "isGlobal", "classKatabatic_1_1AutoSegment.html#a017b1ead8e5988dd0e491cae93ac510c", null ], - [ "isLocal", "classKatabatic_1_1AutoSegment.html#a69fb7e260ed2bc6fa82bfe12c2aeec5a", null ], - [ "isFixed", "classKatabatic_1_1AutoSegment.html#af5e7d3badddf2ec07159f1d83426d4c1", null ], - [ "isBipoint", "classKatabatic_1_1AutoSegment.html#ab5035e6d84cf3ec7b519a5acb109efaa", null ], - [ "isWeakTerminal", "classKatabatic_1_1AutoSegment.html#ae5574df7051a09ce3338cbe8481b8af3", null ], - [ "isStrongTerminal", "classKatabatic_1_1AutoSegment.html#acc92dc6f1ef0c36e7330f38726297b35", null ], - [ "isLayerChange", "classKatabatic_1_1AutoSegment.html#a0ddce124ab6b4cd97e59db077e7a2eac", null ], - [ "isStrap", "classKatabatic_1_1AutoSegment.html#a4721fcbe9c93ed5392afd9a756b989a8", null ], - [ "isDogleg", "classKatabatic_1_1AutoSegment.html#a172b2394f9c2cbaaf5bc4b19e0e76e65", null ], - [ "isInvalidated", "classKatabatic_1_1AutoSegment.html#a54f713d06c43bebf4e0dfef06e347531", null ], - [ "isInvalidatedLayer", "classKatabatic_1_1AutoSegment.html#a52c4108abf5e0622a216c2d81c47b9bb", null ], - [ "isCreated", "classKatabatic_1_1AutoSegment.html#a6a7e35dd5a9ca99ca879e424ce42b902", null ], - [ "isCanonical", "classKatabatic_1_1AutoSegment.html#ab671233e7112693ae31541190d1d251d", null ], - [ "isUnsetAxis", "classKatabatic_1_1AutoSegment.html#a436eb0e5951f681ce68e429ab671e582", null ], - [ "isSlackened", "classKatabatic_1_1AutoSegment.html#ab1f9e0bca70dea59558459a003a62d88", null ], - [ "_canSlacken", "classKatabatic_1_1AutoSegment.html#a676fcb7ece71d129b7a4d87a3f2e07aa", null ], - [ "canDogleg", "classKatabatic_1_1AutoSegment.html#a43c865bcfcfd6132352a9ac8a84c25cd", null ], - [ "canMoveULeft", "classKatabatic_1_1AutoSegment.html#aad55626c9d793a0b08bcff5be2a5ad0c", null ], - [ "canMoveURight", "classKatabatic_1_1AutoSegment.html#a096deb8a143f098eac2bff9ab9c52243", null ], - [ "canMoveUp", "classKatabatic_1_1AutoSegment.html#a02e6ec81411b250d60dccc0da39964a6", null ], - [ "canPivotUp", "classKatabatic_1_1AutoSegment.html#af76432e1e58e015bde917134757003f9", null ], - [ "canPivotDown", "classKatabatic_1_1AutoSegment.html#a1c810a1a6860202d94c670999546c4b8", null ], - [ "canSlacken", "classKatabatic_1_1AutoSegment.html#a46f380673fde750e88aad991168a35fd", null ], - [ "checkPositions", "classKatabatic_1_1AutoSegment.html#af026a81002bd907f1ccd4a4784aaa1db", null ], - [ "checkConstraints", "classKatabatic_1_1AutoSegment.html#a3d5732fd10b4a05076981066a4674487", null ], - [ "getId", "classKatabatic_1_1AutoSegment.html#ae68c47fdf838be02cbf6660cd25a0806", null ], - [ "getDirection", "classKatabatic_1_1AutoSegment.html#ae35b78590ed6aa546b626ef95f28c533", null ], - [ "getGCell", "classKatabatic_1_1AutoSegment.html#ab45ccfee0f781ec16c50672663d36141", null ], - [ "getGCells", "classKatabatic_1_1AutoSegment.html#ad9d24f97e55e2f538ed1c907bee99e81", null ], - [ "getAutoSource", "classKatabatic_1_1AutoSegment.html#afb5b4d8bddc75cd604c7a68aa5943c12", null ], - [ "getAutoTarget", "classKatabatic_1_1AutoSegment.html#a5a35baf84e1e3531c38a6132fb8118fb", null ], - [ "getOppositeAnchor", "classKatabatic_1_1AutoSegment.html#ac2d254eb530ff299dad804100198cc24", null ], - [ "getPerpandicularsBound", "classKatabatic_1_1AutoSegment.html#a5a63602ccc44f51012f10d138e1480c4", null ], - [ "getParent", "classKatabatic_1_1AutoSegment.html#a0ca0f04492f7365856ccceb905968bb5", null ], - [ "getAxis", "classKatabatic_1_1AutoSegment.html#af85576c58c70007850ad56e238e8d266", null ], - [ "getSourceU", "classKatabatic_1_1AutoSegment.html#aeaa1543880686755e389c4807128428f", null ], - [ "getTargetU", "classKatabatic_1_1AutoSegment.html#a828fef2716cc9c370d6d170bb96556ec", null ], - [ "getDuSource", "classKatabatic_1_1AutoSegment.html#ab4881df67bd8f036d0199ed6540fe774", null ], - [ "getDuTarget", "classKatabatic_1_1AutoSegment.html#a0644d656eedc71dba2fb3c6c0d83ed3f", null ], - [ "getOrigin", "classKatabatic_1_1AutoSegment.html#acedb5dbab9d0c872dc476fdbefff431c", null ], - [ "getExtremity", "classKatabatic_1_1AutoSegment.html#a6cf0ef9d591a27428ad29332e188b616", null ], - [ "getSpanU", "classKatabatic_1_1AutoSegment.html#a248eb2fbb06e3286650b28567d495f0b", null ], - [ "getMinSpanU", "classKatabatic_1_1AutoSegment.html#a0599f720e9aac305ecae20c7f4526c58", null ], - [ "getSourceConstraints", "classKatabatic_1_1AutoSegment.html#ab7685e309e1d910db3e8237f8a898c35", null ], - [ "getTargetConstraints", "classKatabatic_1_1AutoSegment.html#a9c1b8b3cd57fb7b0bf60c7a6148237c2", null ], - [ "getConstraints", "classKatabatic_1_1AutoSegment.html#a7c2fed22b081f8d3b7a69abb457153ea", null ], - [ "getConstraints", "classKatabatic_1_1AutoSegment.html#a61a7442901868f6167e5b5303d8f1736", null ], - [ "getUserConstraints", "classKatabatic_1_1AutoSegment.html#a5a69d84299029f9fd381a85d9de0a488", null ], - [ "getSlack", "classKatabatic_1_1AutoSegment.html#a15034a21dff23562fd70a83599a16d3a", null ], - [ "getOptimalMin", "classKatabatic_1_1AutoSegment.html#a2786cefb5df6ac92dcbb081c55ae50e6", null ], - [ "getOptimalMax", "classKatabatic_1_1AutoSegment.html#a9bea24981e7eaafb5746015355bf44f7", null ], - [ "getOptimal", "classKatabatic_1_1AutoSegment.html#abc07fe91810925f4a0191cd245cc85b6", null ], - [ "getCost", "classKatabatic_1_1AutoSegment.html#aaa87df41319c74dd180039708f68ff7e", null ], - [ "getCanonical", "classKatabatic_1_1AutoSegment.html#a8acbe1037827da2c2fef71a18c5886c7", null ], - [ "getCanonical", "classKatabatic_1_1AutoSegment.html#a988beca5780421c168a2475a5298009a", null ], - [ "unsetFlags", "classKatabatic_1_1AutoSegment.html#a1a6fac115cb81db48e3ac9ffa0721bb5", null ], - [ "setFlags", "classKatabatic_1_1AutoSegment.html#aeb14f94914af58657a0dc2f50ec98df5", null ], - [ "setDuSource", "classKatabatic_1_1AutoSegment.html#aaf60d18ab6d951a34a3d06959ce2e76f", null ], - [ "setDuTarget", "classKatabatic_1_1AutoSegment.html#a246756d4c8b3e094a0a9d6de3c2109ff", null ], - [ "computeTerminal", "classKatabatic_1_1AutoSegment.html#abc72aaeefa7450eaf67aee3212ec974d", null ], - [ "updateOrient", "classKatabatic_1_1AutoSegment.html#a102e0f4bbb0386e41be214d15a9e4549", null ], - [ "updatePositions", "classKatabatic_1_1AutoSegment.html#a6d95f4de39c13611786c95ddc7b8942e", null ], - [ "mergeUserConstraints", "classKatabatic_1_1AutoSegment.html#ae82ffef92ad9ffdc5da5e0c1830d9537", null ], - [ "resetUserConstraints", "classKatabatic_1_1AutoSegment.html#ac8768352909d37ebad1c06c9cf4ef8bb", null ], - [ "setOptimalMin", "classKatabatic_1_1AutoSegment.html#af92b3d000552b630695879dd5d4736a1", null ], - [ "setOptimalMax", "classKatabatic_1_1AutoSegment.html#a90173ab4f35b98c6544f9482ccd93b5e", null ], - [ "revalidate", "classKatabatic_1_1AutoSegment.html#a88ac40c065bce0ff97792d18b41b6a67", null ], - [ "makeDogleg", "classKatabatic_1_1AutoSegment.html#a39c927c04b5016770692b9b8448c2f04", null ], - [ "makeDogleg", "classKatabatic_1_1AutoSegment.html#a5ca22c853ee33a2b26367eaf29457766", null ], - [ "makeDogleg", "classKatabatic_1_1AutoSegment.html#aa21b16647c1750ba8b3eb9d99b12f073", null ], - [ "_makeDogleg", "classKatabatic_1_1AutoSegment.html#a37a14b40295ccb50cd5001891385807b", null ], - [ "moveULeft", "classKatabatic_1_1AutoSegment.html#af8ca7b17e952f4b599aeeb2f4e5be395", null ], - [ "moveURight", "classKatabatic_1_1AutoSegment.html#ad7fd54ca229fcf5ccd99f87b019b9cbc", null ], - [ "slacken", "classKatabatic_1_1AutoSegment.html#a1fbc0adb4c0b14632edc7c55f028cd4b", null ], - [ "canonize", "classKatabatic_1_1AutoSegment.html#a8b0d5044dce091d06b633848a6f8a66d", null ], - [ "invalidate", "classKatabatic_1_1AutoSegment.html#a23599eee5a07af377fbc8d47cda7e7b0", null ], - [ "computeOptimal", "classKatabatic_1_1AutoSegment.html#a7654ca2b0787b8a9eac8629bf9218761", null ], - [ "setAxis", "classKatabatic_1_1AutoSegment.html#a3881efebb7510d9b22e5f89bcd418954", null ], - [ "toConstraintAxis", "classKatabatic_1_1AutoSegment.html#a8ab41a962e18810808f4f065863b5a73", null ], - [ "toOptimalAxis", "classKatabatic_1_1AutoSegment.html#a750983d7154c94b54537127a3a18e14b", null ], - [ "getOnSourceContact", "classKatabatic_1_1AutoSegment.html#a4430f9704a59e1d4f7c37d7166649510", null ], - [ "getOnTargetContact", "classKatabatic_1_1AutoSegment.html#aadbb84c0f1383f6a2addc2661e388583", null ], - [ "getAligneds", "classKatabatic_1_1AutoSegment.html#aaca749f49cd03ca06449d5ea2104033a", null ], - [ "getPerpandiculars", "classKatabatic_1_1AutoSegment.html#aadc6427db83ebdb690e74980d9c8d7d8", null ], - [ "_preCreate", "classKatabatic_1_1AutoSegment.html#a8348937b1db79480305b178482d3ed61", null ], - [ "_postCreate", "classKatabatic_1_1AutoSegment.html#a3715b38135ca24745f610bebd3407c10", null ], - [ "_preDestroy", "classKatabatic_1_1AutoSegment.html#a7c13d9795eafd477994961f8a0d962d0", null ], - [ "_invalidate", "classKatabatic_1_1AutoSegment.html#a6a98d2e5839b880893703ad45db4e4c4", null ], - [ "_getFlags", "classKatabatic_1_1AutoSegment.html#ade0d97282e43595452ae8ac326d99752", null ] -]; \ No newline at end of file diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegment__inherit__graph.map b/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegment__inherit__graph.map deleted file mode 100644 index b4dfe2b1..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegment__inherit__graph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegment__inherit__graph.md5 b/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegment__inherit__graph.md5 deleted file mode 100644 index c52c45d9..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegment__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -97dafc94d31727e92851c94c5e9d1ab1 \ No newline at end of file diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegment__inherit__graph.png b/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegment__inherit__graph.png deleted file mode 100644 index 2408052e..00000000 Binary files a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegment__inherit__graph.png and /dev/null differ diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__Aligneds-members.html b/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__Aligneds-members.html deleted file mode 100644 index d8cea67b..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__Aligneds-members.html +++ /dev/null @@ -1,76 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - - -
    -
    -
    AutoSegments_Aligneds Member List
    -
    -
    - -

    This is the complete list of members for AutoSegments_Aligneds, including all inherited members.

    - - - - - - - - - - - -
    AutoSegments_Aligneds(AutoSegment *, unsigned int flags=KbNoFlags)AutoSegments_Alignedsinline
    AutoSegments_Aligneds(const AutoSegments_Aligneds &)AutoSegments_Alignedsinline
    getClone() constAutoSegments_Alignedsvirtual
    getFirst() constCollection< Type >
    getLocator() constAutoSegments_Alignedsvirtual
    getSize() constCollection< Type >virtual
    getSubSet(const Filter< Type > &filter) constCollection< Type >
    getSubSet() constCollection< Type >
    getSubSet(const Filter< SubType > &filter) constCollection< Type >
    ~Collection()Collection< Type >virtual
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__Aligneds.html b/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__Aligneds.html deleted file mode 100644 index 2c235de8..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__Aligneds.html +++ /dev/null @@ -1,219 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - - -
    - -
    -
    AutoSegments_Aligneds Class Reference
    -
    -
    - -

    All aligned AutoSegment of a set. - More...

    -
    -Inheritance diagram for AutoSegments_Aligneds:
    -
    -
    Inheritance graph
    - - - -
    [legend]
    - - - - - - - - - - -

    -Public Member Functions

     AutoSegments_Aligneds (AutoSegment *, unsigned int flags=KbNoFlags)
     
     AutoSegments_Aligneds (const AutoSegments_Aligneds &)
     
    virtual AutoSegmentHCgetClone () const
     
    virtual AutoSegmentHLgetLocator () const
     
    -

    Detailed Description

    -

    All aligned AutoSegment of a set.

    -

    A Collection to iterate over all the AutoSegment aligned with master. The master itself will not be included in the walkthrough. If the Katabatic::KbWithPerpands flag is passed as argument, the collection will also includes the AutoSegments directly perpandicular to the aligned set.

    -
    Remark: AutoSegments are forced to be aligneds only when connected through
    AutoContactHTee or AutoContactVTee.
    -

    Constructor & Destructor Documentation

    - -

    ◆ AutoSegments_Aligneds() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    AutoSegments_Aligneds (AutoSegmentmaster,
    unsigned int flags = KbNoFlags 
    )
    -
    -inline
    -
    -

    Create a collection of all the AutoSegment aligned on master (master itself is excluded from the Collection). If the flag Katabatic::KbWithPerpands is given the directly perpandicular AutoSegment will also be includeds.

    - -
    -
    - -

    ◆ AutoSegments_Aligneds() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - -
    AutoSegments_Aligneds (const AutoSegments_Alignedsautosegments)
    -
    -inline
    -
    -

    Copy constructor.

    - -
    -
    -

    Member Function Documentation

    - -

    ◆ getClone()

    - -
    -
    - - - - - -
    - - - - - - - -
    AutoSegmentHC * getClone () const
    -
    -virtual
    -
    -

    Returns: A deep copy of the Collection.

    - -

    Implements Collection< Type >.

    - -
    -
    - -

    ◆ getLocator()

    - -
    -
    - - - - - -
    - - - - - - - -
    AutoSegmentHC * getLocator () const
    -
    -virtual
    -
    -

    Returns: A deep copy of the Collection Locator.

    - -

    Implements Collection< Type >.

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__Aligneds.js b/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__Aligneds.js deleted file mode 100644 index 8857f69a..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__Aligneds.js +++ /dev/null @@ -1,7 +0,0 @@ -var classKatabatic_1_1AutoSegments__Aligneds = -[ - [ "AutoSegments_Aligneds", "classKatabatic_1_1AutoSegments__Aligneds.html#a97d48d49a2372cf289d321e6abf81c2d", null ], - [ "AutoSegments_Aligneds", "classKatabatic_1_1AutoSegments__Aligneds.html#aade683d2c99dc069e2cd5c8b942f8912", null ], - [ "getClone", "classKatabatic_1_1AutoSegments__Aligneds.html#a75133d1052f09538e168f7f4f717c740", null ], - [ "getLocator", "classKatabatic_1_1AutoSegments__Aligneds.html#aa0952035e19936102da08deed796eed9", null ] -]; \ No newline at end of file diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__Aligneds__inherit__graph.map b/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__Aligneds__inherit__graph.map deleted file mode 100644 index edb1811a..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__Aligneds__inherit__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__Aligneds__inherit__graph.md5 b/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__Aligneds__inherit__graph.md5 deleted file mode 100644 index e3a5b62a..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__Aligneds__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -9a004e6b7d75518a94b0b6b613103c70 \ No newline at end of file diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__Aligneds__inherit__graph.png b/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__Aligneds__inherit__graph.png deleted file mode 100644 index 367b437d..00000000 Binary files a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__Aligneds__inherit__graph.png and /dev/null differ diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__AnchorOnGCell-members.html b/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__AnchorOnGCell-members.html deleted file mode 100644 index d91cdd55..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__AnchorOnGCell-members.html +++ /dev/null @@ -1,76 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - - -
    -
    -
    AutoSegments_AnchorOnGCell Member List
    -
    -
    - -

    This is the complete list of members for AutoSegments_AnchorOnGCell, including all inherited members.

    - - - - - - - - - - - -
    AutoSegments_AnchorOnGCell(GCell *fcell, unsigned int flags)AutoSegments_AnchorOnGCellinline
    AutoSegments_AnchorOnGCell(const AutoSegments_AnchorOnGCell &)AutoSegments_AnchorOnGCellinline
    getClone() constAutoSegments_AnchorOnGCellvirtual
    getFirst() constCollection< Type >
    getLocator() constAutoSegments_AnchorOnGCellvirtual
    getSize() constCollection< Type >virtual
    getSubSet(const Filter< Type > &filter) constCollection< Type >
    getSubSet() constCollection< Type >
    getSubSet(const Filter< SubType > &filter) constCollection< Type >
    ~Collection()Collection< Type >virtual
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__AnchorOnGCell.html b/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__AnchorOnGCell.html deleted file mode 100644 index c533403c..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__AnchorOnGCell.html +++ /dev/null @@ -1,223 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - - -
    - -
    -
    AutoSegments_AnchorOnGCell Class Reference
    -
    -
    - -

    All AutoSegment Beginning and/or Stopping in a GCell. - More...

    -
    -Inheritance diagram for AutoSegments_AnchorOnGCell:
    -
    -
    Inheritance graph
    - - - -
    [legend]
    - - - - - - - - - - -

    -Public Member Functions

     AutoSegments_AnchorOnGCell (GCell *fcell, unsigned int flags)
     
     AutoSegments_AnchorOnGCell (const AutoSegments_AnchorOnGCell &)
     
    virtual AutoSegmentHCgetClone () const
     
    virtual AutoSegmentHLgetLocator () const
     
    -

    Detailed Description

    -

    All AutoSegment Beginning and/or Stopping in a GCell.

    -

    A Collection to iterate over all the AutoSegment that begin from and/or end in a GCell.

    -

    Constructor & Destructor Documentation

    - -

    ◆ AutoSegments_AnchorOnGCell() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    AutoSegments_AnchorOnGCell (GCellfcell,
    unsigned int flags 
    )
    -
    -inline
    -
    -

    Create a collection of all the AutoSegment beginning from and/or ending in fcell. The set returned by the Collection is selected through flags :

    - -
    -
    - -

    ◆ AutoSegments_AnchorOnGCell() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - -
    AutoSegments_AnchorOnGCell (const AutoSegments_AnchorOnGCellautosegments)
    -
    -inline
    -
    -

    Copy constructor.

    - -
    -
    -

    Member Function Documentation

    - -

    ◆ getClone()

    - -
    -
    - - - - - -
    - - - - - - - -
    AutoSegmentHC * getClone () const
    -
    -virtual
    -
    -

    Returns: A deep copy of the Collection.

    - -

    Implements Collection< Type >.

    - -
    -
    - -

    ◆ getLocator()

    - -
    -
    - - - - - -
    - - - - - - - -
    AutoSegmentHC * getLocator () const
    -
    -virtual
    -
    -

    Returns: A deep copy of the Collection Locator.

    - -

    Implements Collection< Type >.

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__AnchorOnGCell.js b/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__AnchorOnGCell.js deleted file mode 100644 index 81b91901..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__AnchorOnGCell.js +++ /dev/null @@ -1,7 +0,0 @@ -var classKatabatic_1_1AutoSegments__AnchorOnGCell = -[ - [ "AutoSegments_AnchorOnGCell", "classKatabatic_1_1AutoSegments__AnchorOnGCell.html#a41a8dace22db3bdd8ecbf1850344f885", null ], - [ "AutoSegments_AnchorOnGCell", "classKatabatic_1_1AutoSegments__AnchorOnGCell.html#a4597cd793ef7f6a5be546b24863f99e8", null ], - [ "getClone", "classKatabatic_1_1AutoSegments__AnchorOnGCell.html#a75133d1052f09538e168f7f4f717c740", null ], - [ "getLocator", "classKatabatic_1_1AutoSegments__AnchorOnGCell.html#aa0952035e19936102da08deed796eed9", null ] -]; \ No newline at end of file diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__AnchorOnGCell__inherit__graph.map b/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__AnchorOnGCell__inherit__graph.map deleted file mode 100644 index 11e0e7ce..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__AnchorOnGCell__inherit__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__AnchorOnGCell__inherit__graph.md5 b/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__AnchorOnGCell__inherit__graph.md5 deleted file mode 100644 index 83e222de..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__AnchorOnGCell__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -52df7bcc580e93b49bf9f5d6a03185d2 \ No newline at end of file diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__AnchorOnGCell__inherit__graph.png b/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__AnchorOnGCell__inherit__graph.png deleted file mode 100644 index 7bebc83d..00000000 Binary files a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__AnchorOnGCell__inherit__graph.png and /dev/null differ diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__InDirection-members.html b/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__InDirection-members.html deleted file mode 100644 index 9e1f7e89..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__InDirection-members.html +++ /dev/null @@ -1,71 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - - -
    -
    -
    AutoSegments_InDirection Member List
    -
    -
    - -

    This is the complete list of members for AutoSegments_InDirection, including all inherited members.

    - - - - - - -
    accept(AutoSegment *segment) constAutoSegments_InDirectionvirtual
    Hurricane::Filter::accept(Type type) const=0Filter< Type >pure virtual
    AutoSegments_InDirection(unsigned int direction)AutoSegments_InDirectioninline
    getClone() constAutoSegments_InDirectionvirtual
    operator!() constFilter< Type >
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__InDirection.html b/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__InDirection.html deleted file mode 100644 index e2360c43..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__InDirection.html +++ /dev/null @@ -1,178 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - - -
    - -
    -
    AutoSegments_InDirection Class Reference
    -
    -
    - -

    Filter to select AutoSegment in a given direction. - More...

    -
    -Inheritance diagram for AutoSegments_InDirection:
    -
    -
    Inheritance graph
    - - - -
    [legend]
    - - - - - - - - -

    -Public Member Functions

     AutoSegments_InDirection (unsigned int direction)
     
    virtual AutoSegmentHFgetClone () const
     
    virtual bool accept (AutoSegment *segment) const
     
    -

    Detailed Description

    -

    Filter to select AutoSegment in a given direction.

    -

    A Filter to select AutoSegment in a specific direction.

    -

    Constructor & Destructor Documentation

    - -

    ◆ AutoSegments_InDirection()

    - -
    -
    - - - - - -
    - - - - - - - - -
    AutoSegments_InDirection (unsigned int direction)
    -
    -inline
    -
    -

    Create a filter for AutoSegment in direction (Katabatic::KbHorizontal or Katabatic::KbVertical).

    - -
    -
    -

    Member Function Documentation

    - -

    ◆ getClone()

    - -
    -
    - - - - - -
    - - - - - - - -
    AutoSegmentHF * getClone () const
    -
    -virtual
    -
    -

    Returns: A deep copy of the Collection.

    - -

    Implements Filter< Type >.

    - -
    -
    - -

    ◆ accept()

    - -
    -
    - - - - - -
    - - - - - - - - -
    bool accept (AutoSegmentsegment) const
    -
    -virtual
    -
    -

    Returns: true if the segment is in the correct direction.

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__InDirection.js b/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__InDirection.js deleted file mode 100644 index dfeb0511..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__InDirection.js +++ /dev/null @@ -1,6 +0,0 @@ -var classKatabatic_1_1AutoSegments__InDirection = -[ - [ "AutoSegments_InDirection", "classKatabatic_1_1AutoSegments__InDirection.html#ad51ecb756fa52e994c47dffcdb21c136", null ], - [ "getClone", "classKatabatic_1_1AutoSegments__InDirection.html#afcbca92b72aff15ded94fe7c815de1ff", null ], - [ "accept", "classKatabatic_1_1AutoSegments__InDirection.html#a9e516170369269efd0277930871bfa6b", null ] -]; \ No newline at end of file diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__InDirection__inherit__graph.map b/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__InDirection__inherit__graph.map deleted file mode 100644 index 65989e36..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__InDirection__inherit__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__InDirection__inherit__graph.md5 b/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__InDirection__inherit__graph.md5 deleted file mode 100644 index 9faa8560..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__InDirection__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -94e0d5a7ba50cd93f88591f15956ff0a \ No newline at end of file diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__InDirection__inherit__graph.png b/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__InDirection__inherit__graph.png deleted file mode 100644 index b59ebfaa..00000000 Binary files a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__InDirection__inherit__graph.png and /dev/null differ diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__IsAccountable-members.html b/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__IsAccountable-members.html deleted file mode 100644 index db722c84..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__IsAccountable-members.html +++ /dev/null @@ -1,70 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - - -
    -
    -
    AutoSegments_IsAccountable Member List
    -
    -
    - -

    This is the complete list of members for AutoSegments_IsAccountable, including all inherited members.

    - - - - - -
    accept(AutoSegment *) constAutoSegments_IsAccountablevirtual
    Hurricane::Filter::accept(Type type) const=0Filter< Type >pure virtual
    getClone() constAutoSegments_IsAccountablevirtual
    operator!() constFilter< Type >
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__IsAccountable.html b/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__IsAccountable.html deleted file mode 100644 index b2ed597f..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__IsAccountable.html +++ /dev/null @@ -1,148 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - - -
    - -
    -
    AutoSegments_IsAccountable Class Reference
    -
    -
    - -

    Filter to select accoutable AutoSegment. - More...

    -
    -Inheritance diagram for AutoSegments_IsAccountable:
    -
    -
    Inheritance graph
    - - - -
    [legend]
    - - - - - - -

    -Public Member Functions

    virtual AutoSegmentHFgetClone () const
     
    virtual bool accept (AutoSegment *) const
     
    -

    Detailed Description

    -

    Filter to select accoutable AutoSegment.

    -

    A Filter to select accoutable AutoSegment. An AutoSegment is said to be accountable if it is canonical (in the sense of an aligned set).

    -

    Member Function Documentation

    - -

    ◆ getClone()

    - -
    -
    - - - - - -
    - - - - - - - -
    AutoSegmentHF * getClone () const
    -
    -virtual
    -
    -

    Returns: A deep copy of the Collection.

    - -

    Implements Filter< Type >.

    - -
    -
    - -

    ◆ accept()

    - -
    -
    - - - - - -
    - - - - - - - - -
    bool accept (AutoSegmentsegment) const
    -
    -virtual
    -
    -

    Returns: true if the segment is accountable (i.e. canonical).

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__IsAccountable.js b/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__IsAccountable.js deleted file mode 100644 index a8f2e601..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__IsAccountable.js +++ /dev/null @@ -1,5 +0,0 @@ -var classKatabatic_1_1AutoSegments__IsAccountable = -[ - [ "getClone", "classKatabatic_1_1AutoSegments__IsAccountable.html#afcbca92b72aff15ded94fe7c815de1ff", null ], - [ "accept", "classKatabatic_1_1AutoSegments__IsAccountable.html#ae826b0a72ecbf23d8c50409892d26759", null ] -]; \ No newline at end of file diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__IsAccountable__inherit__graph.map b/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__IsAccountable__inherit__graph.map deleted file mode 100644 index c53df29a..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__IsAccountable__inherit__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__IsAccountable__inherit__graph.md5 b/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__IsAccountable__inherit__graph.md5 deleted file mode 100644 index 050814a4..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__IsAccountable__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -93667ddb04fac27f0914a118d203a873 \ No newline at end of file diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__IsAccountable__inherit__graph.png b/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__IsAccountable__inherit__graph.png deleted file mode 100644 index b7202cf8..00000000 Binary files a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__IsAccountable__inherit__graph.png and /dev/null differ diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__OnContact-members.html b/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__OnContact-members.html deleted file mode 100644 index 6609b4d8..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__OnContact-members.html +++ /dev/null @@ -1,76 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - - -
    -
    -
    AutoSegments_OnContact Member List
    -
    -
    - -

    This is the complete list of members for AutoSegments_OnContact, including all inherited members.

    - - - - - - - - - - - -
    AutoSegments_OnContact(AutoSegment *master, Contact *contact)AutoSegments_OnContactinline
    AutoSegments_OnContact(const AutoSegments_OnContact &)AutoSegments_OnContactinline
    getClone() constAutoSegments_OnContactvirtual
    getFirst() constCollection< Type >
    getLocator() constAutoSegments_OnContactvirtual
    getSize() constCollection< Type >virtual
    getSubSet(const Filter< Type > &filter) constCollection< Type >
    getSubSet() constCollection< Type >
    getSubSet(const Filter< SubType > &filter) constCollection< Type >
    ~Collection()Collection< Type >virtual
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__OnContact.html b/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__OnContact.html deleted file mode 100644 index 4cc7a62e..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__OnContact.html +++ /dev/null @@ -1,229 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - - -
    - -
    -
    AutoSegments_OnContact Class Reference
    -
    -
    - -

    All AutoSegment anchored on a Contact. - More...

    -
    -Inheritance diagram for AutoSegments_OnContact:
    -
    -
    Inheritance graph
    - - - -
    [legend]
    - - - - - - - - - - -

    -Public Member Functions

     AutoSegments_OnContact (AutoSegment *master, Contact *contact)
     
     AutoSegments_OnContact (const AutoSegments_OnContact &)
     
    virtual AutoSegmentHCgetClone () const
     
    virtual AutoSegmentHLgetLocator () const
     
    -

    Detailed Description

    -

    All AutoSegment anchored on a Contact.

    -

    All AutoSegment Beginning from an AutoContact.

    -

    A Collection to iterate over all the AutoSegment anchored on contact. If supplied, the AutoSegment master will be excluded from the list.

    -
    Remark: If a Hurricane::Segment is anchored on the contact, but is not
    associated to an AutoSegment, it will be silently skipped.
    -

    A Collection to iterate over all the AutoSegment that begin from AutoContact. As AutoSegments are kept orienteds (source anchor must be lower than target), selecting source anchored AutoSegments implies that they are starting from this AutoContact.

    -

    Constructor & Destructor Documentation

    - -

    ◆ AutoSegments_OnContact() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    AutoSegments_OnContact (AutoSegmentmaster,
    Contactcontact 
    )
    -
    -inline
    -
    -
    Parameters
    - - - -
    masterExclude this AutoSegment from the Collection.
    contactThe Hurricane Contact over which to iterate.
    -
    -
    -

    Construct a Collection of all the AutoSegment anchored on contact.

    -

    Create the collection of all AutoSegments direcly anchored on contact, with exclusion of master.

    - -
    -
    - -

    ◆ AutoSegments_OnContact() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - -
    AutoSegments_OnContact (const AutoSegments_OnContactsegments)
    -
    -inline
    -
    -

    Copy constructor.

    - -
    -
    -

    Member Function Documentation

    - -

    ◆ getClone()

    - -
    -
    - - - - - -
    - - - - - - - -
    AutoSegmentHC * getClone () const
    -
    -virtual
    -
    -

    Returns: A deep copy of the Collection.

    - -

    Implements Collection< Type >.

    - -
    -
    - -

    ◆ getLocator()

    - -
    -
    - - - - - -
    - - - - - - - -
    AutoSegmentHC * getLocator () const
    -
    -virtual
    -
    -

    Returns: A deep copy of the Collection Locator.

    - -

    Implements Collection< Type >.

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__OnContact.js b/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__OnContact.js deleted file mode 100644 index df9694dc..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__OnContact.js +++ /dev/null @@ -1,7 +0,0 @@ -var classKatabatic_1_1AutoSegments__OnContact = -[ - [ "AutoSegments_OnContact", "classKatabatic_1_1AutoSegments__OnContact.html#af3f727d0c0fe394da508f52a6c9e4b90", null ], - [ "AutoSegments_OnContact", "classKatabatic_1_1AutoSegments__OnContact.html#ab6ff1773c5335fe496f61f2703a5ac99", null ], - [ "getClone", "classKatabatic_1_1AutoSegments__OnContact.html#a75133d1052f09538e168f7f4f717c740", null ], - [ "getLocator", "classKatabatic_1_1AutoSegments__OnContact.html#aa0952035e19936102da08deed796eed9", null ] -]; \ No newline at end of file diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__OnContact__inherit__graph.map b/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__OnContact__inherit__graph.map deleted file mode 100644 index 159d6af0..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__OnContact__inherit__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__OnContact__inherit__graph.md5 b/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__OnContact__inherit__graph.md5 deleted file mode 100644 index a2209357..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__OnContact__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -cea833d0d288285ebba9bfc5e98bbce1 \ No newline at end of file diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__OnContact__inherit__graph.png b/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__OnContact__inherit__graph.png deleted file mode 100644 index fcab6570..00000000 Binary files a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__OnContact__inherit__graph.png and /dev/null differ diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__Perpandiculars-members.html b/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__Perpandiculars-members.html deleted file mode 100644 index 04f7487d..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__Perpandiculars-members.html +++ /dev/null @@ -1,76 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - - -
    -
    -
    AutoSegments_Perpandiculars Member List
    -
    -
    - -

    This is the complete list of members for AutoSegments_Perpandiculars, including all inherited members.

    - - - - - - - - - - - -
    AutoSegments_Perpandiculars(AutoSegment *master)AutoSegments_Perpandicularsinline
    AutoSegments_Perpandiculars(const AutoSegments_Perpandiculars &)AutoSegments_Perpandicularsinline
    getClone() constAutoSegments_Perpandicularsvirtual
    getFirst() constCollection< Type >
    getLocator() constAutoSegments_Perpandicularsvirtual
    getSize() constCollection< Type >virtual
    getSubSet(const Filter< Type > &filter) constCollection< Type >
    getSubSet() constCollection< Type >
    getSubSet(const Filter< SubType > &filter) constCollection< Type >
    ~Collection()Collection< Type >virtual
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__Perpandiculars.html b/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__Perpandiculars.html deleted file mode 100644 index 6b485508..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__Perpandiculars.html +++ /dev/null @@ -1,209 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - - -
    - -
    -
    AutoSegments_Perpandiculars Class Reference
    -
    -
    - -

    All perpandicular AutoSegment to a set of aligneds. - More...

    -
    -Inheritance diagram for AutoSegments_Perpandiculars:
    -
    -
    Inheritance graph
    - - - -
    [legend]
    - - - - - - - - - - -

    -Public Member Functions

     AutoSegments_Perpandiculars (AutoSegment *master)
     
     AutoSegments_Perpandiculars (const AutoSegments_Perpandiculars &)
     
    virtual AutoSegmentHCgetClone () const
     
    virtual AutoSegmentHLgetLocator () const
     
    -

    Detailed Description

    -

    All perpandicular AutoSegment to a set of aligneds.

    -

    A Collection to iterate over all the AutoSegment perpandicular to the set of aligned AutoSegment of master.

    -
    Remark: This Collection is canonical aware (work on the aligned set).
    -

    Constructor & Destructor Documentation

    - -

    ◆ AutoSegments_Perpandiculars() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - -
    AutoSegments_Perpandiculars (AutoSegmentmaster)
    -
    -inline
    -
    -

    Create a collection of all the AutoSegment perpandicular to the aligned set of master.

    - -
    -
    - -

    ◆ AutoSegments_Perpandiculars() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - -
    AutoSegments_Perpandiculars (const AutoSegments_Perpandicularsautosegments)
    -
    -inline
    -
    -

    Copy constructor.

    - -
    -
    -

    Member Function Documentation

    - -

    ◆ getClone()

    - -
    -
    - - - - - -
    - - - - - - - -
    AutoSegmentHC * getClone () const
    -
    -virtual
    -
    -

    Returns: A deep copy of the Collection.

    - -

    Implements Collection< Type >.

    - -
    -
    - -

    ◆ getLocator()

    - -
    -
    - - - - - -
    - - - - - - - -
    AutoSegmentHC * getLocator () const
    -
    -virtual
    -
    -

    Returns: A deep copy of the Collection Locator.

    - -

    Implements Collection< Type >.

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__Perpandiculars.js b/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__Perpandiculars.js deleted file mode 100644 index a0e0429e..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__Perpandiculars.js +++ /dev/null @@ -1,7 +0,0 @@ -var classKatabatic_1_1AutoSegments__Perpandiculars = -[ - [ "AutoSegments_Perpandiculars", "classKatabatic_1_1AutoSegments__Perpandiculars.html#ab5cb1a0042b95cb6bd56997cdfbf0e6f", null ], - [ "AutoSegments_Perpandiculars", "classKatabatic_1_1AutoSegments__Perpandiculars.html#ac2d21dfaa510352fb5c1bd9aa9bd6f94", null ], - [ "getClone", "classKatabatic_1_1AutoSegments__Perpandiculars.html#a75133d1052f09538e168f7f4f717c740", null ], - [ "getLocator", "classKatabatic_1_1AutoSegments__Perpandiculars.html#aa0952035e19936102da08deed796eed9", null ] -]; \ No newline at end of file diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__Perpandiculars__inherit__graph.map b/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__Perpandiculars__inherit__graph.map deleted file mode 100644 index b8070d82..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__Perpandiculars__inherit__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__Perpandiculars__inherit__graph.md5 b/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__Perpandiculars__inherit__graph.md5 deleted file mode 100644 index 23955153..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__Perpandiculars__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -c1637568321176ceaaff3c1c82c79d3e \ No newline at end of file diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__Perpandiculars__inherit__graph.png b/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__Perpandiculars__inherit__graph.png deleted file mode 100644 index 47d09591..00000000 Binary files a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoSegments__Perpandiculars__inherit__graph.png and /dev/null differ diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoVertical-members.html b/deprecated/katabatic/doc/html/classKatabatic_1_1AutoVertical-members.html deleted file mode 100644 index ef77c774..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoVertical-members.html +++ /dev/null @@ -1,196 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - - -
    -
    -
    AutoVertical Member List
    -
    -
    - -

    This is the complete list of members for AutoVertical, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    _canSlacken() constAutoVerticalvirtual
    _getFlags() constAutoSegmentinlineprotected
    _invalidate()AutoSegmentprotected
    _makeDogleg(GCell *, unsigned int flags)AutoVerticalvirtual
    _postCreate()AutoVerticalprotectedvirtual
    _preCreate(AutoContact *source, AutoContact *target)AutoSegmentprotectedstatic
    _preDestroy()AutoVerticalprotectedvirtual
    Katabatic::AutoSegment::AutoSegment(Segment *segment)AutoSegmentprotected
    base()AutoVerticalvirtual
    base() constAutoVerticalvirtual
    canDogleg(Interval)AutoSegment
    canMoveULeft(float reserve=0.0) constAutoVerticalvirtual
    canMoveUp(float reserve=0.0, unsigned int flags=0) constAutoSegment
    canMoveURight(float reserve=0.0) constAutoVerticalvirtual
    canonize(unsigned int flags=KbNoFlags)AutoSegment
    canPivotDown(float reserve=0.0, unsigned int flags=0) constAutoSegment
    canPivotUp(float reserve=0.0, unsigned int flags=0) constAutoSegment
    canReduce() constAutoSegment
    canSlacken(unsigned int flags=0) constAutoSegment
    checkConstraints() constAutoVerticalvirtual
    checkPositions() constAutoVerticalvirtual
    computeOptimal(set< AutoSegment *> &processeds)AutoSegment
    computeTerminal()AutoSegment
    create(AutoContact *source, AutoContact *target, Segment *hurricaneSegment)AutoSegmentstatic
    create(AutoContact *source, AutoContact *target, unsigned int dir, size_t depth=RoutingGauge::nlayerdepth)AutoSegmentstatic
    getAligneds(unsigned int flags=KbNoFlags)AutoSegment
    getAnchors() constAutoSegmentinline
    getAutoSource() constAutoSegmentinline
    getAutoTarget() constAutoSegmentinline
    getAxis() constAutoSegmentinline
    getBoundingBox() constAutoSegmentinline
    getCanonical(DbU::Unit &min, DbU::Unit &max)AutoSegmentvirtual
    getCanonical(Interval &i)AutoSegmentinline
    getCell() constAutoSegmentinline
    getConstraints(DbU::Unit &min, DbU::Unit &max) constAutoVerticalvirtual
    Katabatic::AutoSegment::getConstraints(Interval &i) constAutoSegmentinline
    getCost(DbU::Unit axis) constAutoSegmentvirtual
    getDirection() constAutoVerticalvirtual
    getDuSource() constAutoVerticalvirtual
    getDuTarget() constAutoVerticalvirtual
    getExtremity() constAutoSegmentinline
    getGCell() constAutoSegmentinline
    getGCells(vector< GCell *> &) constAutoVerticalvirtual
    getHorizontal()AutoSegmentinlinevirtual
    getId() constAutoSegmentinline
    getLayer() constAutoSegmentinline
    getLength() constAutoSegmentinline
    getMinSpanU() constAutoSegment
    getNet() constAutoSegmentinline
    getOnSourceContact(unsigned int direction)AutoSegment
    getOnTargetContact(unsigned int direction)AutoSegment
    getOppositeAnchor(Component *) constAutoSegmentinline
    getOppositeAnchor(AutoContact *) constAutoSegment
    getOptimal(Interval &i) constAutoSegment
    getOptimalMax() constAutoSegmentinline
    getOptimalMin() constAutoSegmentinline
    getOrigin() constAutoSegmentinline
    getParent() constAutoSegmentinline
    getPerpandiculars()AutoSegment
    getPerpandicularsBound(set< AutoSegment *> &)AutoSegment
    getSlack() constAutoSegmentvirtual
    getSource() constAutoSegmentinline
    getSourceConstraints(unsigned int flags=0) constAutoVerticalvirtual
    getSourceHook()AutoSegmentinline
    getSourcePosition() constAutoSegmentinline
    getSourceU() constAutoVerticalvirtual
    getSourceX() constAutoSegmentinline
    getSourceY() constAutoSegmentinline
    getSpanU() constAutoVerticalvirtual
    getTarget() constAutoSegmentinline
    getTargetConstraints(unsigned int flags=0) constAutoVerticalvirtual
    getTargetHook()AutoSegmentinline
    getTargetPosition() constAutoSegmentinline
    getTargetU() constAutoVerticalvirtual
    getTargetX() constAutoSegmentinline
    getTargetY() constAutoSegmentinline
    getUserConstraints() constAutoSegmentinline
    getVertical()AutoVerticalvirtual
    getWidth() constAutoSegmentinline
    getX() constAutoSegmentvirtual
    getY() constAutoSegmentvirtual
    invalidate(unsigned int flags=KbPropagate)AutoSegmentvirtual
    invert()AutoSegmentinline
    isBipoint() constAutoSegmentinline
    isCanonical() constAutoSegmentinline
    isCreated() constAutoSegmentinline
    isDogleg() constAutoSegmentinline
    isFixed() constAutoSegmentinline
    isGlobal() constAutoSegmentinline
    isHorizontal() constAutoSegmentinline
    isInvalidated() constAutoSegmentinline
    isInvalidatedLayer() constAutoSegmentinline
    isLayerChange() constAutoSegmentinline
    isLocal() constAutoSegmentinline
    isReduced() constAutoSegmentinline
    isSlackened() constAutoSegmentinline
    isSpinBottom() constAutoSegmentinline
    isSpinTop() constAutoSegmentinline
    isSpinTopOrBottom() constAutoSegmentinline
    isStrap() constAutoSegmentinline
    isStrongTerminal(unsigned int flags=0) constAutoSegment
    isUnsetAxis() constAutoSegmentinline
    isVertical() constAutoSegmentinline
    isWeakTerminal() constAutoSegmentinline
    makeDogleg(AutoContact *)AutoSegment
    makeDogleg(Interval, unsigned int flags=KbNoFlags)AutoSegment
    makeDogleg(GCell *, unsigned int flags=KbNoFlags)AutoSegment
    mergeUserConstraints(const Interval &)AutoSegment
    moveULeft()AutoVerticalvirtual
    moveURight()AutoVerticalvirtual
    mustRaise() constAutoSegment
    raise()AutoSegment
    reduce()AutoSegment
    reduceDoglegLayer()AutoSegment
    resetUserConstraints()AutoSegmentinline
    revalidate()AutoSegment
    setAxis(DbU::Unit, unsigned int flags=KbNoFlags)AutoSegment
    setDuSource(DbU::Unit)AutoVerticalvirtual
    setDuTarget(DbU::Unit)AutoVerticalvirtual
    setFlags(unsigned int)AutoSegmentinline
    setLayer(const Layer *)AutoSegmentinline
    setOptimalMax(DbU::Unit max)AutoSegmentinline
    setOptimalMin(DbU::Unit min)AutoSegmentinline
    slacken(unsigned int flags)AutoSegment
    toConstraintAxis(unsigned int flags=KbRealignate)AutoSegment
    toOptimalAxis(unsigned int flags=KbRealignate)AutoSegment
    unsetFlags(unsigned int)AutoSegmentinline
    updateOrient()AutoVerticalvirtual
    updatePositions()AutoVerticalvirtual
    ~AutoSegment()AutoSegmentprotectedvirtual
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoVertical.html b/deprecated/katabatic/doc/html/classKatabatic_1_1AutoVertical.html deleted file mode 100644 index 307efaf2..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoVertical.html +++ /dev/null @@ -1,1247 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - - -
    - -
    -
    AutoVertical Class Reference
    -
    -
    - -

    Concrete Vertical AutoSegment. - More...

    -
    -Inheritance diagram for AutoVertical:
    -
    -
    Inheritance graph
    - - - -
    [legend]
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    virtual bool _canSlacken () const
     
    virtual bool canMoveULeft (float reserve=0.0) const
     
    virtual bool canMoveURight (float reserve=0.0) const
     
    virtual Segmentbase ()
     
    virtual Segmentbase () const
     
    virtual VerticalgetVertical ()
     
    virtual DbU::Unit getSourceU () const
     
    virtual DbU::Unit getTargetU () const
     
    virtual DbU::Unit getDuSource () const
     
    virtual DbU::Unit getDuTarget () const
     
    virtual Interval getSpanU () const
     
    virtual bool getConstraints (DbU::Unit &min, DbU::Unit &max) const
     
    virtual Interval getSourceConstraints (unsigned int flags=0) const
     
    virtual Interval getTargetConstraints (unsigned int flags=0) const
     
    virtual unsigned int getDirection () const
     
    virtual size_t getGCells (vector< GCell *> &) const
     
    virtual void setDuSource (DbU::Unit)
     
    virtual void setDuTarget (DbU::Unit)
     
    virtual void updateOrient ()
     
    virtual void updatePositions ()
     
    virtual bool checkPositions () const
     
    virtual bool checkConstraints () const
     
    virtual unsigned int _makeDogleg (GCell *, unsigned int flags)
     
    virtual bool moveULeft ()
     
    virtual bool moveURight ()
     
    - Public Member Functions inherited from AutoSegment
    virtual HorizontalgetHorizontal ()
     
    CellgetCell () const
     
    NetgetNet () const
     
    const LayergetLayer () const
     
    Box getBoundingBox () const
     
    HookgetSourceHook ()
     
    HookgetTargetHook ()
     
    ContactgetSource () const
     
    ContactgetTarget () const
     
    ComponentgetOppositeAnchor (Component *) const
     
    Components getAnchors () const
     
    virtual DbU::Unit getX () const
     
    virtual DbU::Unit getY () const
     
    DbU::Unit getWidth () const
     
    DbU::Unit getLength () const
     
    DbU::Unit getSourcePosition () const
     
    DbU::Unit getTargetPosition () const
     
    DbU::Unit getSourceX () const
     
    DbU::Unit getSourceY () const
     
    DbU::Unit getTargetX () const
     
    DbU::Unit getTargetY () const
     
    void invert ()
     
    void setLayer (const Layer *)
     
    bool isHorizontal () const
     
    bool isVertical () const
     
    bool isGlobal () const
     
    bool isLocal () const
     
    bool isFixed () const
     
    bool isBipoint () const
     
    bool isWeakTerminal () const
     
    bool isStrongTerminal (unsigned int flags=0) const
     
    bool isLayerChange () const
     
    bool isSpinTop () const
     
    bool isSpinBottom () const
     
    bool isSpinTopOrBottom () const
     
    bool isReduced () const
     
    bool isStrap () const
     
    bool isDogleg () const
     
    bool isInvalidated () const
     
    bool isInvalidatedLayer () const
     
    bool isCreated () const
     
    bool isCanonical () const
     
    bool isUnsetAxis () const
     
    bool isSlackened () const
     
    bool canReduce () const
     
    bool mustRaise () const
     
    unsigned int canDogleg (Interval)
     
    bool canMoveUp (float reserve=0.0, unsigned int flags=0) const
     
    bool canPivotUp (float reserve=0.0, unsigned int flags=0) const
     
    bool canPivotDown (float reserve=0.0, unsigned int flags=0) const
     
    bool canSlacken (unsigned int flags=0) const
     
    unsigned long getId () const
     
    GCellgetGCell () const
     
    AutoContactgetAutoSource () const
     
    AutoContactgetAutoTarget () const
     
    AutoContactgetOppositeAnchor (AutoContact *) const
     
    size_t getPerpandicularsBound (set< AutoSegment *> &)
     
    AutoSegmentgetParent () const
     
    DbU::Unit getAxis () const
     
    DbU::Unit getOrigin () const
     
    DbU::Unit getExtremity () const
     
    Interval getMinSpanU () const
     
    bool getConstraints (Interval &i) const
     
    const IntervalgetUserConstraints () const
     
    virtual DbU::Unit getSlack () const
     
    DbU::Unit getOptimalMin () const
     
    DbU::Unit getOptimalMax () const
     
    IntervalgetOptimal (Interval &i) const
     
    virtual DbU::Unit getCost (DbU::Unit axis) const
     
    virtual AutoSegmentgetCanonical (DbU::Unit &min, DbU::Unit &max)
     
    AutoSegmentgetCanonical (Interval &i)
     
    void unsetFlags (unsigned int)
     
    void setFlags (unsigned int)
     
    void computeTerminal ()
     
    void mergeUserConstraints (const Interval &)
     
    void resetUserConstraints ()
     
    void setOptimalMin (DbU::Unit min)
     
    void setOptimalMax (DbU::Unit max)
     
    void revalidate ()
     
    AutoSegmentmakeDogleg (AutoContact *)
     
    unsigned int makeDogleg (Interval, unsigned int flags=KbNoFlags)
     
    unsigned int makeDogleg (GCell *, unsigned int flags=KbNoFlags)
     
    bool slacken (unsigned int flags)
     
    bool reduceDoglegLayer ()
     
    bool reduce ()
     
    bool raise ()
     
    AutoSegmentcanonize (unsigned int flags=KbNoFlags)
     
    virtual void invalidate (unsigned int flags=KbPropagate)
     
    void computeOptimal (set< AutoSegment *> &processeds)
     
    void setAxis (DbU::Unit, unsigned int flags=KbNoFlags)
     
    bool toConstraintAxis (unsigned int flags=KbRealignate)
     
    bool toOptimalAxis (unsigned int flags=KbRealignate)
     
    AutoSegments getOnSourceContact (unsigned int direction)
     
    AutoSegments getOnTargetContact (unsigned int direction)
     
    AutoSegments getAligneds (unsigned int flags=KbNoFlags)
     
    AutoSegments getPerpandiculars ()
     
    - - - - - - - - - - - - - - -

    -Protected Member Functions

    virtual void _postCreate ()
     
    virtual void _preDestroy ()
     
    - Protected Member Functions inherited from AutoSegment
     AutoSegment (Segment *segment)
     
    virtual ~AutoSegment ()
     
    void _invalidate ()
     
    unsigned int _getFlags () const
     
    - - - - - - - - - -

    -Additional Inherited Members

    - Static Public Member Functions inherited from AutoSegment
    static AutoSegmentcreate (AutoContact *source, AutoContact *target, Segment *hurricaneSegment)
     
    static AutoSegmentcreate (AutoContact *source, AutoContact *target, unsigned int dir, size_t depth=RoutingGauge::nlayerdepth)
     
    - Static Protected Member Functions inherited from AutoSegment
    static void _preCreate (AutoContact *source, AutoContact *target)
     
    -

    Detailed Description

    -

    Concrete Vertical AutoSegment.

    -

    Member Function Documentation

    - -

    ◆ _canSlacken()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool _canSlacken () const
    -
    -virtual
    -
    -

    Returns: true if the segment can be slackened. That is, source or target constraints are less than three pitches.

    - -

    Implements AutoSegment.

    - -

    References Interval::contains(), AutoSegment::getAutoSource(), AutoSegment::getAutoTarget(), AutoContact::getGCell(), GCell::getSide(), Interval::inflate(), and Katabatic::KbHorizontal.

    - -
    -
    - -

    ◆ canMoveULeft()

    - -
    -
    - - - - - -
    - - - - - - - - -
    bool canMoveULeft (float reserve = 0.0) const
    -
    -virtual
    -
    -
    Returns
    true if the global segment can be moved on the left GCell (for a vertical) or down (for an horizontal). The move is accepted only if it do not change the amount of global wiring. Thus the following conditions:
      -
    • The segment mustn't be on the leftmost GCell (obvious...).
    • -
    • The segment must be global.
    • -
    • The source and target contacts must be AutoContactTurn(s).
    • -
    • At least one of the perpandicular must be global and connected through the target. That is, it's a global which extends toward left.
    • -
    • The GCell of maximum density on the left must remains below the current GCell of maximum density, with a margin of reserve (expressed in total saturation percentage).
    • -
    -
    - -

    Implements AutoSegment.

    - -

    References AutoSegment::getAutoSource(), AutoSegment::getAutoTarget(), AutoContact::getGCell(), AutoSegment::getGCell(), AutoSegment::getLayer(), RoutingGauge::getLayerDepth(), GCell::getLeft(), Session::getRoutingGauge(), AutoContact::getSegment(), GCell::getUp(), GCell::getWDensity(), and AutoSegment::isGlobal().

    - -
    -
    - -

    ◆ canMoveURight()

    - -
    -
    - - - - - -
    - - - - - - - - -
    bool canMoveURight (float reserve = 0.0) const
    -
    -virtual
    -
    -
    Returns
    true if the global segment can be moved on the right GCell (for a vertical) or up (for an horizontal). The move is accepted only if it do not change the amount of global wiring. Thus the following conditions:
      -
    • The segment mustn't be on the leftmost GCell (obvious...).
    • -
    • The segment must be global.
    • -
    • The source and target contacts must be AutoContactTurn(s).
    • -
    • At least one of the perpandicular must be global and connected through the source. That is, it's a global which extends toward right.
    • -
    • The GCell of maximum density on the left must remains below the current GCell of maximum density, with a margin of reserve (expressed in total saturation percentage).
    • -
    -
    - -

    Implements AutoSegment.

    - -

    References AutoSegment::getAutoSource(), AutoSegment::getAutoTarget(), AutoContact::getGCell(), AutoSegment::getGCell(), AutoSegment::getLayer(), RoutingGauge::getLayerDepth(), GCell::getRight(), Session::getRoutingGauge(), AutoContact::getSegment(), GCell::getUp(), GCell::getWDensity(), and AutoSegment::isGlobal().

    - -
    -
    - -

    ◆ base() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - -
    Segment * base ()
    -
    -virtual
    -
    -

    Returns: the decorated Hurricane::Segment.

    - -

    Implements AutoSegment.

    - -
    -
    - -

    ◆ base() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - -
    Segment * base () const
    -
    -virtual
    -
    -

    Returns: the decorated Hurricane::Segment (const flavor).

    - -

    Implements AutoSegment.

    - -
    -
    - -

    ◆ getVertical()

    - -
    -
    - - - - - -
    - - - - - - - -
    Vertical * getVertical ()
    -
    -virtual
    -
    -

    Returns: If the decorated segment is a Hurricane::Vertical, return it. NULL otherwise.

    - -

    Reimplemented from AutoSegment.

    - -
    -
    - -

    ◆ getSourceU()

    - -
    -
    - - - - - -
    - - - - - - - -
    DbU::Unit getSourceU () const
    -
    -virtual
    -
    -

    Returns: The AutoSegment uniform source position. (X for an horizontal and Y for a Vertical).

    - -

    Implements AutoSegment.

    - -

    References Segment::getSourceY().

    - -
    -
    - -

    ◆ getTargetU()

    - -
    -
    - - - - - -
    - - - - - - - -
    DbU::Unit getTargetU () const
    -
    -virtual
    -
    -

    Returns: The AutoSegment uniform target position. (X for an horizontal and Y for a Vertical).

    - -

    Implements AutoSegment.

    - -

    References Segment::getTargetY().

    - -
    -
    - -

    ◆ getDuSource()

    - -
    -
    - - - - - -
    - - - - - - - -
    DbU::Unit getDuSource () const
    -
    -virtual
    -
    -

    Returns: The AutoSegment uniform delta from source. (dX for an horizontal and dY for a Vertical).

    - -

    Implements AutoSegment.

    - -

    References Vertical::getDySource().

    - -
    -
    - -

    ◆ getDuTarget()

    - -
    -
    - - - - - -
    - - - - - - - -
    DbU::Unit getDuTarget () const
    -
    -virtual
    -
    -

    Returns: The AutoSegment uniform delta from source. (dX for an horizontal and dY for a Vertical).

    - -

    Implements AutoSegment.

    - -

    References Vertical::getDyTarget().

    - -
    -
    - -

    ◆ getSpanU()

    - -
    -
    - - - - - -
    - - - - - - - -
    Interval getSpanU () const
    -
    -virtual
    -
    -

    Returns: The AutoSegment uniform occupying interval (on X for horizontal and on Y for vertical).

    - -

    Implements AutoSegment.

    - -

    References Segment::getSourceY(), and Segment::getTargetY().

    - -
    -
    - -

    ◆ getConstraints()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    bool getConstraints (DbU::Unitmin,
    DbU::Unitmax 
    ) const
    -
    -virtual
    -
    -

    Returns: in min & max the allowed range for the segment axis.

    - -

    Implements AutoSegment.

    - -

    References AutoSegment::getAutoSource(), AutoSegment::getAutoTarget(), AutoContact::getCBXMax(), AutoContact::getCBXMin(), AutoSegment::getUserConstraints(), and DbU::getValueString().

    - -
    -
    - -

    ◆ getSourceConstraints()

    - -
    -
    - - - - - -
    - - - - - - - - -
    Interval getSourceConstraints (unsigned int flags = 0) const
    -
    -virtual
    -
    -
    Returns
    The Interval into witch the source AutoContact can vary. By default all deduced constraints and user constraints are took into account. If flags contains KbNativeConstraints the constraint returned is only the enclosing GCell.
    - -

    Implements AutoSegment.

    - -

    References AutoSegment::getAutoSource(), Box::getXMax(), Box::getXMin(), and Katabatic::KbNativeConstraints.

    - -
    -
    - -

    ◆ getTargetConstraints()

    - -
    -
    - - - - - -
    - - - - - - - - -
    Interval getTargetConstraints (unsigned int flags = 0) const
    -
    -virtual
    -
    -
    Returns
    The Interval into witch the target AutoContact can vary. By default all deduced constraints and user constraints are took into account. If flags contains KbNativeConstraints the constraint returned is only the enclosing GCell.
    - -

    Implements AutoSegment.

    - -

    References AutoSegment::getAutoTarget(), Box::getXMax(), Box::getXMin(), and Katabatic::KbNativeConstraints.

    - -
    -
    - -

    ◆ getDirection()

    - -
    -
    - - - - - -
    - - - - - - - -
    unsigned int getDirection () const
    -
    -virtual
    -
    -

    Returns: Katabatic::KbHorizontal or Katabatic::KbVertical according to the decorated segment.

    - -

    Implements AutoSegment.

    - -

    References Katabatic::KbVertical.

    - -
    -
    - -

    ◆ getGCells()

    - -
    -
    - - - - - -
    - - - - - - - - -
    size_t getGCells (vector< GCell *> & gcells) const
    -
    -virtual
    -
    -
    Parameters
    - - -
    gcellsA vector that will be filled by all the GCells that the segment overlap. In increasing order, from source to target.
    -
    -
    -
    Returns
    The vector's size.
    - -

    Implements AutoSegment.

    - -

    References AutoSegment::getAutoSource(), AutoSegment::getAutoTarget(), AutoContact::getGCell(), AutoSegment::getGCell(), and GCell::getUp().

    - -
    -
    - -

    ◆ setDuSource()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void setDuSource (DbU::Unit du)
    -
    -virtual
    -
    -

    Set the uniform dU from source anchor (dX for Horizontal, dY for Vertical).

    - -

    Implements AutoSegment.

    - -
    -
    - -

    ◆ setDuTarget()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void setDuTarget (DbU::Unit du)
    -
    -virtual
    -
    -

    Set the uniform dU from target anchor (dX for Horizontal, dY for Vertical).

    - -

    Implements AutoSegment.

    - -
    -
    - -

    ◆ updateOrient()

    - -
    -
    - - - - - -
    - - - - - - - -
    void updateOrient ()
    -
    -virtual
    -
    -

    Ensure that source is lower than target. Swap them if needed. Swap never occurs on global segment because their source and target anchors are from different GCell, which are already ordered.

    - -

    Implements AutoSegment.

    - -

    References Segment::getSourceY(), Segment::getTargetY(), Segment::invert(), Katabatic::SegSourceBottom, Katabatic::SegSourceTop, Katabatic::SegTargetBottom, Katabatic::SegTargetTop, AutoSegment::setFlags(), and AutoSegment::unsetFlags().

    - -
    -
    - -

    ◆ updatePositions()

    - -
    -
    - - - - - -
    - - - - - - - -
    void updatePositions ()
    -
    -virtual
    -
    -

    Update the segment begenning and ending positions. The positions takes into account the extension caps and reflect the real space used by the segment under it's long axis.

    - -

    Implements AutoSegment.

    - -

    References Session::getExtensionCap(), AutoSegment::getLayer(), Segment::getSourceY(), and Segment::getTargetY().

    - -
    -
    - -

    ◆ checkPositions()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool checkPositions () const
    -
    -virtual
    -
    -

    Returns: true if the relative positions of source & target are coherent. (source <= target).

    - -

    Implements AutoSegment.

    - -

    References Session::getExtensionCap(), AutoSegment::getLayer(), Segment::getSourceY(), Segment::getTargetY(), and DbU::getValueString().

    - -
    -
    - -

    ◆ checkConstraints()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool checkConstraints () const
    -
    -virtual
    -
    -

    Returns: true if the constraint intervel is coherent (non-empty or punctual in the worst case).

    - -

    Implements AutoSegment.

    - -

    References AutoSegment::getAutoSource(), AutoSegment::getAutoTarget(), and Interval::intersect().

    - -
    -
    - -

    ◆ _makeDogleg()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    unsigned int _makeDogleg (GCelldoglegGCell,
    unsigned int flags 
    )
    -
    -virtual
    -
    -

    This method is the workhorse for the various dogleg and topology restauration methods. It is the atomic method that actually make the dogleg on this segment.

    -

    Returns: Katabatic::KbUseAboveLayer if the dogleg is using the above layer (Katabatic::KbUseBelowLayer for the below layer).

    -

    Break the current segment in two (a.k.a. making a dogleg).

      -
    • The segment is broken inside doglegGCell.
    • -
    • Two new segments are createds, one perpandicular and one parallel.
    • -
    • The original segment is always kept attached to the source. (the new parallel fragment is attached to the target).
    • -
    • The perpandicular segment is in the layer above by default. If we are already on the topmost routing layer, the below layer is used.
    • -
    • If the segment pass through the breaking GCell, it's axis is set into the center. If the segment is local, the axis is the middle of the segment.
    • -
    • The Local/Global kind of the original segment is updated. The local/global status is computed by the constructor of the AutoSegment for the perpandicular and the new parallel.
    • -
    • The terminal state is updated. If the segment is a strong terminal the part that is no longer directly connected to the terminal is demoted to Katabatic::SegWeakTerminal1.
    • -
    • The perpandicular is obviously a canonical. If the broken segment is canonical, the original is left canonical and only the new parallel is re-canonized. Otherwise, we re-canonise both sets of aligned segments (the one on the source and the one on the target).
    • -
    • The three segments are added to the session dogleg stack.
    • -
    -

    After this method call the net topology is guarantee to be valid.

    -
    -_makeDogleg-1.png -
    -Example Case 1
    -
    -_makeDogleg-2.png -
    -Example Case 2
    - -

    Implements AutoSegment.

    - -

    References AutoContact::base(), AutoSegment::canonize(), AutoContactTurn::create(), AutoSegment::create(), Session::dogleg(), AutoSegment::getAutoSource(), AutoSegment::getAutoTarget(), Session::getConfiguration(), RoutingGauge::getContactLayer(), AutoContact::getGCell(), Component::getLayer(), AutoSegment::getLayer(), RoutingGauge::getLayerDepth(), Component::getNet(), Session::getRoutingGauge(), RoutingGauge::getRoutingLayer(), AutoSegment::getSourceY(), AutoSegment::getTargetY(), GCell::getUp(), AutoSegment::getX(), GCell::getY(), GCell::getYMax(), AutoContact::invalidate(), AutoSegment::invalidate(), AutoSegment::isCanonical(), AutoSegment::isLocal(), AutoSegment::isSlackened(), AutoSegment::isWeakTerminal(), Katabatic::KbHorizontal, Katabatic::KbUseAboveLayer, Katabatic::KbUseBelowLayer, Katabatic::KbVertical, AutoContact::migrateConstraintBox(), GCell::removeVSegment(), Katabatic::SegCanonical, Katabatic::SegDogleg, Katabatic::SegGlobal, Katabatic::SegNotAligned, Katabatic::SegSlackened, Katabatic::SegWeakTerminal1, AutoSegment::setFlags(), AutoSegment::setLayer(), and AutoSegment::unsetFlags().

    - -
    -
    - -

    ◆ moveULeft()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool moveULeft ()
    -
    -virtual
    -
    -

    This function do not manage an aligned set. It applies on this segment only.

    -

    Displace an Horizontal or Vertical segment to the GCell below (a.k.a. lower or inferior). Rules for displacement:

      -
    • The segment must be connected at both end to a turn contact (we do not want to manage more complex cases for the time beeing).
    • -
    • And, of course, the segment must not already by on the bottomost GCell...
    • -
    -

    The displacement take care of:

      -
    • Managing the status of the various perpandiculars. The stretched one are made global if needed. The shrinked one made local, if needed.
    • -
    • The supporting AutoContact (source & target) are changed of GCell.
    • -
    • If the segment is global, the go-through GCells are updateds.
    • -
    -

    Returns: true if the move has succeeded.

    -
    -moveULeft-1.png -
    -moveULeft() for an Horizontal
    - -

    Implements AutoSegment.

    - -

    References GCell::addHSegment(), AutoSegment::getAutoSource(), AutoSegment::getAutoTarget(), AutoContact::getGCell(), AutoSegment::getGCell(), GCell::getLeft(), AutoContact::getSegment(), GCell::getSide(), GCell::getUp(), Interval::getVMax(), AutoSegment::isLocal(), Katabatic::KbHorizontal, GCell::removeHSegment(), Katabatic::SegGlobal, AutoSegment::setAxis(), AutoSegment::setFlags(), AutoContact::setGCell(), and AutoSegment::unsetFlags().

    - -
    -
    - -

    ◆ moveURight()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool moveURight ()
    -
    -virtual
    -
    -
    - -

    ◆ _postCreate()

    - -
    -
    - - - - - -
    - - - - - - - -
    void _postCreate ()
    -
    -protectedvirtual
    -
    -

    In addition to AutoSegment::_postCreate(), detect whether the segment is global or local and register it in the relevant GCells (if needed).

    -

    If the segment is anchored directly on a terminal, adjust the axis so it's connected.

    - -

    Reimplemented from AutoSegment.

    - -

    References AutoSegment::_postCreate(), GCell::addVSegment(), AutoSegment::getAutoSource(), AutoSegment::getAutoTarget(), AutoContact::getGCell(), GCell::getUp(), Component::getX(), GCell::getY(), Katabatic::SegGlobal, AutoSegment::setFlags(), and AutoContact::setX().

    - -
    -
    - -

    ◆ _preDestroy()

    - -
    -
    - - - - - -
    - - - - - - - -
    void _preDestroy ()
    -
    -protectedvirtual
    -
    -

    Perform operations that must be done before the actual destructor is called. Merely whidrawn the AutoSegment from the lookup/Session mechanism.

    - -

    Reimplemented from AutoSegment.

    - -

    References AutoSegment::_preDestroy(), AutoSegment::getAutoSource(), AutoSegment::getAutoTarget(), AutoContact::getGCell(), AutoSegment::getId(), GCell::getUp(), GCell::getY(), and GCell::removeVSegment().

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoVertical.js b/deprecated/katabatic/doc/html/classKatabatic_1_1AutoVertical.js deleted file mode 100644 index e2856ee0..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoVertical.js +++ /dev/null @@ -1,30 +0,0 @@ -var classKatabatic_1_1AutoVertical = -[ - [ "_canSlacken", "classKatabatic_1_1AutoVertical.html#ab0c6fe24404afe19268a7b796fa74bec", null ], - [ "canMoveULeft", "classKatabatic_1_1AutoVertical.html#aa9e85f38a842d1966eb72afccb446676", null ], - [ "canMoveURight", "classKatabatic_1_1AutoVertical.html#a7559a856712400a9325665842e0bcd64", null ], - [ "base", "classKatabatic_1_1AutoVertical.html#a9e651c17b47f82166a02865c9296a2df", null ], - [ "base", "classKatabatic_1_1AutoVertical.html#adcd751c3ec393fabdef5ede0ffff6f2d", null ], - [ "getVertical", "classKatabatic_1_1AutoVertical.html#ab6a809b6f3ef3cf5385fa35580e31e7a", null ], - [ "getSourceU", "classKatabatic_1_1AutoVertical.html#a3932d5ce9094ead510e4e33bd4e78e1a", null ], - [ "getTargetU", "classKatabatic_1_1AutoVertical.html#a8e5f2a51f56c6bdb74024ac77c08a22a", null ], - [ "getDuSource", "classKatabatic_1_1AutoVertical.html#a44998a5f0d71597006fe4f3ffed8e3d1", null ], - [ "getDuTarget", "classKatabatic_1_1AutoVertical.html#a4f505a59109fc6087696f483ccc7f9dc", null ], - [ "getSpanU", "classKatabatic_1_1AutoVertical.html#a9409a4b64c21fa8b1517149728f0a4c1", null ], - [ "getConstraints", "classKatabatic_1_1AutoVertical.html#aff207f4cc3c3682ed57369fdfe157d2d", null ], - [ "getSourceConstraints", "classKatabatic_1_1AutoVertical.html#a3c24695921b612a57c5ac60ff0aa3878", null ], - [ "getTargetConstraints", "classKatabatic_1_1AutoVertical.html#aaa70ba865e312fb30f81fa7f973a0376", null ], - [ "getDirection", "classKatabatic_1_1AutoVertical.html#a09d03fbca9ab891c2f25bdae7f89a899", null ], - [ "getGCells", "classKatabatic_1_1AutoVertical.html#ab681dca7dc930e06cacc2de85bf99166", null ], - [ "setDuSource", "classKatabatic_1_1AutoVertical.html#a756616a1967c5ad8efd08be96d18f25d", null ], - [ "setDuTarget", "classKatabatic_1_1AutoVertical.html#a9df2ef68c1fbf4159cc837be5c699b53", null ], - [ "updateOrient", "classKatabatic_1_1AutoVertical.html#a59058f4593049c583c5b3698ff81b299", null ], - [ "updatePositions", "classKatabatic_1_1AutoVertical.html#a9662a77c2ed8553d6a0312c5292060ad", null ], - [ "checkPositions", "classKatabatic_1_1AutoVertical.html#acfbdc94b1e84bd192087df53ead1f06f", null ], - [ "checkConstraints", "classKatabatic_1_1AutoVertical.html#a46576c7c5c5146f8fa53a821b0766994", null ], - [ "_makeDogleg", "classKatabatic_1_1AutoVertical.html#a36c0eecad40d3559b5378caefec6a7e0", null ], - [ "moveULeft", "classKatabatic_1_1AutoVertical.html#a1fa2421b74bf0eb934b7002fd3da2321", null ], - [ "moveURight", "classKatabatic_1_1AutoVertical.html#aa469e37853e31f8b1bc817518c896d62", null ], - [ "_postCreate", "classKatabatic_1_1AutoVertical.html#a3715b38135ca24745f610bebd3407c10", null ], - [ "_preDestroy", "classKatabatic_1_1AutoVertical.html#a7c13d9795eafd477994961f8a0d962d0", null ] -]; \ No newline at end of file diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoVertical__inherit__graph.map b/deprecated/katabatic/doc/html/classKatabatic_1_1AutoVertical__inherit__graph.map deleted file mode 100644 index 14816b8a..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoVertical__inherit__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoVertical__inherit__graph.md5 b/deprecated/katabatic/doc/html/classKatabatic_1_1AutoVertical__inherit__graph.md5 deleted file mode 100644 index f408f4e8..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoVertical__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -012575e4743edf312d79b170d7fbba05 \ No newline at end of file diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoVertical__inherit__graph.png b/deprecated/katabatic/doc/html/classKatabatic_1_1AutoVertical__inherit__graph.png deleted file mode 100644 index 3007a311..00000000 Binary files a/deprecated/katabatic/doc/html/classKatabatic_1_1AutoVertical__inherit__graph.png and /dev/null differ diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1BaseGrid-members.html b/deprecated/katabatic/doc/html/classKatabatic_1_1BaseGrid-members.html deleted file mode 100644 index 9122e631..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1BaseGrid-members.html +++ /dev/null @@ -1,77 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - - -
    -
    -
    BaseGrid Member List
    -
    -
    - -

    This is the complete list of members for BaseGrid, including all inherited members.

    - - - - - - - - - - - - -
    BaseGrid(const Box &)BaseGridprotected
    destroy()BaseGridinline
    getBoundingBox() constBaseGridinline
    getColumn(unsigned int) constBaseGridinline
    getColumns() constBaseGridinline
    getIndex(unsigned int c, unsigned int r) constBaseGridinline
    getRawSize() constBaseGridinline
    getRow(unsigned int) constBaseGridinline
    getRows() constBaseGridinline
    getXGrads() constBaseGridinline
    getYGrads() constBaseGridinline
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1BaseGrid.html b/deprecated/katabatic/doc/html/classKatabatic_1_1BaseGrid.html deleted file mode 100644 index 48c4f7f7..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1BaseGrid.html +++ /dev/null @@ -1,453 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - - -
    - -
    -
    BaseGrid Class Referenceabstract
    -
    -
    - -

    Abstract Base Class for Irregular Grid. - More...

    -
    -Inheritance diagram for BaseGrid:
    -
    -
    Inheritance graph
    - - - - - -
    [legend]
    - - - - - -

    -Classes

    class  Axis
     Graduations on a BaseGrid Axis (H or V). More...
     
    - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    void destroy ()
     
    const BoxgetBoundingBox () const
     
    unsigned int getColumns () const
     
    unsigned int getRows () const
     
    unsigned int getRawSize () const
     
    unsigned int getIndex (unsigned int c, unsigned int r) const
     
    unsigned int getRow (unsigned int) const
     
    unsigned int getColumn (unsigned int) const
     
    const AxisgetXGrads () const
     
    const AxisgetYGrads () const
     
    - - - -

    -Protected Member Functions

     BaseGrid (const Box &)
     
    -

    Detailed Description

    -

    Abstract Base Class for Irregular Grid.

    -

    An abstract class for a 2-D matrix of objects. The grid is irregular in the sense that the horizontal and vertical cut lines may not be evenly spaced.

    -

    The coordinates of cut lines in horizontal and vertical direction are stored BaseGrid::Axis structure.

    -

    The BaseGrid contains all the non-template methods of the Grid, that is that do not depend of the matrix element type.

    -

    The internal storage implemented in derived classes is expected to store "row by row" (rows are put one after another in the vector).

    -

    Constructor & Destructor Documentation

    - -

    ◆ BaseGrid()

    - -
    -
    - - - - - -
    - - - - - - - - -
    BaseGrid (const Boxbb)
    -
    -protected
    -
    -

    Construct a new BaseGrid on area bb. Graduations, rows & columns are sets to zero.

    - -
    -
    -

    Member Function Documentation

    - -

    ◆ destroy()

    - -
    -
    - - - - - -
    - - - - - - - -
    void destroy ()
    -
    -inline
    -
    -

    The user-level destructor.

    - -
    -
    - -

    ◆ getBoundingBox()

    - -
    -
    - - - - - -
    - - - - - - - -
    const Box & getBoundingBox () const
    -
    -inline
    -
    -

    Returns: The grid bounding box.

    - -
    -
    - -

    ◆ getColumns()

    - -
    -
    - - - - - -
    - - - - - - - -
    unsigned int getColumns () const
    -
    -inline
    -
    -
    - -

    ◆ getRows()

    - -
    -
    - - - - - -
    - - - - - - - -
    unsigned int getRows () const
    -
    -inline
    -
    -

    Returns: The numbers of rows in the grid.

    - -

    Referenced by GCellGrid::_postCreate(), KatabaticEngine::createDetailedGrid(), and BaseGrid::getRawSize().

    - -
    -
    - -

    ◆ getRawSize()

    - -
    -
    - - - - - -
    - - - - - - - -
    unsigned int getRawSize () const
    -
    -inline
    -
    -

    Returns: The total number of elements in the grid (i.e. $ rows \times columns $)

    - -

    References BaseGrid::getColumns(), and BaseGrid::getRows().

    - -
    -
    - -

    ◆ getIndex()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    unsigned int getIndex (unsigned int c,
    unsigned int r 
    ) const
    -
    -inline
    -
    -

    An helper function that compute the linear index in the element vector from a (c,r) coordinate pair:

    -\[ index = c + r \times columns \] -

    - -

    References BaseGrid::getColumns().

    - -

    Referenced by Grid< GCell >::getGCellDown(), Grid< GCell >::getGCellLeft(), Grid< GCell >::getGCellRight(), and Grid< GCell >::getGCellUp().

    - -
    -
    - -

    ◆ getRow()

    - -
    -
    - - - - - -
    - - - - - - - - -
    unsigned int getRow (unsigned int i) const
    -
    -inline
    -
    -

    An helper function that compute the row number from the linear index in the vector:

    -\[ row = index / columns \] -

    - -

    References BaseGrid::getColumns().

    - -

    Referenced by GCell::getRow().

    - -
    -
    - -

    ◆ getColumn()

    - -
    -
    - - - - - -
    - - - - - - - - -
    unsigned int getColumn (unsigned int i) const
    -
    -inline
    -
    -

    An helper function that compute the column number from the linear index in the vector:

    -\[ column = index \div columns \] -

    - -

    References BaseGrid::getColumns().

    - -

    Referenced by GCell::getColumn().

    - -
    -
    - -

    ◆ getXGrads()

    - -
    -
    - - - - - -
    - - - - - - - -
    const Axis & getXGrads () const
    -
    -inline
    -
    -

    Returns: The graduations on the X axis.

    - -
    -
    - -

    ◆ getYGrads()

    - -
    -
    - - - - - -
    - - - - - - - -
    const Axis & getYGrads () const
    -
    -inline
    -
    -

    Returns: The graduations on the Y axis.

    - -
    -
    -
    The documentation for this class was generated from the following files:
      -
    • Grid.h
    • -
    • Grid.cpp
    • -
    • Grid.dox
    • -
    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1BaseGrid.js b/deprecated/katabatic/doc/html/classKatabatic_1_1BaseGrid.js deleted file mode 100644 index 48eba19b..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1BaseGrid.js +++ /dev/null @@ -1,15 +0,0 @@ -var classKatabatic_1_1BaseGrid = -[ - [ "Axis", "classKatabatic_1_1BaseGrid_1_1Axis.html", "classKatabatic_1_1BaseGrid_1_1Axis" ], - [ "BaseGrid", "classKatabatic_1_1BaseGrid.html#ac479157e8ac115074615167e8a4a2789", null ], - [ "destroy", "classKatabatic_1_1BaseGrid.html#a3a80b6032f86a56bec74609034b3246f", null ], - [ "getBoundingBox", "classKatabatic_1_1BaseGrid.html#a895132a706d822c43d6ec747c3266f74", null ], - [ "getColumns", "classKatabatic_1_1BaseGrid.html#ae2bf24a99431664bb5897b122bb15b43", null ], - [ "getRows", "classKatabatic_1_1BaseGrid.html#ab7e3c454272e9a8f2c803e24454d7303", null ], - [ "getRawSize", "classKatabatic_1_1BaseGrid.html#ac25c519161036ae2d004fcc78abf7856", null ], - [ "getIndex", "classKatabatic_1_1BaseGrid.html#a5ffadea177995aedb4152f58b9dd391d", null ], - [ "getRow", "classKatabatic_1_1BaseGrid.html#a3a813e40c392fb62c5b1b86d11f1dcb4", null ], - [ "getColumn", "classKatabatic_1_1BaseGrid.html#a3ae31ad99809b916f386fe9bde67c6f2", null ], - [ "getXGrads", "classKatabatic_1_1BaseGrid.html#a5731a526d261c2fa798a2c836cfeb9d1", null ], - [ "getYGrads", "classKatabatic_1_1BaseGrid.html#a40fe4841176c132346564b3d4c942668", null ] -]; \ No newline at end of file diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1BaseGrid_1_1Axis-members.html b/deprecated/katabatic/doc/html/classKatabatic_1_1BaseGrid_1_1Axis-members.html deleted file mode 100644 index 7d13218f..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1BaseGrid_1_1Axis-members.html +++ /dev/null @@ -1,71 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - - -
    -
    -
    BaseGrid::Axis Member List
    -
    -
    - -

    This is the complete list of members for BaseGrid::Axis, including all inherited members.

    - - - - - - -
    addGraduation(DbU::Unit)BaseGrid::Axisinline
    getGraduationNumber(DbU::Unit pos, bool &onGraduation) constBaseGrid::Axis
    getSize() constBaseGrid::Axisinline
    operator[](unsigned int i) constBaseGrid::Axisinline
    sort()BaseGrid::Axis
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1BaseGrid_1_1Axis.html b/deprecated/katabatic/doc/html/classKatabatic_1_1BaseGrid_1_1Axis.html deleted file mode 100644 index cc206aa8..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1BaseGrid_1_1Axis.html +++ /dev/null @@ -1,226 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - - -
    - -
    -
    BaseGrid::Axis Class Reference
    -
    -
    - -

    Graduations on a BaseGrid Axis (H or V). - More...

    - - - - - - - - - - - - -

    -Public Member Functions

    void addGraduation (DbU::Unit)
     
    void sort ()
     
    unsigned int getSize () const
     
    unsigned int getGraduationNumber (DbU::Unit pos, bool &onGraduation) const
     
    const DbU::Unitoperator[] (unsigned int i) const
     
    -

    Detailed Description

    -

    Graduations on a BaseGrid Axis (H or V).

    -

    Describe the list of graduations on either X or Y axis of a BaseGrid. Graduations correspond to cut lines and may not be evenly spaced.

    -

    Graduations are internally stored into a vector that needs to be sorted whenever new graduations are added (BaseGrid::Axis::sort()).

    -

    Member Function Documentation

    - -

    ◆ addGraduation()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void addGraduation (DbU::Unit pos)
    -
    -inline
    -
    -

    Adds a new graduation. After adding new graduations, do not forget to perform a sort.

    - -

    Referenced by GCellGrid::_postCreate().

    - -
    -
    - -

    ◆ sort()

    - -
    -
    - - - - - - - -
    void sort ()
    -
    -

    Re-order the graduations after an addition.

    - -

    Referenced by GCellGrid::_postCreate().

    - -
    -
    - -

    ◆ getSize()

    - -
    -
    - - - - - -
    - - - - - - - -
    size_t getSize () const
    -
    -inline
    -
    -

    Returns: The number of graduations on the axis.

    - -

    Referenced by GCellGrid::_postCreate().

    - -
    -
    - -

    ◆ getGraduationNumber()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    DbU::Unit getGraduationNumber (DbU::Unit pos,
    bool & onGraduation 
    ) const
    -
    -

    Returns: The index of the graduation which is immediatly inferior or equal to pos. In case of strict equality, onGraduation is set to true.

    - -
    -
    - -

    ◆ operator[]()

    - -
    -
    - - - - - -
    - - - - - - - - -
    DbU::Unit operator[] (unsigned int index) const
    -
    -inline
    -
    -

    Returns: The graduation at index.

    - -
    -
    -
    The documentation for this class was generated from the following files:
      -
    • Grid.h
    • -
    • Grid.cpp
    • -
    • Grid.dox
    • -
    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1BaseGrid_1_1Axis.js b/deprecated/katabatic/doc/html/classKatabatic_1_1BaseGrid_1_1Axis.js deleted file mode 100644 index 0f0a0950..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1BaseGrid_1_1Axis.js +++ /dev/null @@ -1,8 +0,0 @@ -var classKatabatic_1_1BaseGrid_1_1Axis = -[ - [ "addGraduation", "classKatabatic_1_1BaseGrid_1_1Axis.html#ada526136545060f41e8b9228ce1c5895", null ], - [ "sort", "classKatabatic_1_1BaseGrid_1_1Axis.html#a47fdc9eea42b6975cdc835bb2e08810e", null ], - [ "getSize", "classKatabatic_1_1BaseGrid_1_1Axis.html#af55b3790622878d65ed5ff2bb2b3fcc4", null ], - [ "getGraduationNumber", "classKatabatic_1_1BaseGrid_1_1Axis.html#a5c8a687396db80839515c1f04c205f9e", null ], - [ "operator[]", "classKatabatic_1_1BaseGrid_1_1Axis.html#a15b53d212638c335c75fe7fd0390716c", null ] -]; \ No newline at end of file diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1BaseGrid__inherit__graph.map b/deprecated/katabatic/doc/html/classKatabatic_1_1BaseGrid__inherit__graph.map deleted file mode 100644 index 6e1b041f..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1BaseGrid__inherit__graph.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1BaseGrid__inherit__graph.md5 b/deprecated/katabatic/doc/html/classKatabatic_1_1BaseGrid__inherit__graph.md5 deleted file mode 100644 index 532ebe08..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1BaseGrid__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -7b9dcff47eeb07e10d1ac3fb145681cd \ No newline at end of file diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1BaseGrid__inherit__graph.png b/deprecated/katabatic/doc/html/classKatabatic_1_1BaseGrid__inherit__graph.png deleted file mode 100644 index 051fc16c..00000000 Binary files a/deprecated/katabatic/doc/html/classKatabatic_1_1BaseGrid__inherit__graph.png and /dev/null differ diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1BaseObserver-members.html b/deprecated/katabatic/doc/html/classKatabatic_1_1BaseObserver-members.html deleted file mode 100644 index 08969bd3..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1BaseObserver-members.html +++ /dev/null @@ -1,67 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - - -
    -
    -
    BaseObserver Member List
    -
    -
    - -

    This is the complete list of members for BaseObserver, including all inherited members.

    - - -
    notify(unsigned int flags)BaseObservervirtual
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1BaseObserver.html b/deprecated/katabatic/doc/html/classKatabatic_1_1BaseObserver.html deleted file mode 100644 index c9256dbb..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1BaseObserver.html +++ /dev/null @@ -1,121 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - - -
    - -
    -
    BaseObserver Class Reference
    -
    -
    - -

    Observer Design Pattern, Observer part. - More...

    -
    -Inheritance diagram for BaseObserver:
    -
    -
    Inheritance graph
    - - - -
    [legend]
    - - - - -

    -Public Member Functions

    virtual void notify (unsigned int flags)
     
    -

    Detailed Description

    -

    Observer Design Pattern, Observer part.

    -

    This class is used as a non-template base class for the templatized Observer one. It is used to avoid propagating template to the whole Observable class. It only contains the Observer::notify() virtual method.

    -

    Member Function Documentation

    - -

    ◆ notify()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void notify (unsigned int flags)
    -
    -virtual
    -
    -

    The method which will be called whenever a change occurs on the Observable.

    - -

    Referenced by Observable::notify().

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1BaseObserver.js b/deprecated/katabatic/doc/html/classKatabatic_1_1BaseObserver.js deleted file mode 100644 index 6be60547..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1BaseObserver.js +++ /dev/null @@ -1,4 +0,0 @@ -var classKatabatic_1_1BaseObserver = -[ - [ "notify", "classKatabatic_1_1BaseObserver.html#a52e577fb0c4f2e3650928334fb621c2f", null ] -]; \ No newline at end of file diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1BaseObserver__inherit__graph.map b/deprecated/katabatic/doc/html/classKatabatic_1_1BaseObserver__inherit__graph.map deleted file mode 100644 index a173fdc8..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1BaseObserver__inherit__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1BaseObserver__inherit__graph.md5 b/deprecated/katabatic/doc/html/classKatabatic_1_1BaseObserver__inherit__graph.md5 deleted file mode 100644 index 0e61e25a..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1BaseObserver__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -6c9e7d585294074bcdfc9608f50ba3fa \ No newline at end of file diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1BaseObserver__inherit__graph.png b/deprecated/katabatic/doc/html/classKatabatic_1_1BaseObserver__inherit__graph.png deleted file mode 100644 index 73229de1..00000000 Binary files a/deprecated/katabatic/doc/html/classKatabatic_1_1BaseObserver__inherit__graph.png and /dev/null differ diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1ChipTools-members.html b/deprecated/katabatic/doc/html/classKatabatic_1_1ChipTools-members.html deleted file mode 100644 index f2372b0e..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1ChipTools-members.html +++ /dev/null @@ -1,78 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - - -
    -
    -
    ChipTools Member List
    -
    -
    - -

    This is the complete list of members for ChipTools, including all inherited members.

    - - - - - - - - - - - - - -
    ChipTools(Cell *)ChipTools
    getBottomPadsBb() constChipToolsinline
    getCell() constChipToolsinline
    getChipBb() constChipToolsinline
    getCore() constChipToolsinline
    getCorona() constChipToolsinline
    getLeftPadsBb() constChipToolsinline
    getRightPadsBb() constChipToolsinline
    getTopPadsBb() constChipToolsinline
    intersectHPads(const Box &) constChipToolsinline
    intersectVPads(const Box &) constChipToolsinline
    isChip() constChipToolsinline
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1ChipTools.html b/deprecated/katabatic/doc/html/classKatabatic_1_1ChipTools.html deleted file mode 100644 index 9653ff57..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1ChipTools.html +++ /dev/null @@ -1,426 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - - -
    - -
    -
    ChipTools Class Reference
    -
    -
    - -

    Utilities for Chip Level Design. - More...

    - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

     ChipTools (Cell *)
     
    bool isChip () const
     
    CellgetCell () const
     
    InstancegetCore () const
     
    const BoxgetChipBb () const
     
    const BoxgetLeftPadsBb () const
     
    const BoxgetRightPadsBb () const
     
    const BoxgetTopPadsBb () const
     
    const BoxgetBottomPadsBb () const
     
    const Torus & getCorona () const
     
    bool intersectVPads (const Box &) const
     
    bool intersectHPads (const Box &) const
     
    -

    Detailed Description

    -

    Utilities for Chip Level Design.

    -

    The ChipTools class provides a small set of utilities to ease the managment of a complete chip following the Alliance top hierarchical structure.

    -

    Constructor & Destructor Documentation

    - -

    ◆ ChipTools()

    - - -

    Member Function Documentation

    - -

    ◆ isChip()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool isChip () const
    -
    -inline
    -
    -

    Returns: true if the Cell is truly a top level design. If not, this object is useless and does nothing.

    - -

    Referenced by ChipTools::ChipTools(), KatabaticEngine::createDetailedGrid(), and KatabaticEngine::isChip().

    - -
    -
    - -

    ◆ getCell()

    - -
    -
    - - - - - -
    - - - - - - - -
    Cell * getCell () const
    -
    -inline
    -
    -

    Returns: The top-level design.

    - -
    -
    - -

    ◆ getCore()

    - -
    -
    - - - - - -
    - - - - - - - -
    Instance * getCore () const
    -
    -inline
    -
    -

    Returns: The instance of the core, that is, the only instance that is not a pad...

    - -
    -
    - -

    ◆ getChipBb()

    - -
    -
    - - - - - -
    - - - - - - - -
    const Box & getChipBb () const
    -
    -inline
    -
    -

    Returns: The chip complete bounding box, this *is* simply the Cell bounding box.

    - -
    -
    - -

    ◆ getLeftPadsBb()

    - -
    -
    - - - - - -
    - - - - - - - -
    const Box & getLeftPadsBb () const
    -
    -inline
    -
    -

    Returns: The bounding box enclosing all the pads on the left side of the chip.

    -
    Remark: This box is computed from the chip bounding box and the pad height.
    - -
    -
    - -

    ◆ getRightPadsBb()

    - -
    -
    - - - - - -
    - - - - - - - -
    const Box & getRightPadsBb () const
    -
    -inline
    -
    -

    Returns: The bounding box enclosing all the pads on the right side of the chip.

    -
    Remark: This box is computed from the chip bounding box and the pad height.
    - -
    -
    - -

    ◆ getTopPadsBb()

    - -
    -
    - - - - - -
    - - - - - - - -
    const Box & getTopPadsBb () const
    -
    -inline
    -
    -

    Returns: The bounding box enclosing all the pads on the top side of the chip.

    -
    Remark: This box is computed from the chip bounding box and the pad height.
    - -
    -
    - -

    ◆ getBottomPadsBb()

    - -
    -
    - - - - - -
    - - - - - - - -
    const Box & getBottomPadsBb () const
    -
    -inline
    -
    -

    Returns: The bounding box enclosing all the pads on the bottom side of the chip.

    -
    Remark: This box is computed from the chip bounding box and the pad height.
    - -
    -
    - -

    ◆ getCorona()

    - -
    -
    - - - - - -
    - - - - - - - -
    const Torus & getCorona () const
    -
    -inline
    -
    -

    Returns: The torus (in term of manhanttan distance) enclosed between the pad area and the core area.

    - -
    -
    - -

    ◆ intersectVPads()

    - -
    -
    - - - - - -
    - - - - - - - - -
    bool intersectVPads (const Boxbox) const
    -
    -inline
    -
    -

    Returns: true if box intersect either the left or right pad box.

    - -

    References Box::intersect().

    - -
    -
    - -

    ◆ intersectHPads()

    - -
    -
    - - - - - -
    - - - - - - - - -
    bool intersectHPads (const Boxbox) const
    -
    -inline
    -
    -

    Returns: true if box intersect either the top or bottom pad box.

    - -

    References Box::intersect().

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1ChipTools.js b/deprecated/katabatic/doc/html/classKatabatic_1_1ChipTools.js deleted file mode 100644 index 180cde36..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1ChipTools.js +++ /dev/null @@ -1,15 +0,0 @@ -var classKatabatic_1_1ChipTools = -[ - [ "ChipTools", "classKatabatic_1_1ChipTools.html#a5296f5ccb380869255d774b70e237686", null ], - [ "isChip", "classKatabatic_1_1ChipTools.html#a390b4da0f5d92dc7586dbb35fb33f105", null ], - [ "getCell", "classKatabatic_1_1ChipTools.html#a148fdf09f18e7adb39a73c747f165266", null ], - [ "getCore", "classKatabatic_1_1ChipTools.html#a9b0b85c44c108a2a17a01d86f17e1db9", null ], - [ "getChipBb", "classKatabatic_1_1ChipTools.html#a31b90ca92688051b3a99b1adc13fa311", null ], - [ "getLeftPadsBb", "classKatabatic_1_1ChipTools.html#ab211c70912b6a16c03ca1e2e06c90b0b", null ], - [ "getRightPadsBb", "classKatabatic_1_1ChipTools.html#ae6f1937b84779a9d96fc08f0d5752390", null ], - [ "getTopPadsBb", "classKatabatic_1_1ChipTools.html#aa21203c8ef37b4f3e4e82e6cc1ef8c64", null ], - [ "getBottomPadsBb", "classKatabatic_1_1ChipTools.html#aaff5b9fb64c2344b6ab0aaf5e5e36caf", null ], - [ "getCorona", "classKatabatic_1_1ChipTools.html#a3db402fb2e0839749fe524882d77eddd", null ], - [ "intersectVPads", "classKatabatic_1_1ChipTools.html#a2aea3372bc7e8ec1d0a70681544d8202", null ], - [ "intersectHPads", "classKatabatic_1_1ChipTools.html#a6af8e197289a2a6c5e3aab0a658c4969", null ] -]; \ No newline at end of file diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1GCell-members.html b/deprecated/katabatic/doc/html/classKatabatic_1_1GCell-members.html deleted file mode 100644 index c116a4f9..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1GCell-members.html +++ /dev/null @@ -1,127 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - - -
    -
    -
    GCell Member List
    -
    -
    - -

    This is the complete list of members for GCell, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    addBlockage(unsigned int depth, DbU::Unit)GCell
    addContact(AutoContact *)GCellinline
    addHSegment(AutoSegment *)GCellinline
    addVSegment(AutoSegment *)GCellinline
    checkDensity() constGCell
    checkEdgeSaturation(size_t hreserved, size_t vreserved) constGCell
    getAllocateds()GCellstatic
    getBlockage(unsigned int depth) constGCellinline
    getBoundingBox() constGCellvirtual
    getCDensity(unsigned int flags=0) constGCellinline
    getColumn() constGCell
    getContacts() constGCellinline
    getDensity(unsigned int flags=0) constGCell
    getDepth() constGCellinline
    getDown() constGCell
    getFeedthroughs(unsigned int depth) constGCellinline
    getFragmentation(unsigned int depth) constGCellinline
    getGCellGrid() constGCellinline
    getGlobalsCount(unsigned int depth) constGCellinline
    getHCapacity() constGCell
    getHSegments() constGCellinline
    getHStartSegments()GCell
    getHStopSegments()GCell
    getIndex() constGCellinline
    getKey() constGCellinline
    getLeft() constGCell
    getName() constGCellvirtual
    getRight() constGCell
    getRoutingPads(set< RoutingPad *> &)GCell
    getRow() constGCell
    getSide(unsigned int) constGCell
    getStartSegments(unsigned int direction)GCellinline
    getStaticName()GCellstatic
    getStopSegments(unsigned int direction)GCellinline
    getTopRightShrink()GCellstatic
    getUp() constGCell
    getVCapacity() constGCell
    getVSegments() constGCellinline
    getVStartSegments()GCell
    getVStopSegments()GCell
    getWDensity(unsigned int depth, unsigned int flags=0) constGCellinline
    getX() constGCellinline
    getXMax() constGCellinline
    getY() constGCellinline
    getYMax() constGCellinline
    hasFreeTrack(size_t depth, float reserve) constGCell
    isAboveDensity(float threshold) constGCell
    isSaturated() constGCellinline
    isSaturated(unsigned int depth) constGCell
    isValid() constGCellinline
    removeContact(AutoContact *)GCell
    removeHSegment(AutoSegment *)GCell
    removeVSegment(AutoSegment *)GCell
    rpDesaturate(set< Net *> &)GCell
    SetIndex typedefGCell
    stepDesaturate(unsigned int depth, set< Net *> &, AutoSegment *&moved, unsigned int flags=0)GCell
    stepNetDesaturate(unsigned int depth, set< Net *> &globalNets, SetIndex &invalidateds)GCell
    translate(const DbU::Unit &, const DbU::Unit &)GCellvirtual
    updateContacts()GCell
    updateDensity()GCell
    updateKey(unsigned int depth)GCellinline
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1GCell.html b/deprecated/katabatic/doc/html/classKatabatic_1_1GCell.html deleted file mode 100644 index 1406d16a..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1GCell.html +++ /dev/null @@ -1,1928 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - - - -
    - -

    Routing Global Cell. - More...

    - -

    Inherits ExtensionGo.

    - - - - - - - - - - - -

    -Classes

    class  CompareByDensity
     GCell Density Comparison Functor. More...
     
    class  CompareByIndex
     GCell Index Comparison Functor. More...
     
    class  Key
     GCell Key - Density Cache. More...
     
    - - - -

    -Public Types

    typedef set< GCell *, CompareByIndexSetIndex
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    virtual const NamegetName () const
     
    bool isSaturated () const
     
    bool isSaturated (unsigned int depth) const
     
    bool isValid () const
     
    bool isAboveDensity (float threshold) const
     
    bool hasFreeTrack (size_t depth, float reserve) const
     
    GCellGridgetGCellGrid () const
     
    unsigned int getDepth () const
     
    unsigned int getIndex () const
     
    unsigned int getRow () const
     
    unsigned int getColumn () const
     
    GCellgetLeft () const
     
    GCellgetRight () const
     
    GCellgetUp () const
     
    GCellgetDown () const
     
    virtual void translate (const DbU::Unit &, const DbU::Unit &)
     
    virtual Box getBoundingBox () const
     
    DbU::Unit getX () const
     
    DbU::Unit getY () const
     
    DbU::Unit getXMax () const
     
    DbU::Unit getYMax () const
     
    Interval getSide (unsigned int) const
     
    float getHCapacity () const
     
    float getVCapacity () const
     
    float getDensity (unsigned int flags=0) const
     
    float getCDensity (unsigned int flags=0) const
     
    float getWDensity (unsigned int depth, unsigned int flags=0) const
     
    DbU::Unit getBlockage (unsigned int depth) const
     
    float getFragmentation (unsigned int depth) const
     
    float getFeedthroughs (unsigned int depth) const
     
    float getGlobalsCount (unsigned int depth) const
     
    const vector< AutoSegment * > & getHSegments () const
     
    const vector< AutoSegment * > & getVSegments () const
     
    const vector< AutoContact * > & getContacts () const
     
    AutoSegments getHStartSegments ()
     
    AutoSegments getVStartSegments ()
     
    AutoSegments getHStopSegments ()
     
    AutoSegments getVStopSegments ()
     
    AutoSegments getStartSegments (unsigned int direction)
     
    AutoSegments getStopSegments (unsigned int direction)
     
    size_t getRoutingPads (set< RoutingPad *> &)
     
    const KeygetKey () const
     
    size_t checkDensity () const
     
    bool checkEdgeSaturation (size_t hreserved, size_t vreserved) const
     
    void addBlockage (unsigned int depth, DbU::Unit)
     
    void addHSegment (AutoSegment *)
     
    void addVSegment (AutoSegment *)
     
    void addContact (AutoContact *)
     
    void removeVSegment (AutoSegment *)
     
    void removeHSegment (AutoSegment *)
     
    void removeContact (AutoContact *)
     
    void updateContacts ()
     
    size_t updateDensity ()
     
    void updateKey (unsigned int depth)
     
    void rpDesaturate (set< Net *> &)
     
    bool stepDesaturate (unsigned int depth, set< Net *> &, AutoSegment *&moved, unsigned int flags=0)
     
    bool stepNetDesaturate (unsigned int depth, set< Net *> &globalNets, SetIndex &invalidateds)
     
    - - - - - - - -

    -Static Public Member Functions

    static size_t getAllocateds ()
     
    static DbU::Unit getTopRightShrink ()
     
    static const NamegetStaticName ()
     
    -

    Detailed Description

    -

    Routing Global Cell.

    -

    -GCell Description

    -

    Please note that there are two kind of Global Cells (or GCell for short):

      -
    • The GCell used by the global router Knik.
    • -
    • The GCell used by the detailed router (Katabatic & Kite). Although the information they hold is obviously related, they are two separate kind of objects.
    • -
    -

    The area of the design to be routed is divided in a regular grid of rectangular area, the GCellGrid. Each rectangular area is a GCell.

    -

    The GCell contains the following informations:

      -
    • The AutoSegments that begins or ends in it. The list of segments is not avalaible directly but through the AutoContacts that are owned by the GCell.
    • -
    • The AutoSegments that go straight through it (or over it). Horizontal & Vertical segments are stored in two separeted list. Those two lists are sorted by layer depth (the deepest layers first).
    • -
    • A lot of synthetic information about the density of tracks used in the GCell.
    • -
    -

    AutoContacts are affected to GCells, the area of the GCell is the one into which the AutoContact is allowed to be placed. It is this that way that the respect of the global routing choosen by Knik is enforced. See the AutoContact constraint box.

    -

    When tracks are aligned with the GCell boundaries they one exactly on the boundary can belong to the GCell on either side of the boundary. But we want a clear and mutually exclusive ownership of each GCell area. So, we choose that one GCell do not own the topmost and rightmost track. And to implement it, we shrink top and right coordinates by the amount of GCell::getTopRightShrink(), which must be less than the track spacing.

    -

    -Saturation & Density Computation

    -

    At any depth (i.e. layer), in the preferred routing direction, a GCell can pass a finite length of wire. For example on an horizontal preferred layer:

    -\[ WL_{max} = width(GCell) \times Htracks(GCell) \] -

    -

    Then the density, is the ratio between $WL_{max}$ and the actually used wirelength:

    -\[ Wdensity(depth) = \frac{WL_{used}(depth)}{WL_{max}(depth)} \] -

    -

    Normally, the ratio musn't exceed 1.0, but the occupied wire length computation, for now, doesn't merge overlapping wires belonging to the same net, so the ratio may be slightly inaccurate. Thus in some pathological cases may be greater than 1.0 whithout truly been overloaded.

    -

    A Cell is considered as saturated if the overall density is above the saturation ratio given by Session::getSaturateRatio().

    -

    Contact density is calculated as follow:

    -\[ Cont_{density} = \frac{|Contacts|}{Htracks \times Vtracks \times 4} \] -

    -

    It is a ratio over the number of actual contacts in the GCell and the maximal number. The maximal number being the product of the number of tracks in both direction and 4 stands for the hardwired number of layers (the depth).

    -

    Should not be hardwired... To be corrected in future versions.

    -

    -Feedthrough Computation

    -

    The feedtrough value is an estimate is of how many complete tracks have been used on a given layer of the GCell. It varies between zero and the number of track on the GCell (complete saturation). As an estimate, it doesn't tell you the actual number of free track, but how many you may expect assuming the routing is reasonably well done.

    -

    Computation is done as follow:

    - - - - - - - - - - -
    Wire typeEstimated Cost
    Straight wire (feedthrough) 1.0
    Beginning or ending global wire 0.5
    Local wire. 1/3
    Blockage wire The exact percentage of the track
    -

    -Track Computation

    -

    The number of track that can go through a GCell in the horizontal direction is computed as follow:

    -\[ Htracks = \frac{heigth(GCell)}{Vpitch} + 1 \] -

    -

    The pitch is assumed to be the same for every layer and is hardwired to 5.0 lambda.

    -

    This is a bad architectural choice. The informations pertaining to routing should be held at Kite level, not be hardwired and the pitch should be made variable with the layer... To be corrected in future versions.

    -

    -GCell Lazy Evaluation

    -

    To save processing time, the densities are not recomputed every time a segment is modified (added, removed or moved). Instead a lazy evaluation mechanism is used. Densities are recomputed each time a density is queried and the lazy evaluation not explicitly disabled (flag NoUpdate).

    -

    -GCell Sorting Key

    -

    In order to perform a lexicographical sort on the tuple $(density(depth),id)$ of a GCell, a specific slave object GCell::Key is introduced. It is the density on one specific depth, not the average density.

    -

    -GCell Desaturation / Layer Assignment

    -

    In addition to it's geometrical and density functionality, the GCell provides desaturation capabilities. Desaturation is the operation of moving up feedthough AutoSegment from the bottom layers towards the upper ones in order to balance the densities in the different densities. Thoses operations provides building blocks for the layer assignment stage which is provided by the Kabatic tool.

    -

    Two strategies are avalaibles, moving one global AutoSegment at a time with GCell::stepDesaturate() or, when one AutoSegment is moved up, move up the whole net trunk with GCell::stepNetDesaturate().

    -

    -GCell Implantation

    -

    GCell derives from Hurricane::ExtensionGo to allow a graphical rendering of the routing density.

    -

    Member Typedef Documentation

    - -

    ◆ SetIndex

    - -
    -
    - - - - -
    typedef set< GCell *, CompareByIndex > SetIndex
    -
    -

    Shorthand for a set of GCell sorted on their index.

    - -
    -
    -

    Member Function Documentation

    - -

    ◆ getAllocateds()

    - -
    -
    - - - - - -
    - - - - - - - -
    size_t getAllocateds ()
    -
    -static
    -
    -

    Returns: The number of allocated GCells.

    - -
    -
    - -

    ◆ getTopRightShrink()

    - -
    -
    - - - - - -
    - - - - - - - -
    DbU::Unit getTopRightShrink ()
    -
    -static
    -
    -

    Returns: The amount of shrink on the top and right boundaries.

    - -
    -
    - -

    ◆ getStaticName()

    - -
    -
    - - - - - -
    - - - - - - - -
    const Name & getStaticName ()
    -
    -static
    -
    -

    Returns: The name of the Go slice: "Katabatic::GCell".

    -
    See also
    Hurricane::ExtensionGo
    - -
    -
    - -

    ◆ getName()

    - -
    -
    - - - - - -
    - - - - - - - -
    const Name & getName () const
    -
    -virtual
    -
    -

    Returns: The name of the Go slice: "Katabatic::GCell".

    -
    See also
    Hurricane::ExtensionGo
    - -

    Referenced by GCell::checkDensity().

    - -
    -
    - -

    ◆ isSaturated() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - -
    bool isSaturated () const
    -
    -inline
    -
    -

    Returns: true if at least one layer exceed a saturation of 1.0 (more wirelength that it can hold).

    - -

    Referenced by GCell::checkDensity(), GCell::stepDesaturate(), and GCell::updateDensity().

    - -
    -
    - -

    ◆ isSaturated() [2/2]

    - -
    -
    - - - - - - - - -
    bool isSaturated (unsigned int depth) const
    -
    -

    Returns: true if the saturation ratio of layer depth is over the threshold defined for the GCells.

    - -

    References GCell::getDensity(), and Session::getSaturateRatio().

    - -
    -
    - -

    ◆ isValid()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool isValid () const
    -
    -inline
    -
    -
    - -

    ◆ isAboveDensity()

    - -
    -
    - - - - - - - - -
    bool isAboveDensity (float threshold) const
    -
    -

    Returns: true if the overall saturation ratio greater than threshold.

    - -

    References GCell::getDensity(), GCell::isValid(), and GCell::updateDensity().

    - -
    -
    - -

    ◆ hasFreeTrack()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    bool hasFreeTrack (size_t depth,
    float reserve 
    ) const
    -
    -
    - -

    ◆ getGCellGrid()

    - -
    -
    - - - - - -
    - - - - - - - -
    GCellGrid * getGCellGrid () const
    -
    -inline
    -
    -
    - -

    ◆ getDepth()

    - -
    -
    - - - - - -
    - - - - - - - -
    unsigned int getDepth () const
    -
    -inline
    -
    -

    Returns: The depth (i.e. number of routing layers) of the GCell.

    - -
    -
    - -

    ◆ getIndex()

    - -
    -
    - - - - - -
    - - - - - - - -
    unsigned int getIndex () const
    -
    -inline
    -
    -

    Returns: The linear index of the GCell in the GCellGrid vector.

    -
    See also
    GCellGrid for the meaning of the index.
    - -

    Referenced by AutoSegment::canMoveUp(), GCell::hasFreeTrack(), and GCell::stepDesaturate().

    - -
    -
    - -

    ◆ getRow()

    - -
    -
    - - - - - - - -
    unsigned int getRow () const
    -
    -

    Returns: The row of the GCell in the GCellGrid.

    - -

    References BaseGrid::getRow().

    - -

    Referenced by GCell::checkDensity(), and AutoSegment::computeOptimal().

    - -
    -
    - -

    ◆ getColumn()

    - -
    -
    - - - - - - - -
    unsigned int getColumn () const
    -
    -

    Returns: The Column of the GCell in the GCellGrid.

    - -

    References BaseGrid::getColumn().

    - -

    Referenced by GCell::checkDensity(), and AutoSegment::computeOptimal().

    - -
    -
    - -

    ◆ getLeft()

    - -
    -
    - - - - - - - -
    GCell * getLeft () const
    -
    -

    Returns: The left neighbor of the GCell (NULL if it is the leftmost GCell).

    - -

    References GCell::getGCellGrid(), and Grid< GCellT >::getGCellLeft().

    - -

    Referenced by AutoVertical::canMoveULeft(), and AutoVertical::moveULeft().

    - -
    -
    - -

    ◆ getRight()

    - - - -

    ◆ getUp()

    - - - -

    ◆ getDown()

    - -
    -
    - - - - - - - -
    GCell * getDown () const
    -
    -

    Returns: The bottom neighbor of the GCell (NULL if it is the bottommost GCell).

    - -

    References Grid< GCellT >::getGCellDown(), and GCell::getGCellGrid().

    - -

    Referenced by AutoHorizontal::canMoveULeft(), and AutoHorizontal::moveULeft().

    - -
    -
    - -

    ◆ translate()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void translate (const DbU::Unit,
    const DbU::Unit 
    )
    -
    -virtual
    -
    -

    Required to exists as a Hurricane::Go derived class. But must never be used...

    - -
    -
    - -

    ◆ getBoundingBox()

    - -
    -
    - - - - - -
    - - - - - - - -
    Box getBoundingBox () const
    -
    -virtual
    -
    -

    Returns: The bounding box of the GCell, with the top right shrink applied.

    - -

    Referenced by AutoSegment::AutoSegment(), AutoSegment::computeOptimal(), and AutoContactTerminal::getNativeConstraintBox().

    - -
    -
    - -

    ◆ getX()

    - -
    -
    - - - - - -
    - - - - - - - -
    DbU::Unit getX () const
    -
    -inline
    -
    -
    - -

    ◆ getY()

    - -
    -
    - - - - - -
    - - - - - - - -
    DbU::Unit getY () const
    -
    -inline
    -
    -
    - -

    ◆ getXMax()

    - -
    -
    - - - - - -
    - - - - - - - -
    DbU::Unit getXMax () const
    -
    -inline
    -
    -

    Returns: The upper right X coordinate of the GCell box (top right shrink applied).

    - -

    References Box::getXMax().

    - -

    Referenced by AutoHorizontal::_makeDogleg(), AutoSegment::getExtremity(), and AutoContact::setCBXMax().

    - -
    -
    - -

    ◆ getYMax()

    - -
    -
    - - - - - -
    - - - - - - - -
    DbU::Unit getYMax () const
    -
    -inline
    -
    -

    Returns: The upper right Y coordinate of the GCell box (top right shrink applied).

    - -

    References Box::getYMax().

    - -

    Referenced by AutoVertical::_makeDogleg(), AutoSegment::getExtremity(), and AutoContact::setCBYMax().

    - -
    -
    - -

    ◆ getSide()

    - -
    -
    - - - - - - - - -
    Interval getSide (unsigned int direction) const
    -
    -
    - -

    ◆ getHCapacity()

    - -
    -
    - - - - - - - -
    float getHCapacity () const
    -
    -
    Returns
    The number of track that can go through the GCell in the horizontal direction. For a detailed explanation of the computation see Track Computation.
    - -

    References Box::getHeight().

    - -

    Referenced by GCell::hasFreeTrack(), and GCell::updateDensity().

    - -
    -
    - -

    ◆ getVCapacity()

    - -
    -
    - - - - - - - -
    float getVCapacity () const
    -
    -
    Returns
    The number of track that can go through the GCell in the vertical direction. For a detailed explanation of the computation see Track Computation.
    - -

    References Box::getWidth().

    - -

    Referenced by GCell::hasFreeTrack(), and GCell::updateDensity().

    - -
    -
    - -

    ◆ getDensity()

    - - - -

    ◆ getCDensity()

    - -
    -
    - - - - - -
    - - - - - - - - -
    float getCDensity (unsigned int flags = 0) const
    -
    -inline
    -
    -

    Returns: The density of contacts.

    -

    Saturation & Density Computation, GCell Lazy Evaluation.

    - -

    References GCell::isValid(), and GCell::updateDensity().

    - -
    -
    - -

    ◆ getWDensity()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    float getWDensity (unsigned int depth,
    unsigned int flags = 0 
    ) const
    -
    -inline
    -
    -
    - -

    ◆ getBlockage()

    - -
    -
    - - - - - -
    - - - - - - - - -
    DbU::Unit getBlockage (unsigned int depth) const
    -
    -inline
    -
    -

    Returns: The total length of blockage wire on layer at depth.

    - -
    -
    - -

    ◆ getFragmentation()

    - -
    -
    - - - - - -
    - - - - - - - - -
    float getFragmentation (unsigned int depth) const
    -
    -inline
    -
    -

    Returns: The longest free fragment size on layer depth (in percent).

    - -

    References GCell::isValid(), and GCell::updateDensity().

    - -

    Referenced by AutoSegment::canMoveUp().

    - -
    -
    - -

    ◆ getFeedthroughs()

    - -
    -
    - - - - - -
    - - - - - - - - -
    float getFeedthroughs (unsigned int depth) const
    -
    -inline
    -
    -

    Returns: The estimate number of occupied tracks on layer depth.

    -
    See also
    Feedthrough Computation
    - -

    References GCell::isValid(), and GCell::updateDensity().

    - -
    -
    - -

    ◆ getGlobalsCount()

    - -
    -
    - - - - - -
    - - - - - - - - -
    float getGlobalsCount (unsigned int depth) const
    -
    -inline
    -
    -

    Returns: The number of global wires that go completly through the GCell at layer depth. This do not includes the global wires that begins or ends in the GCell.

    - -

    References GCell::isValid(), and GCell::updateDensity().

    - -
    -
    - -

    ◆ getHSegments()

    - -
    -
    - - - - - -
    - - - - - - - -
    const vector< AutoSegment * > & getHSegments () const
    -
    -inline
    -
    -
    Returns
    The vector of all horizontal AutoSegments that completly goes through the GCell.
    - -
    -
    - -

    ◆ getVSegments()

    - -
    -
    - - - - - -
    - - - - - - - -
    const vector< AutoSegment * > & getVSegments () const
    -
    -inline
    -
    -
    Returns
    The vector of all vertical AutoSegments that completly goes through the GCell.
    - -
    -
    - -

    ◆ getContacts()

    - -
    -
    - - - - - -
    - - - - - - - -
    const vector< AutoContact * > & getContacts () const
    -
    -inline
    -
    -
    Returns
    The vector of all AutoContacts owned by the GCell.
    - -
    -
    - -

    ◆ getHStartSegments()

    - -
    -
    - - - - - - - -
    AutoSegments getHStartSegments ()
    -
    -
    Returns
    A Collection of the horizontal AutoSegments that starts from this GCell.
    - -

    References Katabatic::KbHorizontal, and Katabatic::KbSource.

    - -

    Referenced by GCell::getStartSegments().

    - -
    -
    - -

    ◆ getVStartSegments()

    - -
    -
    - - - - - - - -
    AutoSegments getVStartSegments ()
    -
    -
    Returns
    A Collection of the vertical AutoSegments that starts from this GCell.
    - -

    References Katabatic::KbSource, and Katabatic::KbVertical.

    - -

    Referenced by GCell::getStartSegments().

    - -
    -
    - -

    ◆ getHStopSegments()

    - -
    -
    - - - - - - - -
    AutoSegments getHStopSegments ()
    -
    -
    Returns
    A Collection of the horizontal AutoSegments that stops in this GCell.
    - -

    References Katabatic::KbHorizontal, and Katabatic::KbTarget.

    - -

    Referenced by GCell::getStopSegments().

    - -
    -
    - -

    ◆ getVStopSegments()

    - -
    -
    - - - - - - - -
    AutoSegments getVStopSegments ()
    -
    -
    Returns
    A Collection of the vertical AutoSegments that stops in this GCell.
    - -

    References Katabatic::KbTarget, and Katabatic::KbVertical.

    - -

    Referenced by GCell::getStopSegments().

    - -
    -
    - -

    ◆ getStartSegments()

    - -
    -
    - - - - - -
    - - - - - - - - -
    AutoSegments getStartSegments (unsigned int direction)
    -
    -inline
    -
    -
    Returns
    A Collection of the horizontal or vertical AutoSegments that starts from this GCell according to direction.
    - -

    References GCell::getHStartSegments(), GCell::getVStartSegments(), and Katabatic::KbHorizontal.

    - -
    -
    - -

    ◆ getStopSegments()

    - -
    -
    - - - - - -
    - - - - - - - - -
    AutoSegments getStopSegments (unsigned int direction)
    -
    -inline
    -
    -
    Returns
    A Collection of the horizontal or vertical AutoSegments that stops in this GCell according to direction.
    - -

    References GCell::getHStopSegments(), GCell::getVStopSegments(), and Katabatic::KbHorizontal.

    - -
    -
    - -

    ◆ getRoutingPads()

    - -
    -
    - - - - - - - - -
    size_t getRoutingPads (set< RoutingPad *> & rps)
    -
    -
    Returns
    The size of the RoutingPad set.
    -

    Fills the rps set with all the RoutingPads that appears in this GCell. (looks at all the anchors of the owned AutoContact)

    - -

    Referenced by GCell::rpDesaturate().

    - -
    -
    - -

    ◆ getKey()

    - -
    -
    - - - - - -
    - - - - - - - -
    const Key & getKey () const
    -
    -inline
    -
    -
    Returns
    The sorting key of the GCell.
    -
    See also
    GCell Sorting Key
    - -
    -
    - -

    ◆ checkDensity()

    - -
    -
    - - - - - - - -
    size_t checkDensity () const
    -
    -
    Returns
    1 if the GCell is saturated, 0 otherwise.
    -

    Check, if the GCell is saturated, layer by layer. Issue a warning if that is the case.

    - -

    References Session::doWarnGCellOverload(), GCell::getColumn(), GCell::getName(), Session::getRoutingGauge(), GCell::getRow(), Session::isInDemoMode(), GCell::isSaturated(), GCell::isValid(), and GCell::updateDensity().

    - -

    Referenced by GCell::updateDensity().

    - -
    -
    - -

    ◆ checkEdgeSaturation()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    bool checkEdgeSaturation (size_t hreserved,
    size_t vreserved 
    ) const
    -
    -
    Returns
    true if the Up/Right edge is over the threshold.
    -

    Check if the number of AutoSegments crossing the Up & Right edges of the GCell exceed threshold. The thresold must be expressed as a percentage of the full capacity of the edges. The overload is computed as a whole and not depth by depth.

    - -

    References GCell::getGCellGrid(), GCellGrid::getHEdgeCapacity(), GCell::getRight(), GCell::getUp(), GCellGrid::getVEdgeCapacity(), AutoSegment::isLocal(), and Session::lookup().

    - -
    -
    - -

    ◆ addBlockage()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void addBlockage (unsigned int depth,
    DbU::Unit length 
    )
    -
    -

    Adds length of wire blockage to layer depth.

    - -

    References DbU::getValueString().

    - -
    -
    - -

    ◆ addHSegment()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void addHSegment (AutoSegmentsegment)
    -
    -inline
    -
    -

    Adds segment to the list of horizontal feedthroughs.

    - -

    Referenced by AutoHorizontal::_postCreate(), AutoVertical::moveULeft(), and AutoVertical::moveURight().

    - -
    -
    - -

    ◆ addVSegment()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void addVSegment (AutoSegmentsegment)
    -
    -inline
    -
    -

    Adds segment to the list of vertical feedthroughs.

    - -

    Referenced by AutoVertical::_postCreate(), AutoHorizontal::moveULeft(), and AutoHorizontal::moveURight().

    - -
    -
    - -

    ◆ addContact()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void addContact (AutoContactcontact)
    -
    -inline
    -
    -

    Adds contact to the list of contacts owned by this GCell.

    - -

    Referenced by AutoContact::setGCell().

    - -
    -
    - -

    ◆ removeVSegment()

    - -
    -
    - - - - - - - - -
    void removeVSegment (AutoSegmentsegment)
    -
    -

    Removes segment to the list of vertical feedthroughs.

    - -

    Referenced by AutoVertical::_makeDogleg(), AutoVertical::_preDestroy(), AutoHorizontal::moveULeft(), and AutoHorizontal::moveURight().

    - -
    -
    - -

    ◆ removeHSegment()

    - -
    -
    - - - - - - - - -
    void removeHSegment (AutoSegmentsegment)
    -
    -

    Removes segment to the list of horizontal feedthroughs.

    - -

    Referenced by AutoHorizontal::_makeDogleg(), AutoHorizontal::_preDestroy(), AutoVertical::moveULeft(), and AutoVertical::moveURight().

    - -
    -
    - -

    ◆ removeContact()

    - -
    -
    - - - - - - - - -
    void removeContact (AutoContactcontact)
    -
    -

    Removes contact to the list of contacts owned by this GCell.

    - -

    References AutoContact::base().

    - -
    -
    - -

    ◆ updateContacts()

    - -
    -
    - - - - - - - -
    void updateContacts ()
    -
    -

    Force a geometry update on all the AutoContact of the GCell.

    - -
    -
    - -

    ◆ updateDensity()

    - - - -

    ◆ updateKey()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void updateKey (unsigned int depth)
    -
    -inline
    -
    -

    Update the GCell key with the new density at layer depth.

    -
    See also
    GCell Sorting Key.
    - -

    References GCell::Key::update().

    - -
    -
    - -

    ◆ rpDesaturate()

    - -
    -
    - - - - - - - - -
    bool rpDesaturate (set< Net *> & nets)
    -
    -

    If the number of RoutingPad in the first routing layer exceed the Session::getSaturateRp() threshold, force a desaturation of layer depth 1 until it is below 0.5.

    -
    See also
    GCell Desaturation / Layer Assignment
    - -

    References Session::getRoutingLayer(), GCell::getRoutingPads(), Session::getSaturateRp(), Katabatic::KbForceMove, and GCell::stepDesaturate().

    - -
    -
    - -

    ◆ stepDesaturate()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    bool stepDesaturate (unsigned int depth,
    set< Net *> & globalNets,
    AutoSegment *& moved,
    unsigned int flags = 0 
    )
    -
    -
    Parameters
    - - - - - -
    depthThe depth to desaturate.
    globalNetsThe set of Nets of which at least one segment has been moved up.
    movedThe moved up AutoSegment.
    flagsIf KbForceMove is set, force one AutoSegment to move up, event if the GCell is not saturated in the relevant depth.
    -
    -
    -

    Returns: true if an AutoSegment has actually been moved up.

    -

    Perform the atomic desaturation, that is move up one AutoSegment from layer depth to layer depth+2, longuests AutoSegments are moved first. Only global feedthrough AutoSegments are candidates to be moved up. The Net owning the moved up segment is added to the globalNets set. If the GCell is not saturated on layer depth, nothing is done. If the forced flag is set, one global AutoSegment is moved up regardless of the saturation status.

    -
    See also
    GCell Desaturation / Layer Assignment
    - -

    References GCell::getIndex(), RoutingGauge::getLayerDepth(), Session::getRoutingGauge(), GCell::isSaturated(), Katabatic::KbForceMove, Katabatic::KbHorizontal, Katabatic::KbVertical, and GCell::updateDensity().

    - -

    Referenced by GCell::rpDesaturate().

    - -
    -
    - -

    ◆ stepNetDesaturate()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    bool stepNetDesaturate (unsigned int depth,
    set< Net *> & globalNets,
    GCell::SetIndexinvalidateds 
    )
    -
    -
    Parameters
    - - - - -
    depthThe depth to desaturate.
    globalNetsThe set of Nets of which at least one segment has been moved up.
    invalidatedsThe set of GCell ids that have been invalidateds.
    -
    -
    -

    Returns: true if a Net has been moved up.

    -

    Perform a desaturation by whole Net trunk. Select the longest feedthrough AutoSegment in layer depth, then attempt to move up the whole Net (all it's global AutoSegments are moved up).

    -
    See also
    GCell Desaturation / Layer Assignment
    - -

    References GCell::getGCellGrid(), RoutingGauge::getLayerDepth(), Session::getRoutingGauge(), Katabatic::KbHorizontal, Katabatic::KbVertical, and GCell::updateDensity().

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1GCell.js b/deprecated/katabatic/doc/html/classKatabatic_1_1GCell.js deleted file mode 100644 index dbee1088..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1GCell.js +++ /dev/null @@ -1,67 +0,0 @@ -var classKatabatic_1_1GCell = -[ - [ "CompareByDensity", "classKatabatic_1_1GCell_1_1CompareByDensity.html", "classKatabatic_1_1GCell_1_1CompareByDensity" ], - [ "CompareByIndex", "classKatabatic_1_1GCell_1_1CompareByIndex.html", null ], - [ "Key", "classKatabatic_1_1GCell_1_1Key.html", "classKatabatic_1_1GCell_1_1Key" ], - [ "SetIndex", "classKatabatic_1_1GCell.html#aacb1c215b203bfba5729f135b3221d40", null ], - [ "getAllocateds", "classKatabatic_1_1GCell.html#a91c8bc1a6bdb1b15c3c084ebfd38af47", null ], - [ "getTopRightShrink", "classKatabatic_1_1GCell.html#ac594cb2832ee7ef410c89499258d38fd", null ], - [ "getStaticName", "classKatabatic_1_1GCell.html#a00e56270cfb31f56e52e31afbc33ba71", null ], - [ "getName", "classKatabatic_1_1GCell.html#a5e23c46b801d3049b349b68774a0d298", null ], - [ "isSaturated", "classKatabatic_1_1GCell.html#a9e283a15a7f03a2e4184f6c8bd4e9340", null ], - [ "isSaturated", "classKatabatic_1_1GCell.html#a18ae2575758a4a5e4a42f145309a34de", null ], - [ "isValid", "classKatabatic_1_1GCell.html#aac1b70a2ed67ead038c4d3f5ac4d8a81", null ], - [ "isAboveDensity", "classKatabatic_1_1GCell.html#aed5c1b0b1a63be3064f3eff2d24b4abd", null ], - [ "hasFreeTrack", "classKatabatic_1_1GCell.html#abe5a85792463184f487b42efd80cc25e", null ], - [ "getGCellGrid", "classKatabatic_1_1GCell.html#a0702328522e94ca9705222cd5b9e9c6d", null ], - [ "getDepth", "classKatabatic_1_1GCell.html#ad43be8bb2a3c8247405feef4fa973734", null ], - [ "getIndex", "classKatabatic_1_1GCell.html#a3d2cc17c5b9eb2ca96ab10b6313391ad", null ], - [ "getRow", "classKatabatic_1_1GCell.html#a14db4e8542de7da785abec87fa65d6a4", null ], - [ "getColumn", "classKatabatic_1_1GCell.html#a0035603802c53109ab0581ac39239932", null ], - [ "getLeft", "classKatabatic_1_1GCell.html#a0aba3a4c02ade1a0af6d4956b2d4d944", null ], - [ "getRight", "classKatabatic_1_1GCell.html#a23fdbef3699158d88da408ad8c23d091", null ], - [ "getUp", "classKatabatic_1_1GCell.html#a43374e26fb08fb4a4d47599e1f81e293", null ], - [ "getDown", "classKatabatic_1_1GCell.html#a303e94e8090f008b434e785af9a34eb5", null ], - [ "translate", "classKatabatic_1_1GCell.html#a819f3ffbba69e4de2a19c827676b5aee", null ], - [ "getBoundingBox", "classKatabatic_1_1GCell.html#a3b9694bf093e3ea16e4a8c8126a8d4db", null ], - [ "getX", "classKatabatic_1_1GCell.html#a852afe759ce2cb8cb9c0524fc1e23387", null ], - [ "getY", "classKatabatic_1_1GCell.html#ac597d25a34a79fb4393211c70f5a1bc3", null ], - [ "getXMax", "classKatabatic_1_1GCell.html#ae58d4705ca2370ad5e0912d9e92e94da", null ], - [ "getYMax", "classKatabatic_1_1GCell.html#a98f8c479d4789850a926d87443e56e00", null ], - [ "getSide", "classKatabatic_1_1GCell.html#a46861e2e666df89cd2e6eaa7ee146bcf", null ], - [ "getHCapacity", "classKatabatic_1_1GCell.html#a75e5f7e9b993087270e8b21eb1e71e8d", null ], - [ "getVCapacity", "classKatabatic_1_1GCell.html#a4f58e38dbcd75ae549f3ce9526ce97e1", null ], - [ "getDensity", "classKatabatic_1_1GCell.html#abdc872b796225ad9d6414f59b6d503c1", null ], - [ "getCDensity", "classKatabatic_1_1GCell.html#a35c9f813f00788d8093faa5c37c846e3", null ], - [ "getWDensity", "classKatabatic_1_1GCell.html#acfacab8f1d78e38ece30b4d2c63cf6d9", null ], - [ "getBlockage", "classKatabatic_1_1GCell.html#a3cd78c51e165f5242bb99ab5033ff871", null ], - [ "getFragmentation", "classKatabatic_1_1GCell.html#ab154601770f4c29260c19364f130d534", null ], - [ "getFeedthroughs", "classKatabatic_1_1GCell.html#a1b246f4d67f6a21d391d2f366d184092", null ], - [ "getGlobalsCount", "classKatabatic_1_1GCell.html#a315f23abf15d879459eab98a6eeece12", null ], - [ "getHSegments", "classKatabatic_1_1GCell.html#ad885baf0428b0ffa73738e60b9fb6956", null ], - [ "getVSegments", "classKatabatic_1_1GCell.html#a2c54706769cb88ca13d233726ded6f2f", null ], - [ "getContacts", "classKatabatic_1_1GCell.html#ac2d662a9bbf5b80eb92776e4bce06ec5", null ], - [ "getHStartSegments", "classKatabatic_1_1GCell.html#a79668a41675e9ba0ca59d4b91e3b70be", null ], - [ "getVStartSegments", "classKatabatic_1_1GCell.html#acbd17a4441905a4f5bc33a26bb338d0a", null ], - [ "getHStopSegments", "classKatabatic_1_1GCell.html#a77beccf65527a330f15bed2aba4f9dea", null ], - [ "getVStopSegments", "classKatabatic_1_1GCell.html#a2f0f038f5700b7b55f22829c5d43aa07", null ], - [ "getStartSegments", "classKatabatic_1_1GCell.html#a1f92568d22b1384a8cdf328340fb9160", null ], - [ "getStopSegments", "classKatabatic_1_1GCell.html#a80ad0f9e79bccf6aed4fb69b4b795005", null ], - [ "getRoutingPads", "classKatabatic_1_1GCell.html#a63d53a84324e393e7d7b3e73548ed6bf", null ], - [ "getKey", "classKatabatic_1_1GCell.html#ab17b3f4c7e2558bc29ea026925fd6fd6", null ], - [ "checkDensity", "classKatabatic_1_1GCell.html#a8f5167eb40def2cfa878913743079f03", null ], - [ "checkEdgeSaturation", "classKatabatic_1_1GCell.html#af7f18e7e587a1394935196637bb2577b", null ], - [ "addBlockage", "classKatabatic_1_1GCell.html#a1270eab34ac57f21c0286a5455044a0d", null ], - [ "addHSegment", "classKatabatic_1_1GCell.html#a4aad7d6f7357fd7963aab91bc2019a1b", null ], - [ "addVSegment", "classKatabatic_1_1GCell.html#a8aa815e9e99df8187e628f6ec9e9da77", null ], - [ "addContact", "classKatabatic_1_1GCell.html#a2b84aab620bfca1064e988e94e7b9c59", null ], - [ "removeVSegment", "classKatabatic_1_1GCell.html#abe128484d8aa063198292a88c63f2bba", null ], - [ "removeHSegment", "classKatabatic_1_1GCell.html#aff76aa96214c0efcf13186b8b3e5c852", null ], - [ "removeContact", "classKatabatic_1_1GCell.html#aa052a9427fbd4185f00567a97770f80b", null ], - [ "updateContacts", "classKatabatic_1_1GCell.html#aa0beea2ceaa543503346967085036d1a", null ], - [ "updateDensity", "classKatabatic_1_1GCell.html#a9b3455dce10eb98d0496175dd586528c", null ], - [ "updateKey", "classKatabatic_1_1GCell.html#a11beff0f0bec06d0f3e080969516dfc3", null ], - [ "rpDesaturate", "classKatabatic_1_1GCell.html#a8785f0ae0bc6de278281c353734b67b7", null ], - [ "stepDesaturate", "classKatabatic_1_1GCell.html#a1256c28423a9a260d320e25b3fc1bf57", null ], - [ "stepNetDesaturate", "classKatabatic_1_1GCell.html#aab5b30c49b0453db495337931cf284a9", null ] -]; \ No newline at end of file diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1GCellDensitySet-members.html b/deprecated/katabatic/doc/html/classKatabatic_1_1GCellDensitySet-members.html deleted file mode 100644 index fd30dccb..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1GCellDensitySet-members.html +++ /dev/null @@ -1,76 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - - -
    -
    -
    GCellDensitySet Member List
    -
    -
    - -

    This is the complete list of members for GCellDensitySet, including all inherited members.

    - - - - - - - - - - - -
    empty() constGCellDensitySetinline
    erase(GCell *)GCellDensitySetinline
    GCellDensitySet(unsigned int depth)GCellDensitySet
    GCellDensitySet(unsigned int depth, const std::vector< GCell *> &)GCellDensitySet
    getGCells() constGCellDensitySetinline
    insert(GCell *)GCellDensitySetinline
    requeue()GCellDensitySet
    size() constGCellDensitySetinline
    unqueue(GCell *)GCellDensitySetinline
    ~GCellDensitySet()GCellDensitySet
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1GCellDensitySet.html b/deprecated/katabatic/doc/html/classKatabatic_1_1GCellDensitySet.html deleted file mode 100644 index e7da9e0f..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1GCellDensitySet.html +++ /dev/null @@ -1,355 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - - -
    - -
    -
    GCellDensitySet Class Reference
    -
    -
    - -

    GCell Set, sorted by density. - More...

    - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

     GCellDensitySet (unsigned int depth)
     
     GCellDensitySet (unsigned int depth, const std::vector< GCell *> &)
     
     ~GCellDensitySet ()
     
    bool empty () const
     
    size_t size () const
     
    const std::set< GCell *, GCell::CompareByKey > & getGCells () const
     
    void insert (GCell *)
     
    void erase (GCell *)
     
    void unqueue (GCell *)
     
    void requeue ()
     
    -

    Detailed Description

    -

    GCell Set, sorted by density.

    -

    A small container helper to manage a set of GCell sorted by density on a specific layer depth.

    -

    The helper is implemented in term of a set. Once inserted in a set an element must not have is sorting key changed. But GCell density may change due to AutoSegment modifications during the lifetime of the set. To circumvent this problem, the GCell provide a key attribute to be used specifically with GCellDensitySet. This key act as a cached copy of the GCell density which is updated only by a call to GCell::updateKey() (and not GCell::updateDensity()). GCell which density have changed and key has to be updated must be signaled to set with the GCellDensityQueue::unqueue() method. When we want to update the sorting of the set on the new densities, we call GCellDensitySet::requeue() which, for each invalidated GCell do:

    -

    Typical usage:

    GCellDensitySet gcells ( 2, *(getGCellGrid()->getGCellVector()) );
    while ( true ) {
    bool optimized = false;
    std::set<GCell*,GCell::CompareByKey>::const_iterator igcell = gcells.getGCells().begin();
    for ( ; igcell != gcells.getGCells().end() ; ++igcell ) {
    if ( doSomeOptimization(*igcell) ) {
    optimized = true;
    gcells.unqueue( *igcell );
    }
    }
    if (not optimized) break;
    gcells.requeue();
    }

    Constructor & Destructor Documentation

    - -

    ◆ GCellDensitySet() [1/2]

    - -
    -
    - - - - - - - - -
    GCellDensitySet (unsigned int depth)
    -
    -

    Create a new empty GCellDensitySet, sorting on density of layer depth.

    - -
    -
    - -

    ◆ GCellDensitySet() [2/2]

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    GCellDensitySet (unsigned int depth,
    const std::vector< GCell *> & gcells 
    )
    -
    -

    Create a new empty GCellDensitySet, sorting on density of layer depth. Load the queue with the GCells supplied in the gcells vector.

    - -

    References GCellDensitySet::requeue().

    - -
    -
    - -

    ◆ ~GCellDensitySet()

    - -
    -
    - - - - - - - -
    ~GCellDensitySet ()
    -
    -

    Delete a GCellDensitySet, if the queue is not empty, issue a warning.

    - -
    -
    -

    Member Function Documentation

    - -

    ◆ empty()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool empty () const
    -
    -inline
    -
    -

    Returns: true if the queue is empty.

    - -
    -
    - -

    ◆ size()

    - -
    -
    - - - - - -
    - - - - - - - -
    size_t size () const
    -
    -inline
    -
    -

    Returns: the numbers of elements in the queue.

    - -
    -
    - -

    ◆ getGCells()

    - -
    -
    - - - - - -
    - - - - - - - -
    const std::set< GCell *, GCell::CompareByKey > & getGCells () const
    -
    -inline
    -
    -

    Returns: the list of GCells currently in the queue.

    - -
    -
    - -

    ◆ insert()

    - -
    -
    - - - - - -
    - - - - - - - - -
    size_t insert (GCellgcell)
    -
    -inline
    -
    -

    Insert gcell into the set.

    - -
    -
    - -

    ◆ erase()

    - -
    -
    - - - - - -
    - - - - - - - - -
    size_t erase (GCellgcell)
    -
    -inline
    -
    -

    Remove gcell from the set.

    - -
    -
    - -

    ◆ unqueue()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void unqueue (GCellgcell)
    -
    -inline
    -
    -

    Invalidate gcell. The density of gcell may have changed and needs to be reinserted into the queue. It is temporarily set asides until the next call to GCellDensitySet::requeue().

    - -
    -
    - -

    ◆ requeue()

    - -
    -
    - - - - - - - -
    void requeue ()
    -
    -

    Reinsert in the queue all the GCells that have been previously invalidated by a call to GCellDensitySet::unqueue(). This function calls GCell::updateKey() before reinserting the GCell.

    - -

    Referenced by GCellDensitySet::GCellDensitySet().

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1GCellDensitySet.js b/deprecated/katabatic/doc/html/classKatabatic_1_1GCellDensitySet.js deleted file mode 100644 index 7613241c..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1GCellDensitySet.js +++ /dev/null @@ -1,13 +0,0 @@ -var classKatabatic_1_1GCellDensitySet = -[ - [ "GCellDensitySet", "classKatabatic_1_1GCellDensitySet.html#ad74cbb404ad28f734f5759462aa9f363", null ], - [ "GCellDensitySet", "classKatabatic_1_1GCellDensitySet.html#ada8d6c973310b9c4f66ec3c5b611bdf9", null ], - [ "~GCellDensitySet", "classKatabatic_1_1GCellDensitySet.html#aef015ff8dc7d34fcb907281f71bb0003", null ], - [ "empty", "classKatabatic_1_1GCellDensitySet.html#ac6e61de369e994009e36f344f99c15ad", null ], - [ "size", "classKatabatic_1_1GCellDensitySet.html#aac782da1f912bceb5d8ad00c8dc892ac", null ], - [ "getGCells", "classKatabatic_1_1GCellDensitySet.html#a4ee769ef70539275bf4b500461250af0", null ], - [ "insert", "classKatabatic_1_1GCellDensitySet.html#a6b97afb6d814ba80a24a49b3ad8e540b", null ], - [ "erase", "classKatabatic_1_1GCellDensitySet.html#a743f7f98fe31b8a1c134aff01ba03acb", null ], - [ "unqueue", "classKatabatic_1_1GCellDensitySet.html#a89099ec88eadcadb942b7d64a6ffd7ee", null ], - [ "requeue", "classKatabatic_1_1GCellDensitySet.html#ac84efe46d8a3c409e85bc3420240c3c2", null ] -]; \ No newline at end of file diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1GCellGrid-members.html b/deprecated/katabatic/doc/html/classKatabatic_1_1GCellGrid-members.html deleted file mode 100644 index 39a4d989..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1GCellGrid-members.html +++ /dev/null @@ -1,109 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - - -
    -
    -
    GCellGrid Member List
    -
    -
    - -

    This is the complete list of members for GCellGrid, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    _postCreate()GCellGridprotectedvirtual
    _preDestroy()GCellGridprotectedvirtual
    AverageHDensity enum valueGCellGrid
    AverageHVDensity enum valueGCellGrid
    AverageVDensity enum valueGCellGrid
    BaseGrid(const Box &)BaseGridprotected
    checkDensity() constGCellGrid
    create(KatabaticEngine *)GCellGridprotectedstatic
    DensityMode enum nameGCellGrid
    destroy()BaseGridinline
    getBoundingBox() constBaseGridinline
    getCell() constGCellGrid
    getColumn(unsigned int) constBaseGridinline
    getColumns() constBaseGridinline
    getDensityMode() constGCellGridinline
    getGCell(unsigned int index) constGrid< GCell >inline
    getGCell(const Point p) constGrid< GCell >inline
    getGCell(const Point p1, const Point p2) constGrid< GCell >inline
    getGCellDown(const GCell *gcell) constGrid< GCell >inline
    getGCellLeft(const GCell *gcell) constGrid< GCell >inline
    getGCellRight(const GCell *gcell) constGrid< GCell >inline
    getGCells()Grid< GCell >inline
    getGCellsColumn(unsigned int column, unsigned int rowStart, unsigned int rowStop)Grid< GCell >inline
    getGCellsRow(unsigned int row, unsigned int columnStart, unsigned int columnStop)Grid< GCell >inline
    getGCellUp(const GCell *gcell) constGrid< GCell >inline
    getHEdgeCapacity() constGCellGridinline
    getIndex(unsigned int c, unsigned int r) constBaseGridinline
    getKatabatic() constGCellGridinline
    getRawSize() constBaseGridinline
    getRow(unsigned int) constBaseGridinline
    getRows() constBaseGridinline
    getUSide(unsigned int) constGCellGrid
    getVEdgeCapacity() constGCellGridinline
    getXGrads() constBaseGridinline
    getYGrads() constBaseGridinline
    Grid(const Box &)Grid< GCell >inlineprotected
    MaxDensity enum valueGCellGrid
    MaxHDensity enum valueGCellGrid
    MaxHVDensity enum valueGCellGrid
    MaxVDensity enum valueGCellGrid
    setDensityMode(unsigned int)GCellGridinline
    updateContacts(unsigned int flags=KbOpenSession)GCellGrid
    updateDensity()GCellGrid
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1GCellGrid.html b/deprecated/katabatic/doc/html/classKatabatic_1_1GCellGrid.html deleted file mode 100644 index 753b2e44..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1GCellGrid.html +++ /dev/null @@ -1,564 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - - - -
    - -

    GCell Grid. - More...

    -
    -Inheritance diagram for GCellGrid:
    -
    -
    Inheritance graph
    - - - - -
    [legend]
    - - - - -

    -Public Types

    enum  DensityMode {
    -  AverageHVDensity =1, -
    -  AverageHDensity =2, -
    -  AverageVDensity =3, -
    -  MaxHVDensity =4, -
    -  MaxVDensity =5, -
    -  MaxHDensity =6, -
    -  MaxDensity =7 -
    - }
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    CellgetCell () const
     
    KatabaticEnginegetKatabatic () const
     
    unsigned int getDensityMode () const
     
    size_t getHEdgeCapacity () const
     
    size_t getVEdgeCapacity () const
     
    Interval getUSide (unsigned int) const
     
    size_t checkDensity () const
     
    size_t updateDensity ()
     
    void updateContacts (unsigned int flags=KbOpenSession)
     
    void setDensityMode (unsigned int)
     
    - Public Member Functions inherited from Grid< GCell >
    GCellgetGCell (unsigned int index) const
     
    GCellgetGCell (const Point p) const
     
    GCellgetGCell (const Point p1, const Point p2) const
     
    GCellgetGCellLeft (const GCell *gcell) const
     
    GCellgetGCellRight (const GCell *gcell) const
     
    GCellgetGCellUp (const GCell *gcell) const
     
    GCellgetGCellDown (const GCell *gcell) const
     
    GenericCollection< GCell *> getGCells ()
     
    GenericCollection< GCell *> getGCellsColumn (unsigned int column, unsigned int rowStart, unsigned int rowStop)
     
    GenericCollection< GCell *> getGCellsRow (unsigned int row, unsigned int columnStart, unsigned int columnStop)
     
    - Public Member Functions inherited from BaseGrid
    void destroy ()
     
    const BoxgetBoundingBox () const
     
    unsigned int getColumns () const
     
    unsigned int getRows () const
     
    unsigned int getRawSize () const
     
    unsigned int getIndex (unsigned int c, unsigned int r) const
     
    unsigned int getRow (unsigned int) const
     
    unsigned int getColumn (unsigned int) const
     
    const AxisgetXGrads () const
     
    const AxisgetYGrads () const
     
    - - - - - - - - - - - -

    -Protected Member Functions

    void _postCreate ()
     
    void _preDestroy ()
     
    - Protected Member Functions inherited from Grid< GCell >
     Grid (const Box &)
     
    - Protected Member Functions inherited from BaseGrid
     BaseGrid (const Box &)
     
    - - - -

    -Static Protected Member Functions

    static GCellGridcreate (KatabaticEngine *)
     
    -

    Detailed Description

    -

    GCell Grid.

    -

    The GCell Grid of Katabatic. Although the base template class Grid support irregular grid, the GCellGrid is regular, following the Knik global router GCells. Only the topmost row and leftmost column may have different height or width to cope with the design real size.

    -

    Due to the regular nature of the grid, the horizontal & vertical edges capacities are all identical, and initialized from the Katabatic Configuration.

    -

    The grid is build from the Knik global routing, so obviously a KnikEngine must be attached to the Cell when building the GCellGrid. An error is thrown otherwise.

    -

    Member Enumeration Documentation

    - -

    ◆ DensityMode

    - -
    -
    - - - - -
    enum DensityMode
    -
    -

    Various ways of computing the overall density of a GCell.

    - - - - - - - - -
    Enumerator
    AverageHVDensity 

    The average density all depths accounted.

    -
    AverageHDensity 

    The average density of horizontal layers.

    -
    AverageVDensity 

    The average density of horizontal layers.

    -
    MaxHVDensity 

    The maximum of the average horizontal & vertical densities taken as a whole.

    -
    MaxVDensity 

    The maximum of the average vertical densities taken depth by depth.

    -
    MaxHDensity 

    The maximum of the average horizontal densities taken depth by depth.

    -
    MaxDensity 

    The maximum of the average horizontal & vertical densities taken depth by depth.

    -
    - -
    -
    -

    Member Function Documentation

    - -

    ◆ getCell()

    - -
    -
    - - - - - - - -
    Cell * getCell () const
    -
    -

    Returns: The associated Cell.

    - -

    Referenced by GCellGrid::_postCreate().

    - -
    -
    - -

    ◆ getKatabatic()

    - -
    -
    - - - - - -
    - - - - - - - -
    KatabaticEngine * getKatabatic () const
    -
    -inline
    -
    -

    Returns: The associated KatabaticEngine.

    - -
    -
    - -

    ◆ getDensityMode()

    - -
    -
    - - - - - -
    - - - - - - - -
    unsigned int getDensityMode () const
    -
    -inline
    -
    -

    Returns: The computation mode of the GCell densities.

    - -

    Referenced by GCell::getDensity().

    - -
    -
    - -

    ◆ getHEdgeCapacity()

    - -
    -
    - - - - - -
    - - - - - - - -
    size_t getHEdgeCapacity () const
    -
    -inline
    -
    -

    Returns: The horizontal edge capacity. As the matrix is regular it is identical for all horizontal edges.

    - -

    Referenced by GCell::checkEdgeSaturation().

    - -
    -
    - -

    ◆ getVEdgeCapacity()

    - -
    -
    - - - - - -
    - - - - - - - -
    size_t getVEdgeCapacity () const
    -
    -inline
    -
    -

    Returns: The vertical edge capacity. As the matrix is regular it is identical for all vertical edges.

    - -

    Referenced by GCell::checkEdgeSaturation().

    - -
    -
    - -

    ◆ getUSide()

    - -
    -
    - - - - - - - - -
    Interval getUSide (unsigned int direction) const
    -
    -

    Returns: The side of the whole grid in direction.

    - -

    References Box::getXMax(), Box::getXMin(), Box::getYMax(), Box::getYMin(), Katabatic::KbHorizontal, and Katabatic::KbVertical.

    - -
    -
    - -

    ◆ checkDensity()

    - -
    -
    - - - - - - - -
    size_t checkDensity () const
    -
    -

    Returns: The number of GCell saturateds.

    -

    Check all GCells for saturations.

    - -

    References Grid< GCell >::getGCells().

    - -
    -
    - -

    ◆ updateDensity()

    - -
    -
    - - - - - - - -
    size_t updateDensity ()
    -
    -

    Returns: The number of GCell saturateds.

    -

    Force a density update on all the GCells.

    - -

    References Grid< GCell >::getGCells().

    - -
    -
    - -

    ◆ updateContacts()

    - -
    -
    - - - - - - - - -
    void updateContacts (unsigned int flags = KbOpenSession)
    -
    -

    Force an update on all AutoContact on all the GCells. if openSession is true, enclose the update in a Session.

    - -

    References Session::close(), Grid< GCell >::getGCells(), Katabatic::KbOpenSession, and Session::open().

    - -

    Referenced by KatabaticEngine::refresh().

    - -
    -
    - -

    ◆ setDensityMode()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void setDensityMode (unsigned int mode)
    -
    -inline
    -
    -

    Sets the density computation mode.

    - -
    -
    - -

    ◆ _postCreate()

    - -
    -
    - - - - - -
    - - - - - - - -
    void _postCreate ()
    -
    -protectedvirtual
    -
    -

    Perform the GCell & GCell vector allocation.

      -
    • Read the horizontal and vertical cut lines from Knik and translate them into BaseGrid::Axis.
    • -
    • From the BaseGrid::Axis, deduces the exact positions of the GCells and allocate them.
    • -
    • The GCell allocation is done in a "row by row" fashion consistent with BaseGrid implicit assumptions.
    • -
    - -

    Reimplemented from BaseGrid.

    - -

    References BaseGrid::Axis::addGraduation(), GCellGrid::getCell(), BaseGrid::getColumns(), BaseGrid::getRows(), BaseGrid::Axis::getSize(), and BaseGrid::Axis::sort().

    - -
    -
    - -

    ◆ _preDestroy()

    - -
    -
    - - - - - -
    - - - - - - - -
    void _preDestroy ()
    -
    -protectedvirtual
    -
    -

    The GCells are deleted at this point.

    - -

    Reimplemented from BaseGrid.

    - -
    -
    - -

    ◆ create()

    - -
    -
    - - - - - -
    - - - - - - - - -
    GCellGrid * create (KatabaticEnginektbt)
    -
    -staticprotected
    -
    -

    API-space contructor.

    - -

    References grid().

    - -

    Referenced by KatabaticEngine::createDetailedGrid().

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1GCellGrid.js b/deprecated/katabatic/doc/html/classKatabatic_1_1GCellGrid.js deleted file mode 100644 index 5a5da3a8..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1GCellGrid.js +++ /dev/null @@ -1,26 +0,0 @@ -var classKatabatic_1_1GCellGrid = -[ - [ "DensityMode", "classKatabatic_1_1GCellGrid.html#a07884f5e1af410e98208fed76a2b40fe", [ - [ "AverageHVDensity", "classKatabatic_1_1GCellGrid.html#a07884f5e1af410e98208fed76a2b40fead15bf3e5b63f398d76d717a088acd310", null ], - [ "AverageHDensity", "classKatabatic_1_1GCellGrid.html#a07884f5e1af410e98208fed76a2b40feaec0ad06385eae8d1e2dee4f3c9f9f4ed", null ], - [ "AverageVDensity", "classKatabatic_1_1GCellGrid.html#a07884f5e1af410e98208fed76a2b40fead1a1d89017d10aeb63d1c05b6fb650dd", null ], - [ "MaxHVDensity", "classKatabatic_1_1GCellGrid.html#a07884f5e1af410e98208fed76a2b40fea8265e053af0708a508ecbce86d1a8165", null ], - [ "MaxVDensity", "classKatabatic_1_1GCellGrid.html#a07884f5e1af410e98208fed76a2b40fea5f0a89ca367ef98550eaa86c1e32c873", null ], - [ "MaxHDensity", "classKatabatic_1_1GCellGrid.html#a07884f5e1af410e98208fed76a2b40fea2a6d29b012cc89026c3c0061f87a4f03", null ], - [ "MaxDensity", "classKatabatic_1_1GCellGrid.html#a07884f5e1af410e98208fed76a2b40fea90a2f4a4ee8558de9f99458ddeab852c", null ] - ] ], - [ "getCell", "classKatabatic_1_1GCellGrid.html#a148fdf09f18e7adb39a73c747f165266", null ], - [ "getKatabatic", "classKatabatic_1_1GCellGrid.html#af6f266b5c40e2dd7d387b5d4fcb5f196", null ], - [ "getDensityMode", "classKatabatic_1_1GCellGrid.html#a412fc9ba0a5d19ee3e7949c1ed6199ee", null ], - [ "getHEdgeCapacity", "classKatabatic_1_1GCellGrid.html#a09721f6fc7df7727a63ddbc4552ad0d9", null ], - [ "getVEdgeCapacity", "classKatabatic_1_1GCellGrid.html#aee0cab79d66553ad9b2a7fc2bf8725be", null ], - [ "getUSide", "classKatabatic_1_1GCellGrid.html#a371dfcfdfa4043649a81e1ff35287528", null ], - [ "checkDensity", "classKatabatic_1_1GCellGrid.html#a8f5167eb40def2cfa878913743079f03", null ], - [ "checkEdgeSaturation", "classKatabatic_1_1GCellGrid.html#af7f18e7e587a1394935196637bb2577b", null ], - [ "updateDensity", "classKatabatic_1_1GCellGrid.html#a9b3455dce10eb98d0496175dd586528c", null ], - [ "updateContacts", "classKatabatic_1_1GCellGrid.html#a032d6eb23f92e3a41a020d18c6bbc02d", null ], - [ "setDensityMode", "classKatabatic_1_1GCellGrid.html#a86899930041463cf80b713c3ca5b4834", null ], - [ "_postCreate", "classKatabatic_1_1GCellGrid.html#a3715b38135ca24745f610bebd3407c10", null ], - [ "_preDestroy", "classKatabatic_1_1GCellGrid.html#a7c13d9795eafd477994961f8a0d962d0", null ], - [ "create", "classKatabatic_1_1GCellGrid.html#a19a45b2e6c6b9ca8898b2fde035d1827", null ] -]; \ No newline at end of file diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1GCellGrid__inherit__graph.map b/deprecated/katabatic/doc/html/classKatabatic_1_1GCellGrid__inherit__graph.map deleted file mode 100644 index 0dbaf69f..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1GCellGrid__inherit__graph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1GCellGrid__inherit__graph.md5 b/deprecated/katabatic/doc/html/classKatabatic_1_1GCellGrid__inherit__graph.md5 deleted file mode 100644 index b6afbe7e..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1GCellGrid__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -ecba6a7e9d0d9cc640cd44f8e0ac7d6b \ No newline at end of file diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1GCellGrid__inherit__graph.png b/deprecated/katabatic/doc/html/classKatabatic_1_1GCellGrid__inherit__graph.png deleted file mode 100644 index ff60db22..00000000 Binary files a/deprecated/katabatic/doc/html/classKatabatic_1_1GCellGrid__inherit__graph.png and /dev/null differ diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1GCell_1_1CompareByDensity-members.html b/deprecated/katabatic/doc/html/classKatabatic_1_1GCell_1_1CompareByDensity-members.html deleted file mode 100644 index 2a896819..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1GCell_1_1CompareByDensity-members.html +++ /dev/null @@ -1,67 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - - -
    -
    -
    GCell::CompareByDensity Member List
    -
    -
    - -

    This is the complete list of members for GCell::CompareByDensity, including all inherited members.

    - - -
    CompareByDensity(unsigned int depth)GCell::CompareByDensity
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1GCell_1_1CompareByDensity.html b/deprecated/katabatic/doc/html/classKatabatic_1_1GCell_1_1CompareByDensity.html deleted file mode 100644 index e31a9c87..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1GCell_1_1CompareByDensity.html +++ /dev/null @@ -1,105 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - - -
    - -
    -
    GCell::CompareByDensity Class Reference
    -
    -
    - -

    GCell Density Comparison Functor. - More...

    - -

    Inherits binary_function< GCell *, GCell *, bool >.

    - - - - -

    -Public Member Functions

     CompareByDensity (unsigned int depth)
     
    -

    Detailed Description

    -

    GCell Density Comparison Functor.

    -

    A comparison functor for GCell, compare by density on layer depth.

    -

    Constructor & Destructor Documentation

    - -

    ◆ CompareByDensity()

    - -
    -
    - - - - - - - - -
    CompareByDensity (unsigned int depth)
    -
    -

    Build a density comparator for GCells on layer depth.

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1GCell_1_1CompareByDensity.js b/deprecated/katabatic/doc/html/classKatabatic_1_1GCell_1_1CompareByDensity.js deleted file mode 100644 index 71ba676f..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1GCell_1_1CompareByDensity.js +++ /dev/null @@ -1,8 +0,0 @@ -var classKatabatic_1_1GCell_1_1CompareByDensity = -[ - [ "Create", "classKatabatic_1_1AutoSegment.html#a51b3b772735a19220940ea591e9a2493a93479401ae71e13bd81626eb0b6c2d37", null ], - [ "Destroy", "classKatabatic_1_1AutoSegment.html#a51b3b772735a19220940ea591e9a2493a451f922f69eff4d41cf4db3177d77893", null ], - [ "Invalidate", "classKatabatic_1_1AutoSegment.html#a51b3b772735a19220940ea591e9a2493acb04a82caff5866ea5af427fa541987f", null ], - [ "Revalidate", "classKatabatic_1_1AutoSegment.html#a51b3b772735a19220940ea591e9a2493a3ec4aa32a02bef77f8e01ec4cea4cc72", null ], - [ "CompareByDensity", "classKatabatic_1_1GCell_1_1CompareByDensity.html#a3a51c3a473276097f23c5f58c6800f9b", null ] -]; \ No newline at end of file diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1GCell_1_1CompareByIndex-members.html b/deprecated/katabatic/doc/html/classKatabatic_1_1GCell_1_1CompareByIndex-members.html deleted file mode 100644 index 09f8ccac..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1GCell_1_1CompareByIndex-members.html +++ /dev/null @@ -1,66 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - - -
    -
    -
    GCell::CompareByIndex Member List
    -
    -
    - -

    This is the complete list of members for GCell::CompareByIndex, including all inherited members.

    - -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1GCell_1_1CompareByIndex.html b/deprecated/katabatic/doc/html/classKatabatic_1_1GCell_1_1CompareByIndex.html deleted file mode 100644 index 11d34b45..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1GCell_1_1CompareByIndex.html +++ /dev/null @@ -1,76 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - - -
    - -
    -
    GCell::CompareByIndex Class Reference
    -
    -
    - -

    GCell Index Comparison Functor. - More...

    - -

    Inherits binary_function< const GCell *, const GCell *, bool >.

    -

    Detailed Description

    -

    GCell Index Comparison Functor.

    -

    A comparison functor for GCell, compare by index (the linear index in the GCellGrid vector.

    -

    The documentation for this class was generated from the following file: -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1GCell_1_1Key-members.html b/deprecated/katabatic/doc/html/classKatabatic_1_1GCell_1_1Key-members.html deleted file mode 100644 index fc31e58f..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1GCell_1_1Key-members.html +++ /dev/null @@ -1,70 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - - -
    -
    -
    GCell::Key Member List
    -
    -
    - -

    This is the complete list of members for GCell::Key, including all inherited members.

    - - - - - -
    getDensity() constGCell::Keyinline
    getGCell() constGCell::Keyinline
    Key(GCell *, unsigned int depth)GCell::Keyinline
    update(unsigned int depth)GCell::Keyinline
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1GCell_1_1Key.html b/deprecated/katabatic/doc/html/classKatabatic_1_1GCell_1_1Key.html deleted file mode 100644 index 1cad282a..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1GCell_1_1Key.html +++ /dev/null @@ -1,215 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - - -
    - -
    -
    GCell::Key Class Reference
    -
    -
    - -

    GCell Key - Density Cache. - More...

    - - - - - - - - - - -

    -Public Member Functions

     Key (GCell *, unsigned int depth)
     
    float getDensity () const
     
    GCellgetGCell () const
     
    void update (unsigned int depth)
     
    -

    Detailed Description

    -

    GCell Key - Density Cache.

    -

    This class is used to create a GCell internal cache on density, mainly to be used by GCellDensitySet.

    -

    Constructor & Destructor Documentation

    - -

    ◆ Key()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    Key (GCellowner,
    unsigned int depth 
    )
    -
    -inline
    -
    -
    Parameters
    - - - -
    ownerThe GCell owning the key.
    depthThe layer depth of the density to use.
    -
    -
    -

    Key constructor, with an initial value for the cached density.

    - -
    -
    -

    Member Function Documentation

    - -

    ◆ getDensity()

    - -
    -
    - - - - - -
    - - - - - - - -
    float getDensity () const
    -
    -inline
    -
    -

    Returns: The value of the cached density.

    - -
    -
    - -

    ◆ getGCell()

    - -
    -
    - - - - - -
    - - - - - - - -
    GCell * getGCell () const
    -
    -inline
    -
    -

    Returns: The owning GCell.

    - -
    -
    - -

    ◆ update()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void update (unsigned int depth)
    -
    -inline
    -
    -

    Returns: Update the density

    - -

    Referenced by GCell::updateKey().

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1GCell_1_1Key.js b/deprecated/katabatic/doc/html/classKatabatic_1_1GCell_1_1Key.js deleted file mode 100644 index 2afbd818..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1GCell_1_1Key.js +++ /dev/null @@ -1,7 +0,0 @@ -var classKatabatic_1_1GCell_1_1Key = -[ - [ "Key", "classKatabatic_1_1GCell_1_1Key.html#a6efdb05badcc81d3d3013ce4730bbe6e", null ], - [ "getDensity", "classKatabatic_1_1GCell_1_1Key.html#a31deef556a6aa5e519d3c79bd9c383c0", null ], - [ "getGCell", "classKatabatic_1_1GCell_1_1Key.html#ab45ccfee0f781ec16c50672663d36141", null ], - [ "update", "classKatabatic_1_1GCell_1_1Key.html#a1b9cfb06a645d2b0d93024bc6ff82e9e", null ] -]; \ No newline at end of file diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1Grid-members.html b/deprecated/katabatic/doc/html/classKatabatic_1_1Grid-members.html deleted file mode 100644 index 3ae59741..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1Grid-members.html +++ /dev/null @@ -1,88 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - - -
    -
    -
    Grid< GCellT > Member List
    -
    -
    - -

    This is the complete list of members for Grid< GCellT >, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - - -
    BaseGrid(const Box &)BaseGridprotected
    destroy()BaseGridinline
    getBoundingBox() constBaseGridinline
    getColumn(unsigned int) constBaseGridinline
    getColumns() constBaseGridinline
    getGCell(unsigned int index) constGrid< GCellT >inline
    getGCell(const Point p) constGrid< GCellT >inline
    getGCell(const Point p1, const Point p2) constGrid< GCellT >inline
    getGCellDown(const GCellT *gcell) constGrid< GCellT >inline
    getGCellLeft(const GCellT *gcell) constGrid< GCellT >inline
    getGCellRight(const GCellT *gcell) constGrid< GCellT >inline
    getGCells()Grid< GCellT >inline
    getGCellsColumn(unsigned int column, unsigned int rowStart, unsigned int rowStop)Grid< GCellT >inline
    getGCellsRow(unsigned int row, unsigned int columnStart, unsigned int columnStop)Grid< GCellT >inline
    getGCellUp(const GCellT *gcell) constGrid< GCellT >inline
    getIndex(unsigned int c, unsigned int r) constBaseGridinline
    getRawSize() constBaseGridinline
    getRow(unsigned int) constBaseGridinline
    getRows() constBaseGridinline
    getXGrads() constBaseGridinline
    getYGrads() constBaseGridinline
    Grid(const Box &)Grid< GCellT >inlineprotected
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1Grid.html b/deprecated/katabatic/doc/html/classKatabatic_1_1Grid.html deleted file mode 100644 index 486ffd5c..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1Grid.html +++ /dev/null @@ -1,495 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - - -
    - -
    -
    Grid< GCellT > Class Template Reference
    -
    -
    - -

    Template Class for Regular Grid. - More...

    -
    -Inheritance diagram for Grid< GCellT >:
    -
    -
    Inheritance graph
    - - - -
    [legend]
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    GCellT * getGCell (unsigned int index) const
     
    GCellT * getGCell (const Point p) const
     
    GCellT * getGCell (const Point p1, const Point p2) const
     
    GCellT * getGCellLeft (const GCellT *gcell) const
     
    GCellT * getGCellRight (const GCellT *gcell) const
     
    GCellT * getGCellUp (const GCellT *gcell) const
     
    GCellT * getGCellDown (const GCellT *gcell) const
     
    GenericCollection< GCellT * > getGCells ()
     
    GenericCollection< GCellT * > getGCellsColumn (unsigned int column, unsigned int rowStart, unsigned int rowStop)
     
    GenericCollection< GCellT * > getGCellsRow (unsigned int row, unsigned int columnStart, unsigned int columnStop)
     
    - Public Member Functions inherited from BaseGrid
    void destroy ()
     
    const BoxgetBoundingBox () const
     
    unsigned int getColumns () const
     
    unsigned int getRows () const
     
    unsigned int getRawSize () const
     
    unsigned int getIndex (unsigned int c, unsigned int r) const
     
    unsigned int getRow (unsigned int) const
     
    unsigned int getColumn (unsigned int) const
     
    const AxisgetXGrads () const
     
    const AxisgetYGrads () const
     
    - - - - - - -

    -Protected Member Functions

     Grid (const Box &)
     
    - Protected Member Functions inherited from BaseGrid
     BaseGrid (const Box &)
     
    -

    Detailed Description

    -

    template<typename GCellT>
    -class Katabatic::Grid< GCellT >

    - -

    Template Class for Regular Grid.

    -

    Contains all general purpose methods depending on the GCell type and geometrical computations. The internal storage is still not implemented in this class.

    -

    Constructor & Destructor Documentation

    - -

    ◆ Grid()

    - -
    -
    - - - - - -
    - - - - - - - - -
    Grid (const Boxbb)
    -
    -inlineprotected
    -
    -

    Grid constructor.

    - -
    -
    -

    Member Function Documentation

    - -

    ◆ getGCell() [1/3]

    - -
    -
    - - - - - -
    - - - - - - - - -
    CGellT * getGCell (unsigned int index) const
    -
    -inline
    -
    -

    Returns: The grid object at linear index index in the vector. If index is out of bounds, return NULL.

    - -

    Referenced by GCellTopology::doRp_AccessPad(), GCellTopology::doRp_AutoContacts(), and anonymous_namespace{LoadGrByNet.cpp}::singleGCell().

    - -
    -
    - -

    ◆ getGCell() [2/3]

    - -
    -
    - - - - - -
    - - - - - - - - -
    CGellT * getGCell (const Point p) const
    -
    -inline
    -
    -

    Returns: The grid object which is under position p.

    - -
    -
    - -

    ◆ getGCell() [3/3]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    CGellT * getGCell (const Point p1,
    const Point p2 
    ) const
    -
    -inline
    -
    -

    Returns: The grid object which is under position p1 and p2. Not very clear though.

    - -
    -
    - -

    ◆ getGCellLeft()

    - -
    -
    - - - - - -
    - - - - - - - - -
    CGellT * getGCellLeft (const GCellT * gcell) const
    -
    -inline
    -
    -

    Returns: The left neighbor of gcell, NULL if it is the leftmost one.

    - -

    Referenced by GCell::getLeft().

    - -
    -
    - -

    ◆ getGCellRight()

    - -
    -
    - - - - - -
    - - - - - - - - -
    CGellT * getGCellRight (const GCellT * gcell) const
    -
    -inline
    -
    -

    Returns: The rigth neighbor of gcell, NULL if it is the rightmost one.

    - -

    Referenced by GCell::getRight().

    - -
    -
    - -

    ◆ getGCellUp()

    - -
    -
    - - - - - -
    - - - - - - - - -
    CGellT * getGCellUp (const GCellT * gcell) const
    -
    -inline
    -
    -

    Returns: The upper neighbor of gcell, NULL if it is the uppermost one.

    - -

    Referenced by GCell::getUp().

    - -
    -
    - -

    ◆ getGCellDown()

    - -
    -
    - - - - - -
    - - - - - - - - -
    CGellT * getGCellDown (const GCellT * gcell) const
    -
    -inline
    -
    -

    Returns: The down neighbor of gcell, NULL if it is the downmost one.

    - -

    Referenced by GCell::getDown().

    - -
    -
    - -

    ◆ getGCells()

    - -
    -
    - - - - - -
    - - - - - - - -
    GenericCollection< CGellT * > getGCells ()
    -
    -inline
    -
    -

    Returns: A GCellT Hurricane collection built upon the linear GCellT vector of the grid.

    - -
    -
    - -

    ◆ getGCellsColumn()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    GenericCollection< CGellT * > getGCellsColumn (unsigned int column,
    unsigned int rowStart,
    unsigned int rowStop 
    )
    -
    -inline
    -
    -

    Returns: A GCellT Hurricane collection that contains the part of column starting from rowStart to rowStop inclusive.

    - -

    Referenced by KatabaticEngine::createDetailedGrid().

    - -
    -
    - -

    ◆ getGCellsRow()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    GenericCollection< CGellT * > getGCellsRow (unsigned int row,
    unsigned int columnStart,
    unsigned int columnStop 
    )
    -
    -inline
    -
    -

    Returns: A GCellT Hurricane collection that contains the part of row starting from columnStart to columnStop inclusive.

    - -

    Referenced by KatabaticEngine::createDetailedGrid().

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1Grid.js b/deprecated/katabatic/doc/html/classKatabatic_1_1Grid.js deleted file mode 100644 index 96f349a4..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1Grid.js +++ /dev/null @@ -1,14 +0,0 @@ -var classKatabatic_1_1Grid = -[ - [ "Grid", "classKatabatic_1_1Grid.html#a1b772cc784f7110caca47acb76dcec62", null ], - [ "getGCell", "classKatabatic_1_1Grid.html#ae9a2132d74bd6a15002a3917f57516ae", null ], - [ "getGCell", "classKatabatic_1_1Grid.html#a40a8afc66df78d74cb080eacfe1322e2", null ], - [ "getGCell", "classKatabatic_1_1Grid.html#a1295cff651e7319a380bde52deddd360", null ], - [ "getGCellLeft", "classKatabatic_1_1Grid.html#a2ae58a243a3f62f0f28e4e2b4b2bb308", null ], - [ "getGCellRight", "classKatabatic_1_1Grid.html#a71483ce8b6a02771e89b410711179740", null ], - [ "getGCellUp", "classKatabatic_1_1Grid.html#a6af56d56284dd6fde6e3a6c781cb4faf", null ], - [ "getGCellDown", "classKatabatic_1_1Grid.html#a594f0986971454bc9655d9943126ae8c", null ], - [ "getGCells", "classKatabatic_1_1Grid.html#a24b4ab5b46b56ee744cf4c368a114d95", null ], - [ "getGCellsColumn", "classKatabatic_1_1Grid.html#aa8d0393323104d48c089a8429b254689", null ], - [ "getGCellsRow", "classKatabatic_1_1Grid.html#a35e2075302cdb696945f05c5bcc817a0", null ] -]; \ No newline at end of file diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1Grid__inherit__graph.map b/deprecated/katabatic/doc/html/classKatabatic_1_1Grid__inherit__graph.map deleted file mode 100644 index cebad7dc..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1Grid__inherit__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1Grid__inherit__graph.md5 b/deprecated/katabatic/doc/html/classKatabatic_1_1Grid__inherit__graph.md5 deleted file mode 100644 index 94c7a6a0..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1Grid__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -00077d5553bae08e57c5251ebbf964ee \ No newline at end of file diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1Grid__inherit__graph.png b/deprecated/katabatic/doc/html/classKatabatic_1_1Grid__inherit__graph.png deleted file mode 100644 index cd47b0f6..00000000 Binary files a/deprecated/katabatic/doc/html/classKatabatic_1_1Grid__inherit__graph.png and /dev/null differ diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1KatabaticEngine-members.html b/deprecated/katabatic/doc/html/classKatabatic_1_1KatabaticEngine-members.html deleted file mode 100644 index f29412b9..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1KatabaticEngine-members.html +++ /dev/null @@ -1,123 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - - -
    -
    -
    KatabaticEngine Member List
    -
    -
    - -

    This is the complete list of members for KatabaticEngine, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    clearProperties()DBo
    computeNetConstraints(Net *)KatabaticEngine
    create(Cell *)KatabaticEnginestatic
    createDetailedGrid()KatabaticEnginevirtual
    destroy()DBovirtual
    destroyAll()ToolEnginestatic
    doDestroyBaseContact() constKatabaticEngineinline
    doDestroyBaseSegment() constKatabaticEngineinline
    doDestroyTool() constKatabaticEngineinline
    doWarnOnGCellOverload() constKatabaticEngineinline
    finalizeLayout()KatabaticEnginevirtual
    CRL::ToolEngine::get(const Cell *cell)ToolEnginestatic
    CRL::ToolEngine::get(const Cell *cell, const Name &name)ToolEnginestatic
    getChipTools() constKatabaticEngineinline
    getConfiguration()KatabaticEnginevirtual
    getContactLayer(size_t depth) constKatabaticEngineinline
    getExtensionCap() constKatabaticEngineinline
    getFlags(unsigned int mask) constKatabaticEngineinline
    getGCellGrid() constKatabaticEngineinline
    getGlobalThreshold() constKatabaticEngineinline
    getKatabaticConfiguration()KatabaticEngineinline
    getLayerGauge(size_t depth) constKatabaticEngineinline
    getName() constKatabaticEnginevirtual
    getProperties() constDBo
    getProperty(const Name &) constDBo
    getRoutingGauge() constKatabaticEngineinline
    getRoutingLayer(size_t depth) constKatabaticEngineinline
    getRoutingNets() constKatabaticEngineinline
    getSaturateRatio() constKatabaticEngineinline
    getSaturateRp() constKatabaticEngineinline
    getState() constKatabaticEngineinline
    hasProperty() constDBo
    isChip() constKatabaticEngineinline
    isGMetal(const Layer *) constKatabaticEngineinline
    isInDemoMode() constKatabaticEngineinline
    layerAssign(unsigned int method)KatabaticEngine
    loadGlobalRouting(unsigned int method)KatabaticEnginevirtual
    makePowerRails()KatabaticEngine
    moveUpNetTrunk(AutoSegment *, set< Net *> &globalNets, GCell::SetIndex &invalidateds)KatabaticEngine
    NetSet typedefKatabaticEngine
    printMeasures(const string &) constKatabaticEngine
    put(Property *)DBo
    refresh(unsigned int flags=KbOpenSession)KatabaticEngine
    remove(Property *)DBo
    removeProperty(const Name &)DBo
    setFlags(unsigned int)KatabaticEngineinline
    setGlobalThreshold(DbU::Unit)KatabaticEngineinline
    setSaturateRatio(float)KatabaticEngineinline
    setSaturateRp(size_t)KatabaticEngineinline
    setState(EngineState state)KatabaticEngineinline
    slackenBlockIos(Instance *core)KatabaticEngine
    slackenBorder(Box bb, Layer::Mask, unsigned int flags)KatabaticEngine
    staticGetName()KatabaticEnginestatic
    toOptimals(Net *)KatabaticEngine
    unsetFlags(unsigned int)KatabaticEngineinline
    xmlWriteGCellGrid(ostream &)KatabaticEngine
    xmlWriteGCellGrid(const string &)KatabaticEngine
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1KatabaticEngine.html b/deprecated/katabatic/doc/html/classKatabatic_1_1KatabaticEngine.html deleted file mode 100644 index 38e009fc..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1KatabaticEngine.html +++ /dev/null @@ -1,1438 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - - - -
    - -

    The Katabatic Tool. - More...

    -
    -Inheritance diagram for KatabaticEngine:
    -
    -
    Inheritance graph
    - - - - -
    [legend]
    - - - - -

    -Public Types

    typedef set< Net *, NetCompareByName > NetSet
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    bool isGMetal (const Layer *) const
     
    bool isChip () const
     
    bool isInDemoMode () const
     
    bool doWarnOnGCellOverload () const
     
    bool doDestroyBaseContact () const
     
    bool doDestroyBaseSegment () const
     
    bool doDestroyTool () const
     
    virtual const NamegetName () const
     
    EngineState getState () const
     
    unsigned int getFlags (unsigned int mask) const
     
    Configuration * getKatabaticConfiguration ()
     
    virtual Configuration * getConfiguration ()
     
    RoutingGaugegetRoutingGauge () const
     
    RoutingLayerGaugegetLayerGauge (size_t depth) const
     
    const LayergetRoutingLayer (size_t depth) const
     
    LayergetContactLayer (size_t depth) const
     
    GCellGridgetGCellGrid () const
     
    const NetSetgetRoutingNets () const
     
    DbU::Unit getGlobalThreshold () const
     
    float getSaturateRatio () const
     
    size_t getSaturateRp () const
     
    DbU::Unit getExtensionCap () const
     
    const ChipToolsgetChipTools () const
     
    void xmlWriteGCellGrid (ostream &)
     
    void xmlWriteGCellGrid (const string &)
     
    void setState (EngineState state)
     
    void setFlags (unsigned int)
     
    void unsetFlags (unsigned int)
     
    void setGlobalThreshold (DbU::Unit)
     
    void setSaturateRatio (float)
     
    void setSaturateRp (size_t)
     
    void printMeasures (const string &) const
     
    void refresh (unsigned int flags=KbOpenSession)
     
    virtual void createDetailedGrid ()
     
    void makePowerRails ()
     
    virtual void loadGlobalRouting (unsigned int method)
     
    void slackenBorder (Box bb, Layer::Mask, unsigned int flags)
     
    void slackenBlockIos (Instance *core)
     
    bool moveUpNetTrunk (AutoSegment *, set< Net *> &globalNets, GCell::SetIndex &invalidateds)
     
    void layerAssign (unsigned int method)
     
    void computeNetConstraints (Net *)
     
    void toOptimals (Net *)
     
    virtual void finalizeLayout ()
     
    - - - - - -

    -Static Public Member Functions

    static KatabaticEnginecreate (Cell *)
     
    static const NamestaticGetName ()
     
    -

    Detailed Description

    -

    The Katabatic Tool.

    -

    -States of KatabaticEngine

    -

    During it's lifecycle, the engine go through a serie of states. It only can go forward between states.

      -
    • EngineCreation : just after C++ object creation until the global routing is loaded.
    • -
    • EngineGlobalLoaded : after the global routing has been done. This state must be set by an external tool, Katabatic cannot know by itself when the global routing has been done (see Kite).
    • -
    • EngineActive : after the global routing has been converted into the Katabatic data structure. At this point the tool is ready to run.
    • -
    • EngineDriving : during the stage of stripping all the decorations the tool has added over the Hurricane data structure (mostly: AutoContact & AutoSegment).
    • -
    • EngineGutted : after the tool decorations have been removed. The tool is now useless and can only be destroyed.
    • -
    • EnginePreDestroying : this special state is reached when going straight from EngineActive to the destructor, that is, skipping the EngineDriving state. That means we do not want to save whatever routing has been done. In that case, not only the tool decorations are destroyeds, but also the Hurricane data-structures they relies on (Contact, Segments).
    • -
    -

    -KatabaticEngine Implementation Details

    -

    Due to the size of the code and the fact that the main body of some methods do not need to be present in the class, the implementation of KatabaticEngine is split in several files. The list below summarize them:

      -
    • KatabaticEngine.cpp : the core of the class, methods that really need their bodies here.
    • -
    • PowerRails.cpp : utilities to construct an abstract from all the power rails through the hierarchy.
    • -
    • LayerAssign.cpp : layer assignement related methods and helpers.
    • -
    • LoadGrByNet.cpp : global routing loader, transform global routing into Katabatic data-structure.
    • -
    • NetConstraints.cpp : compute the topological constraints of all AutoSegment/AutoContact of a Net.
    • -
    • NetOptimals.cpp : compute the optimal positions of all AutoSegment of a Net.
    • -
    -

    Member Typedef Documentation

    - -

    ◆ NetSet

    - -
    -
    - - - - -
    set< Net *, NetCompareByName > NetSet
    -
    -

    Set of Net to be routed, alphabetically sorteds.

    - -
    -
    -

    Member Function Documentation

    - -

    ◆ create()

    - -
    -
    - - - - - -
    - - - - - - - - -
    KatabaticEngine * create (Cellcell)
    -
    -static
    -
    -

    Create a KatabaticEngine on cell.

    - -
    -
    - -

    ◆ staticGetName()

    - -
    -
    - - - - - -
    - - - - - - - -
    const Name & staticGetName ()
    -
    -static
    -
    -

    Returns: The unique string identifier for the KatabaticEngine class of ToolEngine.

    - -
    -
    - -

    ◆ isGMetal()

    - -
    -
    - - - - - -
    - - - - - - - - -
    bool isGMetal (const Layerlayer) const
    -
    -inline
    -
    -

    Returns: true if layer is one of the special (fake) metals used to build the global routing.

    - -

    Referenced by AutoSegment::create().

    - -
    -
    - -

    ◆ isChip()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool isChip () const
    -
    -inline
    -
    -

    Returns: true if the hierarchy top-level of the Cell matches the one of a complete design (i.e. pads and one core instance).

    - -

    References ChipTools::isChip().

    - -
    -
    - -

    ◆ isInDemoMode()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool isInDemoMode () const
    -
    -inline
    -
    -

    Returns: true if the tool is in demo mode, that is suppress almost all warning and debug messages.

    - -

    Referenced by Session::isInDemoMode().

    - -
    -
    - -

    ◆ doWarnOnGCellOverload()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool doWarnOnGCellOverload () const
    -
    -inline
    -
    -

    Returns: true if the tool should issue a warning when a GCell is overloaded (overload could be transient).

    - -

    Referenced by Session::doWarnGCellOverload().

    - -
    -
    - -

    ◆ doDestroyBaseContact()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool doDestroyBaseContact () const
    -
    -inline
    -
    -

    Returns: true if the EngineDestroyBaseContact is set, meaning that when an AutoContact is destroyed, the Contact it decorates is destroyed altogether.

    - -
    -
    - -

    ◆ doDestroyBaseSegment()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool doDestroyBaseSegment () const
    -
    -inline
    -
    -

    Returns: true if the EngineDestroyBaseSegment is set, meaning that when an AutoSegment is destroyed, the Segment it decorates is destroyed altogether.

    - -
    -
    - -

    ◆ doDestroyTool()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool doDestroyTool () const
    -
    -inline
    -
    -

    Returns: true if the tool state is beyond EngineStateGutted, that is, only waits for destroy() to be called.

    - -

    References Katabatic::EngineGutted.

    - -
    -
    - -

    ◆ getName()

    - -
    -
    - - - - - -
    - - - - - - - -
    const Name & getName () const
    -
    -virtual
    -
    -

    Returns: The unique string identifier for the KatabaticEngine class of ToolEngine.

    - -

    Implements ToolEngine.

    - -
    -
    - -

    ◆ getState()

    - -
    -
    - - - - - -
    - - - - - - - -
    EngineState getState () const
    -
    -inline
    -
    -

    Returns: The state the tool is currently in.

    - -
    -
    - -

    ◆ getFlags()

    - -
    -
    - - - - - -
    - - - - - - - - -
    unsigned int getFlags (unsigned int mask) const
    -
    -inline
    -
    -

    Returns: The anded combination of the tool flags and mask.

    - -
    -
    - -

    ◆ getKatabaticConfiguration()

    - -
    -
    - - - - - -
    - - - - - - - -
    Configuration * getKatabaticConfiguration ()
    -
    -inline
    -
    -

    Returns: The Configuration of Katabatic. In this class it is redundant with getConfiguration(), but may be useful in derived classes.

    - -
    -
    - -

    ◆ getConfiguration()

    - -
    -
    - - - - - -
    - - - - - - - -
    Configuration * getConfiguration ()
    -
    -virtual
    -
    -

    Returns: The Configuration of the current ToolEngine.

    - -
    -
    - -

    ◆ getRoutingGauge()

    - -
    -
    - - - - - -
    - - - - - - - -
    RoutingGauge * getRoutingGauge () const
    -
    -inline
    -
    -

    Returns: The RoutingGauge (Configuration shortcut).

    - -
    -
    - -

    ◆ getLayerGauge()

    - -
    -
    - - - - - -
    - - - - - - - - -
    RoutingLayerGauge * getLayerGauge (size_t depth) const
    -
    -inline
    -
    -

    Returns: The RoutingLayerGauge associated to depth (Configuration shortcut).

    - -
    -
    - -

    ◆ getRoutingLayer()

    - -
    -
    - - - - - -
    - - - - - - - - -
    const Layer * getRoutingLayer (size_t depth) const
    -
    -inline
    -
    -

    Returns: The routing Layer associated to depth (Configuration shortcut).

    - -
    -
    - -

    ◆ getContactLayer()

    - -
    -
    - - - - - -
    - - - - - - - - -
    Layer * getContactLayer (size_t depth) const
    -
    -inline
    -
    -

    Returns: The contact Layer associated to depth (Configuration shortcut).

    - -
    -
    - -

    ◆ getGCellGrid()

    - -
    -
    - - - - - -
    - - - - - - - -
    GCellGrid * getGCellGrid () const
    -
    -inline
    -
    -
    - -

    ◆ getRoutingNets()

    - -
    -
    - - - - - -
    - - - - - - - -
    const NetSet & getRoutingNets () const
    -
    -inline
    -
    -

    Returns: The set of nets to be routeds.

    - -
    -
    - -

    ◆ getGlobalThreshold()

    - -
    -
    - - - - - -
    - - - - - - - -
    DbU::Unit getGlobalThreshold () const
    -
    -inline
    -
    -

    Returns: The length above which a global wire is moved up in the layer assignment stage (Configuration shortcut).

    - -
    -
    - -

    ◆ getSaturateRatio()

    - -
    -
    - - - - - -
    - - - - - - - -
    float getSaturateRatio () const
    -
    -inline
    -
    -

    Returns: The ratio above which a GCell is considered to be saturated (Configuration shortcut).

    - -

    Referenced by Session::getSaturateRatio().

    - -
    -
    - -

    ◆ getSaturateRp()

    - -
    -
    - - - - - -
    - - - - - - - -
    size_t getSaturateRp () const
    -
    -inline
    -
    -

    Returns: The number of RoutingPad above which a GCell is saturated, causing extras global segments to be moved up. (Configuration shortcut).

    - -

    Referenced by Session::getSaturateRp().

    - -
    -
    - -

    ◆ getExtensionCap()

    - -
    -
    - - - - - -
    - - - - - - - -
    DbU::Unit getExtensionCap () const
    -
    -inline
    -
    -

    Returns: The wires extension cap, same for all layers for the time beeing (Configuration shortcut).

    - -
    -
    - -

    ◆ getChipTools()

    - -
    -
    - - - - - -
    - - - - - - - -
    const ChipTools & getChipTools () const
    -
    -inline
    -
    -

    Returns: The chip tools (for whole designs).

    - -

    Referenced by KatabaticEngine::createDetailedGrid().

    - -
    -
    - -

    ◆ xmlWriteGCellGrid() [1/2]

    - -
    -
    - - - - - - - - -
    void xmlWriteGCellGrid (ostream & o)
    -
    -

    Write in a stream all informations on the GCells in XML format.

    - -

    Referenced by KatabaticEngine::xmlWriteGCellGrid().

    - -
    -
    - -

    ◆ xmlWriteGCellGrid() [2/2]

    - -
    -
    - - - - - - - - -
    void xmlWriteGCellGrid (const string & fileName)
    -
    -

    Write in a file all informations on the GCells in XML format.

    - -

    References KatabaticEngine::xmlWriteGCellGrid().

    - -
    -
    - -

    ◆ setState()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void setState (EngineState state)
    -
    -inline
    -
    -

    Force the state of the tool. Must be used with caution, as no sanity checks are performeds. This method is normally invoked from inside the KatabaticEngine various methods.

    - -
    -
    - -

    ◆ setFlags()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void setFlags (unsigned int flags)
    -
    -inline
    -
    -

    Set the flags given in flags.

    - -

    Referenced by Session::setKatabaticFlags().

    - -
    -
    - -

    ◆ unsetFlags()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void unsetFlags (unsigned int flags)
    -
    -inline
    -
    -

    Reset the flags given in flags.

    - -
    -
    - -

    ◆ setGlobalThreshold()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void setGlobalThreshold (DbU::Unit threshold)
    -
    -inline
    -
    -

    (Configuration shortcut).

    - -
    -
    - -

    ◆ setSaturateRatio()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void setSaturateRatio (float ratio)
    -
    -inline
    -
    -

    (Configuration shortcut).

    - -
    -
    - -

    ◆ setSaturateRp()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void setSaturateRp (size_t threshold)
    -
    -inline
    -
    -

    (Configuration shortcut).

    - -
    -
    - -

    ◆ printMeasures()

    - -
    -
    - - - - - - - - -
    void printMeasures (const string & tag) const
    -
    -

    Print memory & time measurement on ``cmess1``. If tag is not empty, also adds the measurement to the internal table (with tag as label).

    - -

    Referenced by KatabaticEngine::finalizeLayout().

    - -
    -
    - -

    ◆ refresh()

    - -
    -
    - - - - - - - - -
    void refresh (unsigned int flags = KbOpenSession)
    -
    -

    In case the tool is associated with a graphic display, trigger a full redraw of the Cell. Slow the router but allow to see work in progress... If flags do not contains KbOpenSession the refresh operation will not be enclosed inside it's own session. This assumes that a session is already opened.

    - -

    References GCellGrid::updateContacts().

    - -
    -
    - -

    ◆ createDetailedGrid()

    - - - -

    ◆ makePowerRails()

    - -
    -
    - - - - - - - -
    void makePowerRails ()
    -
    -

    Detect all the aligned segments of same width that compose power rails, unificate them and copy them at the design top level.

    - -
    -
    - -

    ◆ loadGlobalRouting()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void loadGlobalRouting (unsigned int method)
    -
    -virtual
    -
    -
    Parameters
    - - - -
    methodthe loading algorithm
    netsthe set of nets to route.
    -
    -
    -

    Convert the global routing into the initial detailed routing. For the time beeing, only one loading algorithm is available: net by net (EngineLoadGrByNet). Only Net given in nets are routeds. If nets is empty then all ordinary nets are routeds. In either cases the set of nets to route is pruned from any power, ground or clock signals.

    -
    Remark: The tool state must be EngineGlobalLoaded before calling this method
    and will be set to EngineActive on exit.
    - -

    References Katabatic::EngineActive, and Katabatic::EngineGlobalLoaded.

    - -
    -
    - -

    ◆ slackenBorder()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void slackenBorder (Box bb,
    Layer::Mask mask,
    unsigned int flags 
    )
    -
    -
    Parameters
    - - - - -
    bbThe bounding box, defines the edges.
    maskConsider only layers that are fully included in that mask.
    flagsConsider only segment in that direction.
    -
    -
    -

    Perform a preventive break on all global segments going through the vertical left and right edges of the bb box. The set of global segments to be broken could be further restricted using mask and flags.

    -

    The Semantic of flags is not clear, must review the code more closely.

    - -

    References Box::getXMax(), Box::getXMin(), Box::getYMax(), and Box::getYMin().

    - -
    -
    - -

    ◆ slackenBlockIos()

    - -
    -
    - - - - - - - - -
    void slackenBlockIos (Instancecore)
    -
    -

    Perform a preventive break on horizontal segments in the GCell immediatly outside the instance core area in the routing layer of index 1.

    -

    This method is too much hardwired to the SxLib gauge. It's effect is to break all METAL2 outside the core (in a chip).

    - -

    References Entity::getBoundingBox(), Instance::getName(), Constant::Horizontal, and Box::inflate().

    - -
    -
    - -

    ◆ moveUpNetTrunk()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    bool moveUpNetTrunk (AutoSegmentseed,
    set< Net *> & globalNets,
    GCell::SetIndexinvalidateds 
    )
    -
    -
    Parameters
    - - - - -
    seedThe AutoSegment to take the net from.
    globalNetsThe set of nets that has been moved up.
    invalidatedsThe set of GCells that have been invalidated. Returns: true if the net trunk have been moved up.
    -
    -
    -

    Try to move up a whole net trunk. The net is supplied through the seed argument (the segment that triggers the move). If the net is actually moved up, it is added to globalNets and all GCells that have been invalidateds are added to invalidateds.

    -

    An individual AutoSegment of the net is moved up if it's length is greater that 150 lambdas, that is, three times the side of a GCell. This is hard-wired and should be parametrized in the future.

    - -
    -
    - -

    ◆ layerAssign()

    - -
    -
    - - - - - - - - -
    void layerAssign (unsigned int method)
    -
    -

    Perform the layer assignment. The global routing loading stage uses only the two bottom most layers, this method spread them on all the availables routing layers, according to GCell and RoutingPad density criterions.

    -

    Two algorithms are availables:

      -
    • EngineLayerAssignByLength : the global wires are moved up one by one.
    • -
    • EngineLayerAssignByTrunk : if one global wire of a net is to be moved up, then all the global trunk of the net is moved along. This methods gives the best results for now.
    • -
    - -
    -
    - -

    ◆ computeNetConstraints()

    - -
    -
    - - - - - - - - -
    void computeNetConstraints (Netnet)
    -
    -

    Compute the box constraints on AutoContacts (and therefore those applied to AutoSegments). Constraints comes from AutoContacts anchoreds on RoutingPads and transmitted through AutoContactHTee or AutoContactVTee. Constraints are applied to all AutoContacts of an aligned set.

    -
    Remark: The net must have been canonized before this function to be called.
    - -
    -
    - -

    ◆ toOptimals()

    - -
    -
    - - - - - - - - -
    void toOptimals (Netnet)
    -
    -

    Move all AutoSegment of net so that their axis are inside their optimals interval. If a AutoSegment is already inside the interval is not moved, otherwise it is put on the nearest bound of the optimal interval.

    - -
    -
    - -

    ◆ finalizeLayout()

    - -
    -
    - - - - - -
    - - - - - - - -
    void finalizeLayout ()
    -
    -virtual
    -
    -

    Transform the Katabatic wires into the Hurricane data-structure. Mostly by removing the AutoSegment/AutoContact without removing their Hurricane conterparts. May also fill gaps that may have appeared.

    -
    Remark: The tool state must be EngineActive before calling this method
    and will be set to EngineGutted on exit.
    - -

    References Katabatic::EngineDriving, Katabatic::EngineGutted, and KatabaticEngine::printMeasures().

    - -
    -
    -
    The documentation for this class was generated from the following files:
      -
    • KatabaticEngine.h
    • -
    • ChipTools.cpp
    • -
    • LoadGrByNet.cpp
    • -
    • KatabaticEngine.cpp
    • -
    • KatabaticEngine.dox
    • -
    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1KatabaticEngine.js b/deprecated/katabatic/doc/html/classKatabatic_1_1KatabaticEngine.js deleted file mode 100644 index a478b653..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1KatabaticEngine.js +++ /dev/null @@ -1,51 +0,0 @@ -var classKatabatic_1_1KatabaticEngine = -[ - [ "NetSet", "classKatabatic_1_1KatabaticEngine.html#a92ed88f9aecd2f195089c4029fa8bcc7", null ], - [ "create", "classKatabatic_1_1KatabaticEngine.html#ab877a64c314024602cfb04631ebfbfc4", null ], - [ "staticGetName", "classKatabatic_1_1KatabaticEngine.html#a802eee6265da8d536db52d412f8a4afd", null ], - [ "isGMetal", "classKatabatic_1_1KatabaticEngine.html#a2f4d1f8df0e5dc9c7ad9ec6f31438790", null ], - [ "isChip", "classKatabatic_1_1KatabaticEngine.html#a390b4da0f5d92dc7586dbb35fb33f105", null ], - [ "isInDemoMode", "classKatabatic_1_1KatabaticEngine.html#af3c979bc4832c7e9e9b5a1e749e038ff", null ], - [ "doWarnOnGCellOverload", "classKatabatic_1_1KatabaticEngine.html#aef1c27657e9afe69d832ec7c31c546a8", null ], - [ "doDestroyBaseContact", "classKatabatic_1_1KatabaticEngine.html#a6ab936a51a682d97d3885fc2805531ce", null ], - [ "doDestroyBaseSegment", "classKatabatic_1_1KatabaticEngine.html#a217f87950b30061709e80f5fce58b5a8", null ], - [ "doDestroyTool", "classKatabatic_1_1KatabaticEngine.html#ae979c1db2aa0d919e58d2d7e1b246c5e", null ], - [ "getName", "classKatabatic_1_1KatabaticEngine.html#a5e23c46b801d3049b349b68774a0d298", null ], - [ "getState", "classKatabatic_1_1KatabaticEngine.html#aed8728c9a7c5c82507eb717490e814d6", null ], - [ "getFlags", "classKatabatic_1_1KatabaticEngine.html#af7b5043686805e83dbbd84fd687e25be", null ], - [ "getKatabaticConfiguration", "classKatabatic_1_1KatabaticEngine.html#adccd6ceec2c68234d3a824ad7ae3954e", null ], - [ "getConfiguration", "classKatabatic_1_1KatabaticEngine.html#a9a7fbadfe526875680f698c76adfb128", null ], - [ "getRoutingGauge", "classKatabatic_1_1KatabaticEngine.html#ae03bde33b07beff91870e3922696ff8f", null ], - [ "getLayerGauge", "classKatabatic_1_1KatabaticEngine.html#a93f9c18075b02f7fd7ba03d951f6be56", null ], - [ "getRoutingLayer", "classKatabatic_1_1KatabaticEngine.html#a3dcc03dc20b0bdca03772901316ba6b3", null ], - [ "getContactLayer", "classKatabatic_1_1KatabaticEngine.html#a2b7ddb281e0b785b5d28d284bdd1f77c", null ], - [ "getGCellGrid", "classKatabatic_1_1KatabaticEngine.html#a0702328522e94ca9705222cd5b9e9c6d", null ], - [ "getRoutingNets", "classKatabatic_1_1KatabaticEngine.html#a7b752887b598b0244207f36eb13b9149", null ], - [ "getGlobalThreshold", "classKatabatic_1_1KatabaticEngine.html#ae375ec4d6fe84babba01c056a32d5a83", null ], - [ "getSaturateRatio", "classKatabatic_1_1KatabaticEngine.html#a1563b5789b3cd5db8dc6fc1cc069dc82", null ], - [ "getSaturateRp", "classKatabatic_1_1KatabaticEngine.html#a929aa539d03f19c7edbf6b34d7ec30a3", null ], - [ "getExtensionCap", "classKatabatic_1_1KatabaticEngine.html#a7b6417a63eaf4f4d3f423dbdb8c13302", null ], - [ "getChipTools", "classKatabatic_1_1KatabaticEngine.html#a53565592ca14ec9f302d068327d846c8", null ], - [ "xmlWriteGCellGrid", "classKatabatic_1_1KatabaticEngine.html#aecbe8bdcc61024a7539de3ea932c5e06", null ], - [ "xmlWriteGCellGrid", "classKatabatic_1_1KatabaticEngine.html#a78394ac380a0fa462f268dcc2becc50e", null ], - [ "setState", "classKatabatic_1_1KatabaticEngine.html#a2391b9bfcb773398b9661b5ac0ef1a30", null ], - [ "setFlags", "classKatabatic_1_1KatabaticEngine.html#aeb14f94914af58657a0dc2f50ec98df5", null ], - [ "unsetFlags", "classKatabatic_1_1KatabaticEngine.html#a1a6fac115cb81db48e3ac9ffa0721bb5", null ], - [ "setGlobalThreshold", "classKatabatic_1_1KatabaticEngine.html#a1bd1e0104b73d4c558b0e121002796a6", null ], - [ "setSaturateRatio", "classKatabatic_1_1KatabaticEngine.html#ac2b780e06975ce8a0d6ca96f20cb971f", null ], - [ "setSaturateRp", "classKatabatic_1_1KatabaticEngine.html#ade227e828b8c8fbfce478e353ca3ca59", null ], - [ "startMeasures", "classKatabatic_1_1KatabaticEngine.html#a63c6311e54698ab8a6a8cd2ea24745b1", null ], - [ "stopMeasures", "classKatabatic_1_1KatabaticEngine.html#a5f70cc5ff72b0373b59da7c982863b9b", null ], - [ "printMeasures", "classKatabatic_1_1KatabaticEngine.html#a1b196d124bb66595a760ccc9b901d78b", null ], - [ "refresh", "classKatabatic_1_1KatabaticEngine.html#a1e9bb62be35c6a415a1950c72c1964ef", null ], - [ "createDetailedGrid", "classKatabatic_1_1KatabaticEngine.html#a1b7d8ed09a198f7afd6e3ac911f6eb37", null ], - [ "makePowerRails", "classKatabatic_1_1KatabaticEngine.html#aaba3b9450c85634131146fb507089f2d", null ], - [ "loadGlobalRouting", "classKatabatic_1_1KatabaticEngine.html#a9edeafb298912a2919f8511d4eb70543", null ], - [ "slackenBorder", "classKatabatic_1_1KatabaticEngine.html#a145b36b18fc9149980c5d6bd4bd10e0d", null ], - [ "slackenBlockIos", "classKatabatic_1_1KatabaticEngine.html#ac40754d4a9bd0cf327b5fa088e993897", null ], - [ "moveUpNetTrunk", "classKatabatic_1_1KatabaticEngine.html#abb2b28adfaca2cc36716db41b093f355", null ], - [ "layerAssign", "classKatabatic_1_1KatabaticEngine.html#a77833ce938a430785ba869eedbc2300c", null ], - [ "computeNetConstraints", "classKatabatic_1_1KatabaticEngine.html#a6957a5830a4d6f1b2daf83a7d98df601", null ], - [ "toOptimals", "classKatabatic_1_1KatabaticEngine.html#ad6b9f7d94ee4a88f12c485e48d1e644a", null ], - [ "finalizeLayout", "classKatabatic_1_1KatabaticEngine.html#a468eddb683c04cfeea1c5124a39e1f86", null ] -]; \ No newline at end of file diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1KatabaticEngine__inherit__graph.map b/deprecated/katabatic/doc/html/classKatabatic_1_1KatabaticEngine__inherit__graph.map deleted file mode 100644 index bad9aa58..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1KatabaticEngine__inherit__graph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1KatabaticEngine__inherit__graph.md5 b/deprecated/katabatic/doc/html/classKatabatic_1_1KatabaticEngine__inherit__graph.md5 deleted file mode 100644 index f5400e98..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1KatabaticEngine__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -0067091f9eb5dd55fa7a593e76bdfd03 \ No newline at end of file diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1KatabaticEngine__inherit__graph.png b/deprecated/katabatic/doc/html/classKatabatic_1_1KatabaticEngine__inherit__graph.png deleted file mode 100644 index 2dcccaae..00000000 Binary files a/deprecated/katabatic/doc/html/classKatabatic_1_1KatabaticEngine__inherit__graph.png and /dev/null differ diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1LocatorHelper-members.html b/deprecated/katabatic/doc/html/classKatabatic_1_1LocatorHelper-members.html deleted file mode 100644 index af7e4365..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1LocatorHelper-members.html +++ /dev/null @@ -1,70 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - - -
    -
    -
    LocatorHelper Member List
    -
    -
    - -

    This is the complete list of members for LocatorHelper, including all inherited members.

    - - - - - -
    getSegment() constLocatorHelperinline
    isValid() constLocatorHelperinline
    LocatorHelper(AutoContact *, unsigned int flags=0)LocatorHelperinline
    progress()LocatorHelperinline
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1LocatorHelper.html b/deprecated/katabatic/doc/html/classKatabatic_1_1LocatorHelper.html deleted file mode 100644 index 427613b3..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1LocatorHelper.html +++ /dev/null @@ -1,229 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - - -
    - -
    -
    LocatorHelper Class Reference
    -
    -
    - -

    Locator Helper Collection's Locators. - More...

    - - - - - - - - - - -

    -Public Member Functions

     LocatorHelper (AutoContact *, unsigned int flags=0)
     
    bool isValid () const
     
    AutoSegmentgetSegment () const
     
    void progress ()
     
    -

    Detailed Description

    -

    Locator Helper Collection's Locators.

    -

    Provide a small uniform walktough over the AutoSegments anchored on AutoContacts. The flags argument allows to choose between direction and include perpandiculars (in that case all segments are processeds).

    -

    -Implementation Details

    -

    As, at most, two horizontals and two verticals may be anchored on any AutoContact subtype, the locator helper perform a walk through a virtual table of 4 elements. The two first are the horizontals, the two last the verticals. The meaning of this index is consistent whith the index argument of AutoContact::getSegment(). When a segment is not present in an AutoContact, the getSegment() returns NULL and the LocatorHelper::progress() function will skip it.

    -

    The private methods:

      -
    • LocatorHelper::_min()
    • -
    • LocatorHelper::_max()
    • -
    -

    Computes the bounds of _index according to the value of _flags:

      -
    • KbHorizontal : 0 to less than 2.
    • -
    • KbVertical : 2 to less than 4.
    • -
    • KbHorizontal|KbVertical : 0 to less than 4.
    • -
    -

    Constructor & Destructor Documentation

    - -

    ◆ LocatorHelper()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    LocatorHelper (AutoContactcontact,
    unsigned int flags = 0 
    )
    -
    -inline
    -
    -

    Create a helper to iterate over the AutoSegments anchored on contact. The flags arguments allow to select:

    -

    When setting KbWithPerpands, all the segments will be iterated over. It may seems a somewhat contorted way of doing things, the reason is the ability to share (an pass) flags directly between different functions.

    - -

    References AutoContact::getSegment(), and LocatorHelper::progress().

    - -
    -
    -

    Member Function Documentation

    - -

    ◆ isValid()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool isValid () const
    -
    -inline
    -
    -

    Returns: true if there is an AutoSegment to be processed.

    - -
    -
    - -

    ◆ getSegment()

    - -
    -
    - - - - - -
    - - - - - - - -
    AutoSegment * getSegment () const
    -
    -inline
    -
    -

    Returns: The current AutoSegment. NULL if the loop is over.

    - -

    References AutoContact::getSegment().

    - -
    -
    - -

    ◆ progress()

    - -
    -
    - - - - - -
    - - - - - - - -
    void progress ()
    -
    -inline
    -
    -

    Returns: Go to the next AutoSegment.

    - -

    References AutoContact::getSegment().

    - -

    Referenced by LocatorHelper::LocatorHelper().

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1LocatorHelper.js b/deprecated/katabatic/doc/html/classKatabatic_1_1LocatorHelper.js deleted file mode 100644 index fef27754..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1LocatorHelper.js +++ /dev/null @@ -1,7 +0,0 @@ -var classKatabatic_1_1LocatorHelper = -[ - [ "LocatorHelper", "classKatabatic_1_1LocatorHelper.html#af44c2fcc73d387e3e3b5c334f25b070b", null ], - [ "isValid", "classKatabatic_1_1LocatorHelper.html#aac1b70a2ed67ead038c4d3f5ac4d8a81", null ], - [ "getSegment", "classKatabatic_1_1LocatorHelper.html#a7da801ed643439613cecc7b0f5d9e0d6", null ], - [ "progress", "classKatabatic_1_1LocatorHelper.html#a1be98ae64bededebc29a04f257024ebe", null ] -]; \ No newline at end of file diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1Observable-members.html b/deprecated/katabatic/doc/html/classKatabatic_1_1Observable-members.html deleted file mode 100644 index bf97fe29..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1Observable-members.html +++ /dev/null @@ -1,71 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - - -
    -
    -
    Observable Member List
    -
    -
    - -

    This is the complete list of members for Observable, including all inherited members.

    - - - - - - -
    addObserver(BaseObserver *)Observableinline
    getObserver()Observableinline
    notify(unsigned int flags)Observableinline
    Observable()Observableinline
    removeObserver(BaseObserver *)Observableinline
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1Observable.html b/deprecated/katabatic/doc/html/classKatabatic_1_1Observable.html deleted file mode 100644 index dfb54b81..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1Observable.html +++ /dev/null @@ -1,233 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - - -
    - -
    -
    Observable Class Reference
    -
    -
    - -

    Observer Design Pattern, Subject part. - More...

    - - - - - - - - - - - - - -

    -Public Member Functions

     Observable ()
     
    template<typename T >
    T * getObserver ()
     
    void addObserver (BaseObserver *)
     
    void removeObserver (BaseObserver *)
     
    void notify (unsigned int flags)
     
    -

    Detailed Description

    -

    Observer Design Pattern, Subject part.

    -

    Observable is the implementation of the subject part of the Observer design pattern. For the time beeing it's a simplificated version that allows only one Observer to watch the subject.

    -

    Observable is designed to be an attribute of the subject, not one of it's base class.

    -

    This implantation is completly generic and has nothing specific to Katabatic. It may be moved sometimes in Hurricane at Property level in Hurricane::DBo.

    -

    Note to Myself: Observer pattern is the one behind signal/slots.

    -

    Constructor & Destructor Documentation

    - -

    ◆ Observable()

    - -
    -
    - - - - - -
    - - - - - - - -
    Observable ()
    -
    -inline
    -
    -

    Default and only constructor. The copy constructor is disabled (made private and unimplemented).

    - -
    -
    -

    Member Function Documentation

    - -

    ◆ getObserver()

    - -
    -
    - - - - - -
    - - - - - - - -
    T * getObserver ()
    -
    -inline
    -
    -

    Returns: The (only) observer, NULL if there is none. It is the object of which the Observer is an attribute, that is, it's owner, and not the Observer itself which is returned.

    - -
    -
    - -

    ◆ addObserver()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void addObserver (BaseObserverobserver)
    -
    -inline
    -
    -

    Adds an observer. If more than one is added, throw an error.

    - -
    -
    - -

    ◆ removeObserver()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void removeObserver (BaseObserverobserver)
    -
    -inline
    -
    -

    Removes an observer. If the observer do not belong to this observable, throw an exception.

    - -
    -
    - -

    ◆ notify()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void notify (unsigned int flags)
    -
    -inline
    -
    -

    Used by the subject to signal a change in it's state to the observers. The flags parameter can be used to indicates what kind of change is occuring. Values for flags are defined between the subject and the observers.

    - -

    References BaseObserver::notify().

    - -

    Referenced by AutoSegment::_invalidate(), AutoSegment::_postCreate(), AutoSegment::_preDestroy(), and AutoSegment::revalidate().

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1Observable.js b/deprecated/katabatic/doc/html/classKatabatic_1_1Observable.js deleted file mode 100644 index c77dc9e2..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1Observable.js +++ /dev/null @@ -1,8 +0,0 @@ -var classKatabatic_1_1Observable = -[ - [ "Observable", "classKatabatic_1_1Observable.html#a6438e92e07db169a97ed3eba36788dc4", null ], - [ "getObserver", "classKatabatic_1_1Observable.html#acc0b7276e09628f2b101ecf751aacd2a", null ], - [ "addObserver", "classKatabatic_1_1Observable.html#a783fda85eeabe9c660881f236f162767", null ], - [ "removeObserver", "classKatabatic_1_1Observable.html#acaa5a7fc7fa631e3006a42006d753f43", null ], - [ "notify", "classKatabatic_1_1Observable.html#a52e577fb0c4f2e3650928334fb621c2f", null ] -]; \ No newline at end of file diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1Observer-members.html b/deprecated/katabatic/doc/html/classKatabatic_1_1Observer-members.html deleted file mode 100644 index ce02255b..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1Observer-members.html +++ /dev/null @@ -1,69 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - - -
    -
    -
    Observer< T > Member List
    -
    -
    - -

    This is the complete list of members for Observer< T >, including all inherited members.

    - - - - -
    getOwner() constObserver< T >inline
    notify(unsigned int flags)BaseObservervirtual
    Observer(const T *owner)Observer< T >inline
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1Observer.html b/deprecated/katabatic/doc/html/classKatabatic_1_1Observer.html deleted file mode 100644 index 0cc332c5..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1Observer.html +++ /dev/null @@ -1,156 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - - -
    - -
    -
    Observer< T > Class Template Reference
    -
    -
    - -

    Observer Design Pattern, Observer part. - More...

    -
    -Inheritance diagram for Observer< T >:
    -
    -
    Inheritance graph
    - - - -
    [legend]
    - - - - - - - - - -

    -Public Member Functions

     Observer (const T *owner)
     
    T * getOwner () const
     
    - Public Member Functions inherited from BaseObserver
    virtual void notify (unsigned int flags)
     
    -

    Detailed Description

    -

    template<typename T>
    -class Katabatic::Observer< T >

    - -

    Observer Design Pattern, Observer part.

    -

    First, a warning about names: although this class is named Observer, it is intended to be an attribute nested inside the whole object which is indeed, the true Observer. This nesting object is called, most of the time the owner in the following. But sometimes, for simplification it may also be called the Observer.

    -

    -Observer Implementation Notes

    -

    To retrieve the owner from the Observer attribute, we uses the offset from the attribute in the owner. This offset is computed once and for all the first time the template constructor is called.

    -

    Constructor & Destructor Documentation

    - -

    ◆ Observer()

    - -
    -
    - - - - - -
    - - - - - - - - -
    Observer (const T * owner)
    -
    -inline
    -
    -

    The owner of the oberver is needed to compute, on the first creation only, the offset of the Observer attribute inside the owner complete object.

    - -
    -
    -

    Member Function Documentation

    - -

    ◆ getOwner()

    - -
    -
    - - - - - -
    - - - - - - - -
    T * getOwner () const
    -
    -inline
    -
    -

    Returns: The owner of the observer.

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1Observer.js b/deprecated/katabatic/doc/html/classKatabatic_1_1Observer.js deleted file mode 100644 index 90c43926..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1Observer.js +++ /dev/null @@ -1,5 +0,0 @@ -var classKatabatic_1_1Observer = -[ - [ "Observer", "classKatabatic_1_1Observer.html#ab05ec12517c51952960dd4f324499b44", null ], - [ "getOwner", "classKatabatic_1_1Observer.html#a1515e4d637164e6589f550164c304fe1", null ] -]; \ No newline at end of file diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1Observer__inherit__graph.map b/deprecated/katabatic/doc/html/classKatabatic_1_1Observer__inherit__graph.map deleted file mode 100644 index 0e0e67af..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1Observer__inherit__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1Observer__inherit__graph.md5 b/deprecated/katabatic/doc/html/classKatabatic_1_1Observer__inherit__graph.md5 deleted file mode 100644 index dad49e95..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1Observer__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -7695788ba689bac92b2885dc74b4f7a6 \ No newline at end of file diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1Observer__inherit__graph.png b/deprecated/katabatic/doc/html/classKatabatic_1_1Observer__inherit__graph.png deleted file mode 100644 index d2fb730b..00000000 Binary files a/deprecated/katabatic/doc/html/classKatabatic_1_1Observer__inherit__graph.png and /dev/null differ diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1Session-members.html b/deprecated/katabatic/doc/html/classKatabatic_1_1Session-members.html deleted file mode 100644 index a3913e40..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1Session-members.html +++ /dev/null @@ -1,100 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - - -
    -
    -
    Session Member List
    -
    -
    - -

    This is the complete list of members for Session, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    close()Sessionstatic
    dogleg(AutoSegment *)Sessioninlinestatic
    doWarnGCellOverload()Sessionstatic
    get(const char *message=NULL)Sessionstatic
    getConfiguration()Sessioninlinestatic
    getContactLayer(size_t)Sessioninlinestatic
    getContactStackSize()Sessioninlinestatic
    getDoglegs()Sessioninlinestatic
    getExtensionCap()Sessionstatic
    getInvalidateds()Sessioninlinestatic
    getKatabatic()Sessioninlinestatic
    getNetsModificateds()Sessioninlinestatic
    getRevalidateds()Sessioninlinestatic
    getRoutingGauge()Sessioninlinestatic
    getRoutingLayer(size_t)Sessioninlinestatic
    getSaturateRatio()Sessionstatic
    getSaturateRp()Sessionstatic
    getSegmentStackSize()Sessioninlinestatic
    getTechnology()Sessioninlinestatic
    invalidate(Net *)Sessioninlinestatic
    invalidate(AutoContact *)Sessioninlinestatic
    invalidate(AutoSegment *)Sessioninlinestatic
    isInDemoMode()Sessionstatic
    link(AutoContact *)Sessionstatic
    link(AutoSegment *)Sessionstatic
    lookup(Contact *)Sessionstatic
    lookup(Segment *)Sessionstatic
    open(KatabaticEngine *)Sessionstatic
    revalidate()Sessioninlinestatic
    revalidateTopology()Sessioninlinestatic
    setInvalidateMask(unsigned int)Sessioninlinestatic
    setKatabaticFlags(unsigned int)Sessionstatic
    unlink(AutoContact *)Sessionstatic
    unlink(AutoSegment *)Sessionstatic
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1Session.html b/deprecated/katabatic/doc/html/classKatabatic_1_1Session.html deleted file mode 100644 index 25c9c7c9..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1Session.html +++ /dev/null @@ -1,1163 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - - -
    - -
    -
    Session Class Reference
    -
    -
    - -

    Modification Session for Katabatic. - More...

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Static Public Member Functions

    static bool isInDemoMode ()
     
    static bool doWarnGCellOverload ()
     
    static Sessionget (const char *message=NULL)
     
    static TechnologygetTechnology ()
     
    static KatabaticEnginegetKatabatic ()
     
    static const Configuration * getConfiguration ()
     
    static float getSaturateRatio ()
     
    static size_t getSaturateRp ()
     
    static DbU::Unit getExtensionCap ()
     
    static RoutingGaugegetRoutingGauge ()
     
    static const LayergetRoutingLayer (size_t)
     
    static const LayergetContactLayer (size_t)
     
    static size_t getSegmentStackSize ()
     
    static size_t getContactStackSize ()
     
    static const vector< AutoSegment * > & getInvalidateds ()
     
    static const vector< AutoSegment * > & getRevalidateds ()
     
    static const vector< AutoSegment * > & getDoglegs ()
     
    static const set< Net * > & getNetsModificateds ()
     
    static Sessionopen (KatabaticEngine *)
     
    static void close ()
     
    static void setKatabaticFlags (unsigned int)
     
    static void dogleg (AutoSegment *)
     
    static void revalidateTopology ()
     
    static void setInvalidateMask (unsigned int)
     
    static void invalidate (Net *)
     
    static void invalidate (AutoContact *)
     
    static void invalidate (AutoSegment *)
     
    static size_t revalidate ()
     
    static void link (AutoContact *)
     
    static void link (AutoSegment *)
     
    static void unlink (AutoContact *)
     
    static void unlink (AutoSegment *)
     
    static AutoContactlookup (Contact *)
     
    static AutoSegmentlookup (Segment *)
     
    -

    Detailed Description

    -

    Modification Session for Katabatic.

    -

    To perform modifications, the Katabatic data structure uses a session mechanism built on top of the Hurricane::UpdateSession one. Sessions obeys very simples rules:

    -

    The task of a Session is to keep track of the AutoContact and AutoSegment that have been modificateds (i.e. invalidated) and, to restore connexity and/or topology when closed.

    -

    Two kinds of revalidation could be performed:

      -
    • -Geometrical : only positions of AutoContacts and AutoSegments extensions are recomputed.
    • -
    • -Topological : a whole net have been invalidated because of a dogleg creation or a move up/move down of a segment.
        -
      • -Dogleg : needs to insert the newly created AutoSegments and AutoContacts.
      • -
      • -Move up/Move down : may needs to create additional dogleg to restore connexity (gaps), and then insert them like above.
      • -
      -After a topological mofication has been done, the net needs to be re-canonized then the geometrical step takes place.
    • -
    -

    The kind of revalidation needed is automatically detected by the Session.

    -

    In addition to it's main purpose, Session also provides cached access to frequently needed variables either from Hurricane or Katabatic Configuration and access to the AutoContact & AutoSegment LUTs of KatabaticEngine.

    -

    From a software point of view, Session is a singleton object.

    -

    -Session Algorithm

    -

    Main attributes of a Session:

      -
    • _netInvalidateds, nets on which topology has changed.
    • -
    • _autoSegments, that have been moved or createds.
    • -
    • _autoContacts, that have been created or one of their slave segment has moved.
    • -
    • _revalidateds, the list of AutoSegments that have just been revalidated (after calling revalidate()).
    • -
    -

    Schematic description of how a Session works:

    -
      -
    • -

      If at least one net has been invalidated, meaning that it's topology has changed, perform _revalidateTopology().

        -
      • -Update net topology: correct the topology of each contacts, making dogleg when needed. The AutoContact segment caching is updated at this point.
      • -
      • -Compute net constraints (on AutoContacts & AutoSegments).
      • -
      • -Compute net optimal positions (on AutoSegments).
      • -
      • -Compute the state of the segments regarding to terminals.
      • -
      • -Canonize sets of aligneds segments. The canonical segment is the one with the lowest id.
      • -
      • -If the segments has just been created, put it on its optimal axis.
      • -
      -

      This stage can add itself more invalidated AutoSegments and AutoContacts as it create doglegs.

      -

      -
    • -
    • -

      Revalidate geometry of AutoContacts. That is, expand or shrink the extremities of the invalidated AutoSegments. Note that AutoSegments are already at on their final axis position.

      -

      -
    • -
    • -Revalidate AutoSegments. Just before this stage, they are on the correct axis and their extensions are also correct, so we may update the caching of their characteristics (mostly the extension).
    • -
    -

    Member Function Documentation

    - -

    ◆ isInDemoMode()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool isInDemoMode ()
    -
    -static
    -
    -

    Katabatic shortcut.

    - -

    References KatabaticEngine::isInDemoMode().

    - -

    Referenced by GCell::checkDensity().

    - -
    -
    - -

    ◆ doWarnGCellOverload()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool doWarnGCellOverload ()
    -
    -static
    -
    -

    Katabatic shortcut.

    - -

    References KatabaticEngine::doWarnOnGCellOverload().

    - -

    Referenced by GCell::checkDensity().

    - -
    -
    - -

    ◆ get()

    - -
    -
    - - - - - -
    - - - - - - - - -
    Session * get (const char * message = NULL)
    -
    -static
    -
    -

    Return the Session singleton, if no session is currently open throw an exception carrying message.

    - -
    -
    - -

    ◆ getTechnology()

    - -
    -
    - - - - - -
    - - - - - - - -
    Technology * getTechnology ()
    -
    -inlinestatic
    -
    -

    Hurricane shortcut.

    - -
    -
    - -

    ◆ getKatabatic()

    - -
    -
    - - - - - -
    - - - - - - - -
    KatabaticEngine * getKatabatic ()
    -
    -inlinestatic
    -
    -
    - -

    ◆ getConfiguration()

    - -
    -
    - - - - - -
    - - - - - - - -
    const Configuration * getConfiguration ()
    -
    -inlinestatic
    -
    -
    - -

    ◆ getSaturateRatio()

    - -
    -
    - - - - - -
    - - - - - - - -
    float getSaturateRatio ()
    -
    -static
    -
    -

    Katabatic shortcut.

    - -

    References KatabaticEngine::getSaturateRatio().

    - -

    Referenced by GCell::isSaturated().

    - -
    -
    - -

    ◆ getSaturateRp()

    - -
    -
    - - - - - -
    - - - - - - - -
    size_t getSaturateRp ()
    -
    -static
    -
    -

    Katabatic shortcut.

    - -

    References KatabaticEngine::getSaturateRp().

    - -

    Referenced by GCell::rpDesaturate().

    - -
    -
    - -

    ◆ getExtensionCap()

    - -
    -
    - - - - - -
    - - - - - - - -
    DbU::Unit getExtensionCap ()
    -
    -static
    -
    -
    - -

    ◆ getRoutingGauge()

    - - - -

    ◆ getRoutingLayer()

    - -
    -
    - - - - - -
    - - - - - - - - -
    const Layer * getRoutingLayer (size_t depth)
    -
    -inlinestatic
    -
    -
    - -

    ◆ getContactLayer()

    - - - -

    ◆ getSegmentStackSize()

    - -
    -
    - - - - - -
    - - - - - - - -
    size_t getSegmentStackSize ()
    -
    -inlinestatic
    -
    -

    Returns: The number of AutoSegment in the invalidated stack.

    - -
    -
    - -

    ◆ getContactStackSize()

    - -
    -
    - - - - - -
    - - - - - - - -
    size_t getContactStackSize ()
    -
    -inlinestatic
    -
    -

    Returns: The number of AutoSegment in the invalidated stack.

    - -
    -
    - -

    ◆ getInvalidateds()

    - -
    -
    - - - - - -
    - - - - - - - -
    const vector< AutoSegment * > & getInvalidateds ()
    -
    -inlinestatic
    -
    -

    Returns: The stack (vector) of invalidateds AutoSegments.

    - -
    -
    - -

    ◆ getRevalidateds()

    - -
    -
    - - - - - -
    - - - - - - - -
    const vector< AutoSegment * > & getRevalidateds ()
    -
    -inlinestatic
    -
    -

    Returns: The stack (vector) of AutoSegments that have been revalidateds.

    - -
    -
    - -

    ◆ getDoglegs()

    - -
    -
    - - - - - -
    - - - - - - - -
    const vector< AutoSegment * > & getDoglegs ()
    -
    -inlinestatic
    -
    -

    Returns: The vector of AutoSegments part of a newly created dogleg. The dogleg creation functions in AutoHorizontal and AutoVertical put a triplet (for example in horizontal direction (h1,v1,h2) ) for each dogleg composed of:

      -
    • h1 the segment before the dogleg (which is also the original one).
    • -
    • v1 the segment perpandicular (new).
    • -
    • h2 the segment after (new).
    • -
    - -

    Referenced by AutoSegment::makeDogleg().

    - -
    -
    - -

    ◆ getNetsModificateds()

    - -
    -
    - - - - - -
    - - - - - - - -
    const set< Net * > & getNetsModificateds ()
    -
    -inlinestatic
    -
    -

    Returns: The set of Nets that needs either a topological update or a new canonization.

    - -
    -
    - -

    ◆ open()

    - -
    -
    - - - - - -
    - - - - - - - - -
    Session * open (KatabaticEnginektbt)
    -
    -static
    -
    -

    Opens a new session or returns the already opened one, if any.

    - -

    References Session::getKatabatic().

    - -

    Referenced by GCellGrid::updateContacts().

    - -
    -
    - -

    ◆ close()

    - -
    -
    - - - - - -
    - - - - - - - -
    void close ()
    -
    -static
    -
    -

    Close the Session, triggering the revalidation of the AutoSegemnts and AutoContacts. If no Session is opened, throws an execption.

    - -

    Referenced by GCellGrid::updateContacts().

    - -
    -
    - -

    ◆ setKatabaticFlags()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void setKatabaticFlags (unsigned int flags)
    -
    -static
    -
    -

    Katabatic shortcut.

    - -

    References KatabaticEngine::setFlags().

    - -
    -
    - -

    ◆ dogleg()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void dogleg (AutoSegmentautoSegment)
    -
    -inlinestatic
    -
    -

    Adds an AutoSegment to the dogleg vector.

    - -

    Referenced by AutoHorizontal::_makeDogleg(), and AutoVertical::_makeDogleg().

    - -
    -
    - -

    ◆ revalidateTopology()

    - -
    -
    - - - - - -
    - - - - - - - -
    void revalidateTopology ()
    -
    -inlinestatic
    -
    -

    Revalidate Net that have been invalidateds and re-canonize them.

    - -
    -
    - -

    ◆ setInvalidateMask()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void setInvalidateMask (unsigned int flags)
    -
    -inlinestatic
    -
    -

    Tells what kind of revalidation must be performed.

    - -
    -
    - -

    ◆ invalidate() [1/3]

    - -
    -
    - - - - - -
    - - - - - - - - -
    void invalidate (Netnet)
    -
    -inlinestatic
    -
    -

    Schedule net for a full revalidation, topological correction and canonization.

    - -

    Referenced by AutoSegment::_invalidate(), and AutoSegment::_postCreate().

    - -
    -
    - -

    ◆ invalidate() [2/3]

    - -
    -
    - - - - - -
    - - - - - - - - -
    void invalidate (AutoContactcontact)
    -
    -inlinestatic
    -
    -

    Schedule contact for revalidation.

    - -
    -
    - -

    ◆ invalidate() [3/3]

    - -
    -
    - - - - - -
    - - - - - - - - -
    void invalidate (AutoSegmentsegment)
    -
    -inlinestatic
    -
    -

    Schedule segment for revalidation.

    - -
    -
    - -

    ◆ revalidate()

    - -
    -
    - - - - - -
    - - - - - - - -
    size_t revalidate ()
    -
    -inlinestatic
    -
    -

    Perform the revalidation. Returns the sum of AutoContacts and AutoSegemnts that have been revalidated.

    - -

    Referenced by KatabaticEngine::createDetailedGrid().

    - -
    -
    - -

    ◆ link() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - -
    void link (AutoContactac)
    -
    -static
    -
    -

    Adds ac in the AutoContact lookup table (allow to retrieve an AutoContact by it's base Contact).

    - -

    Referenced by AutoSegment::_postCreate().

    - -
    -
    - -

    ◆ link() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - -
    void link (AutoSegmentas)
    -
    -static
    -
    -

    Adds as in the AutoSegment lookup table (allow to retrieve an AutoSegment by it's base Segment).

    - -
    -
    - -

    ◆ unlink() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - -
    void unlink (AutoContactac)
    -
    -static
    -
    -

    Removes ac from the AutoContact lookup table.

    - -

    Referenced by AutoSegment::_preDestroy().

    - -
    -
    - -

    ◆ unlink() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - -
    void unlink (AutoSegmentas)
    -
    -static
    -
    -

    Removes as from the AutoSegment lookup table.

    - -
    -
    - -

    ◆ lookup() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - -
    AutoContact * lookup (Contactcontact)
    -
    -static
    -
    -
    - -

    ◆ lookup() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - -
    AutoSegment * lookup (Segmentsegment)
    -
    -static
    -
    -

    Lookup the AutoSegment associated with segment. NULL if not found.

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/classKatabatic_1_1Session.js b/deprecated/katabatic/doc/html/classKatabatic_1_1Session.js deleted file mode 100644 index e08e76a0..00000000 --- a/deprecated/katabatic/doc/html/classKatabatic_1_1Session.js +++ /dev/null @@ -1,37 +0,0 @@ -var classKatabatic_1_1Session = -[ - [ "isInDemoMode", "classKatabatic_1_1Session.html#a037c7ec3b18ec43973f2e6fe3a172000", null ], - [ "doWarnGCellOverload", "classKatabatic_1_1Session.html#ad41e6fb02bd7bb01c27fb6aae36f0ddc", null ], - [ "get", "classKatabatic_1_1Session.html#a76f17c3642eaeba85fa0af5ae9d208b4", null ], - [ "getTechnology", "classKatabatic_1_1Session.html#a109acfd064f3c1854abb8bb2c9b4ad30", null ], - [ "getKatabatic", "classKatabatic_1_1Session.html#a1ec4ff2ad2a5b964c0ff98170a366197", null ], - [ "getConfiguration", "classKatabatic_1_1Session.html#a4d9fd503149d2fff66eb8ba3955b7a13", null ], - [ "getSaturateRatio", "classKatabatic_1_1Session.html#a266a4079ca235e8fdb622ef4996d324d", null ], - [ "getSaturateRp", "classKatabatic_1_1Session.html#adfdaa8b3e81de14fce1f99444b35fcda", null ], - [ "getExtensionCap", "classKatabatic_1_1Session.html#a909ce95ac840ee708f9a49366f0c2690", null ], - [ "getRoutingGauge", "classKatabatic_1_1Session.html#a9a05289b33122f312aa2c88c4b023292", null ], - [ "getRoutingLayer", "classKatabatic_1_1Session.html#a3efd0f0d87be640dc566c1afd821e5e6", null ], - [ "getContactLayer", "classKatabatic_1_1Session.html#ad3ee60a34f480bd3aecd8c7d957ff52e", null ], - [ "getSegmentStackSize", "classKatabatic_1_1Session.html#ac9c144a8faf97714069824933970923c", null ], - [ "getContactStackSize", "classKatabatic_1_1Session.html#a0d0c0159030a32b78ab4ad2b58871bce", null ], - [ "getInvalidateds", "classKatabatic_1_1Session.html#a6060b7e972f3c0d10cfa158b5ed174e6", null ], - [ "getRevalidateds", "classKatabatic_1_1Session.html#af5675d50557db83d11b7d2151de5f34c", null ], - [ "getDoglegs", "classKatabatic_1_1Session.html#a84211b77fe7fb8b49a93d7f298a5de90", null ], - [ "getNetsModificateds", "classKatabatic_1_1Session.html#a6c3be93d98029b06138f633342d04157", null ], - [ "open", "classKatabatic_1_1Session.html#a000e098850f6cccff6b289a294149a41", null ], - [ "close", "classKatabatic_1_1Session.html#a5ae591df94fc66ccb85cbb6565368bca", null ], - [ "setKatabaticFlags", "classKatabatic_1_1Session.html#af9919aefa1db2478b3d1813c1872d175", null ], - [ "dogleg", "classKatabatic_1_1Session.html#aed01e83f7d8dc7acd85156256a9e776c", null ], - [ "revalidateTopology", "classKatabatic_1_1Session.html#a69fc41ca90fae86766ae9d528394868f", null ], - [ "setInvalidateMask", "classKatabatic_1_1Session.html#a16f4761496e07b9e836642d1effa1993", null ], - [ "invalidate", "classKatabatic_1_1Session.html#ae310a7c2c301b7e5f90fba5d34cc5be9", null ], - [ "invalidate", "classKatabatic_1_1Session.html#a1f8da0ae3a9d714c1dfae69904acec5f", null ], - [ "invalidate", "classKatabatic_1_1Session.html#a7968875ccb5abb2c6f6d5dec92027550", null ], - [ "revalidate", "classKatabatic_1_1Session.html#a4da9e28432c1fdb0c754717487d9cc83", null ], - [ "link", "classKatabatic_1_1Session.html#a8fad7191a9fc248f84e71cf1c9d0c6be", null ], - [ "link", "classKatabatic_1_1Session.html#ab12ddab837097ec298ede4f66302b677", null ], - [ "unlink", "classKatabatic_1_1Session.html#a10c42636ea5786d898d530905ccb30d6", null ], - [ "unlink", "classKatabatic_1_1Session.html#ab815a7824e0253142af6b8a204c361ec", null ], - [ "lookup", "classKatabatic_1_1Session.html#acc20c1f675cc59f9a0068aba727eca47", null ], - [ "lookup", "classKatabatic_1_1Session.html#a6e465f0a592fee7e1e45b6c825b8a5da", null ] -]; \ No newline at end of file diff --git a/deprecated/katabatic/doc/html/classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology-members.html b/deprecated/katabatic/doc/html/classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology-members.html deleted file mode 100644 index 773b64ba..00000000 --- a/deprecated/katabatic/doc/html/classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology-members.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - - -
    -
    -
    GCellTopology Member List
    -
    -
    - -

    This is the complete list of members for GCellTopology, including all inherited members.

    - - - - - - - - - - - - - - - -
    _do_1G_1M1()GCellTopologyprivate
    _do_1G_1M3()GCellTopologyprivate
    _do_1G_xM1()GCellTopologyprivate
    _do_xG()GCellTopologyprivate
    _do_xG_1M1_1M2()GCellTopologyprivate
    _do_xG_1Pad()GCellTopologyprivate
    _do_xG_xM1_xM3()GCellTopologyprivate
    _do_xG_xM2()GCellTopologyprivate
    _do_xG_xM3()GCellTopologyprivate
    doRp_Access(GCell *, Component *, unsigned int flags)GCellTopologystatic
    doRp_AccessPad(RoutingPad *, unsigned int flags)GCellTopologystatic
    doRp_AutoContacts(GCell *, Component *, AutoContact *&source, AutoContact *&target, unsigned int flags)GCellTopologystatic
    doRp_StairCaseH(GCell *, Component *rp1, Component *rp2)GCellTopologystatic
    doRp_StairCaseV(GCell *, Component *rp1, Component *rp2)GCellTopologystatic
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html b/deprecated/katabatic/doc/html/classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html deleted file mode 100644 index aac98ffe..00000000 --- a/deprecated/katabatic/doc/html/classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html +++ /dev/null @@ -1,111 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - - - -
    - -

    Build the wiring for a Net inside a GCell (internal). - More...

    - - - - - - - - - - - - -

    -Static Public Member Functions

    static void doRp_AutoContacts (GCell *, Component *, AutoContact *&source, AutoContact *&target, unsigned int flags)
     
    static AutoContactdoRp_Access (GCell *, Component *, unsigned int flags)
     
    static AutoContactdoRp_AccessPad (RoutingPad *, unsigned int flags)
     
    static void doRp_StairCaseH (GCell *, Component *rp1, Component *rp2)
     
    static void doRp_StairCaseV (GCell *, Component *rp1, Component *rp2)
     
    - - - - - - - - - - - - - - - - - - - -

    -Private Member Functions

    void _do_xG ()
     
    void _do_xG_1Pad ()
     
    void _do_1G_1M1 ()
     
    void _do_1G_xM1 ()
     
    void _do_xG_xM1_xM3 ()
     
    void _do_xG_1M1_1M2 ()
     
    void _do_xG_xM2 ()
     
    void _do_1G_1M3 ()
     
    void _do_xG_xM3 ()
     
    -

    Detailed Description

    -

    Build the wiring for a Net inside a GCell (internal).

    -

    As this class is called to initially construct the Katabatic wiring, it must build a connex wiring. That is without gaps in layer depth, because the topology restauration mechanism (AutoContact::updateTopology()) of the AutoContact cannot work until all AutoSegments are revalidated at least once. The topology restauration work by creating doglegs which in turn, call the canonization, which needs all the caches to be up to date.

    -

    The documentation for this class was generated from the following file:
      -
    • LoadGrByNet.cpp
    • -
    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.js b/deprecated/katabatic/doc/html/classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.js deleted file mode 100644 index 658a7ff0..00000000 --- a/deprecated/katabatic/doc/html/classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.js +++ /dev/null @@ -1,146 +0,0 @@ -var classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology = -[ - [ "GlobalBSize", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#a2c33c0744f4505f00ea53267d8c43671ab38b89586aa076084463d811d57c4538", null ], - [ "Metal1BSize", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#a2c33c0744f4505f00ea53267d8c43671a1bc99bdfbb7c7eb0a23dbbf565623e71", null ], - [ "Metal2BSize", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#a2c33c0744f4505f00ea53267d8c43671af87734f9fd84df9f517feb68fb867c22", null ], - [ "Metal3BSize", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#a2c33c0744f4505f00ea53267d8c43671a420ba170a2d36eaa47b22bf5ceb9e458", null ], - [ "PadsBSize", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#a2c33c0744f4505f00ea53267d8c43671a7ef87c54403dd66454c7411a1f3d4bd8", null ], - [ "PinsBSize", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#a2c33c0744f4505f00ea53267d8c43671a7adf03a9c34bbfd59290d3dda7e990d8", null ], - [ "Conn_0G", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09a8c105dd8387ef3c29c243ded9e55c372", null ], - [ "Conn_2G", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09a1d5a7130758b852a95833140de780475", null ], - [ "Conn_3G", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09ad977b4b2276732d3cc05e8b1c17dc6d4", null ], - [ "Conn_4G", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09a637bc3b85f96cc76a0e6d47bb80ed5d5", null ], - [ "Conn_0G_2M1", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09a3f1932697ce50b72fd6d364d6256922e", null ], - [ "Conn_1G_1M1", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09a46b005118049b7fc71b8382f0ecb2720", null ], - [ "Conn_1G_2M1", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09ab924f41355642e8cca84986cce13cf89", null ], - [ "Conn_1G_3M1", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09ae2c23ae412efaaffe3e8132809056f25", null ], - [ "Conn_1G_4M1", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09aca6d194230c7219b18b640a56ce7bf02", null ], - [ "Conn_1G_1M2", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09aede39c48e16c290d770e1844e3bc97da", null ], - [ "Conn_1G_2M2", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09ab9be49382c9d81ba7b50ad5dc80854d3", null ], - [ "Conn_1G_3M2", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09ac9f94cd9712345011133e3f353d6767b", null ], - [ "Conn_1G_4M2", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09ad7658674bdb308add65148fc7b5971b8", null ], - [ "Conn_1G_1M3", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09afe4f90df5fee0220e1a798db7647fd7d", null ], - [ "Conn_1G_2M3", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09a5bca3ec6064d9bfd3d76469f99a362b1", null ], - [ "Conn_1G_3M3", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09a13dd908c339f7903da41f07f1ad9f287", null ], - [ "Conn_1G_4M3", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09a241498be9c3c9c0bd763bdbb40343c2f", null ], - [ "Conn_1G_1M1_1M2", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09a161f7773a818977130de9bbae7e0c29c", null ], - [ "Conn_1G_1M1_1M3", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09a4417555c9e82dacb504a1f8fa65ce184", null ], - [ "Conn_2G_1M1", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09a81868433fc1c227c2b2f092d6ba5aecc", null ], - [ "Conn_2G_2M1", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09a99cec71fb9658428821d5ecfc06ccdca", null ], - [ "Conn_2G_3M1", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09a8c2fccbc742c4481016c929e3bc808a4", null ], - [ "Conn_2G_4M1", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09a3ae0e98f919f04441761d9aff0a3fc3f", null ], - [ "Conn_2G_1M2", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09ae431e08e829741eb6992ecfe6d464360", null ], - [ "Conn_2G_2M2", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09a9586040422a6c37ab3da961996119a69", null ], - [ "Conn_2G_3M2", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09ae6923cb9aeeea913ccb53a59ad6ea8a1", null ], - [ "Conn_2G_4M2", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09a9234e5b8cd02089dc011e4a950bfc3e7", null ], - [ "Conn_2G_1M3", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09aaf63ccf852a540b5b7c41b2866d15756", null ], - [ "Conn_2G_2M3", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09a7c2702a8fece7e2c51ebd8ed4878245e", null ], - [ "Conn_2G_3M3", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09a021403dab5c8784b84e36805b53f3642", null ], - [ "Conn_2G_4M3", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09adba96b37387676b5535427e867581903", null ], - [ "Conn_2G_1M1_1M2", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09ad48deab091a6d7c42d150c0707fc1e0e", null ], - [ "Conn_3G_1M1", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09af4f88e1fc417775dba1eaad705d13b07", null ], - [ "Conn_3G_2M1", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09a4ad16389472456a12d79ee22289ae493", null ], - [ "Conn_3G_3M1", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09a526cd3bc2b0f967e20c73caa911d82bb", null ], - [ "Conn_3G_4M1", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09a908dacb2f4fed0c9a67f202fc72f8178", null ], - [ "Conn_3G_1M2", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09aa0108e92c5dbe396fe3c6f3addc3b1ba", null ], - [ "Conn_3G_1M3", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09a89ecaab2c989c9b83b3d3385bbe50fcc", null ], - [ "Conn_3G_2M3", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09ac7df07258767867ac3e1d312d08e43b1", null ], - [ "Conn_3G_3M3", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09aef00538c3c9282c0b80e0762f01ab901", null ], - [ "Conn_3G_4M3", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09a5bb0e1f5536c473a0873b72e1e51b3d3", null ], - [ "Conn_4G_1M1", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09a09b7b35e52b234bac7b720edaca69981", null ], - [ "Conn_4G_2M1", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09a06bfda69da36f3b9eb94f570c3380b91", null ], - [ "Conn_4G_3M1", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09aee145feb6eff2ff25741230b21e3d12f", null ], - [ "Conn_4G_4M1", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09a7f2b134e303cf06ff5c3f258071d5cbc", null ], - [ "Conn_4G_1M3", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09a64986f76efdd194572dbc76fb89ee2d8", null ], - [ "Conn_1G_1Pad", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09abd230e3b3f0a67bf833d411f588892a9", null ], - [ "Conn_2G_1Pad", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09a0c7589037c97e2acf305dc7b67fb9d50", null ], - [ "Conn_3G_1Pad", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09abcfc9a4a9d3de182650dfdd982be6105", null ], - [ "Conn_1G_1PinM2", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09ae700aa84d63dd80bdfcf7d50a37186f2", null ], - [ "Global_Vertical_End", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#a13d3c4a7c0719a5d790effa30f00b224a6fcb4a9f0e24e3fb2e973e55d13b5374", null ], - [ "Global_Horizontal_End", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#a13d3c4a7c0719a5d790effa30f00b224a044eafff0a7736561c4c8bc63f030ae0", null ], - [ "Global_Horizontal", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#a13d3c4a7c0719a5d790effa30f00b224a5d582471dcbd6ebb373c12d87b8a39bc", null ], - [ "Global_Vertical", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#a13d3c4a7c0719a5d790effa30f00b224a19ba6adcc473acc1a80f62d26d43361a", null ], - [ "Global_Turn", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#a13d3c4a7c0719a5d790effa30f00b224a4bc04ec84fb36addfd2ddb44e13e25e8", null ], - [ "Global_Fork", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#a13d3c4a7c0719a5d790effa30f00b224a7ac122d4fb67c4deb4d1570c52320b06", null ], - [ "Global_Fixed", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#a13d3c4a7c0719a5d790effa30f00b224ac80b66ee99890595e7c12a34d5a6a160", null ], - [ "Global_End", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#a13d3c4a7c0719a5d790effa30f00b224a0442dcf47df62cdf41d01bc5b946f9a3", null ], - [ "Global_Split", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#a13d3c4a7c0719a5d790effa30f00b224a50534324a00a39829a06d3857d61bba2", [ - [ "GlobalBSize", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#a2c33c0744f4505f00ea53267d8c43671ab38b89586aa076084463d811d57c4538", null ], - [ "Metal1BSize", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#a2c33c0744f4505f00ea53267d8c43671a1bc99bdfbb7c7eb0a23dbbf565623e71", null ], - [ "Metal2BSize", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#a2c33c0744f4505f00ea53267d8c43671af87734f9fd84df9f517feb68fb867c22", null ], - [ "Metal3BSize", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#a2c33c0744f4505f00ea53267d8c43671a420ba170a2d36eaa47b22bf5ceb9e458", null ], - [ "PadsBSize", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#a2c33c0744f4505f00ea53267d8c43671a7ef87c54403dd66454c7411a1f3d4bd8", null ], - [ "PinsBSize", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#a2c33c0744f4505f00ea53267d8c43671a7adf03a9c34bbfd59290d3dda7e990d8", null ], - [ "Conn_0G", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09a8c105dd8387ef3c29c243ded9e55c372", null ], - [ "Conn_2G", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09a1d5a7130758b852a95833140de780475", null ], - [ "Conn_3G", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09ad977b4b2276732d3cc05e8b1c17dc6d4", null ], - [ "Conn_4G", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09a637bc3b85f96cc76a0e6d47bb80ed5d5", null ], - [ "Conn_0G_2M1", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09a3f1932697ce50b72fd6d364d6256922e", null ], - [ "Conn_1G_1M1", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09a46b005118049b7fc71b8382f0ecb2720", null ], - [ "Conn_1G_2M1", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09ab924f41355642e8cca84986cce13cf89", null ], - [ "Conn_1G_3M1", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09ae2c23ae412efaaffe3e8132809056f25", null ], - [ "Conn_1G_4M1", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09aca6d194230c7219b18b640a56ce7bf02", null ], - [ "Conn_1G_1M2", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09aede39c48e16c290d770e1844e3bc97da", null ], - [ "Conn_1G_2M2", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09ab9be49382c9d81ba7b50ad5dc80854d3", null ], - [ "Conn_1G_3M2", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09ac9f94cd9712345011133e3f353d6767b", null ], - [ "Conn_1G_4M2", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09ad7658674bdb308add65148fc7b5971b8", null ], - [ "Conn_1G_1M3", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09afe4f90df5fee0220e1a798db7647fd7d", null ], - [ "Conn_1G_2M3", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09a5bca3ec6064d9bfd3d76469f99a362b1", null ], - [ "Conn_1G_3M3", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09a13dd908c339f7903da41f07f1ad9f287", null ], - [ "Conn_1G_4M3", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09a241498be9c3c9c0bd763bdbb40343c2f", null ], - [ "Conn_1G_1M1_1M2", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09a161f7773a818977130de9bbae7e0c29c", null ], - [ "Conn_1G_1M1_1M3", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09a4417555c9e82dacb504a1f8fa65ce184", null ], - [ "Conn_2G_1M1", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09a81868433fc1c227c2b2f092d6ba5aecc", null ], - [ "Conn_2G_2M1", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09a99cec71fb9658428821d5ecfc06ccdca", null ], - [ "Conn_2G_3M1", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09a8c2fccbc742c4481016c929e3bc808a4", null ], - [ "Conn_2G_4M1", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09a3ae0e98f919f04441761d9aff0a3fc3f", null ], - [ "Conn_2G_1M2", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09ae431e08e829741eb6992ecfe6d464360", null ], - [ "Conn_2G_2M2", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09a9586040422a6c37ab3da961996119a69", null ], - [ "Conn_2G_3M2", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09ae6923cb9aeeea913ccb53a59ad6ea8a1", null ], - [ "Conn_2G_4M2", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09a9234e5b8cd02089dc011e4a950bfc3e7", null ], - [ "Conn_2G_1M3", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09aaf63ccf852a540b5b7c41b2866d15756", null ], - [ "Conn_2G_2M3", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09a7c2702a8fece7e2c51ebd8ed4878245e", null ], - [ "Conn_2G_3M3", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09a021403dab5c8784b84e36805b53f3642", null ], - [ "Conn_2G_4M3", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09adba96b37387676b5535427e867581903", null ], - [ "Conn_2G_1M1_1M2", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09ad48deab091a6d7c42d150c0707fc1e0e", null ], - [ "Conn_3G_1M1", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09af4f88e1fc417775dba1eaad705d13b07", null ], - [ "Conn_3G_2M1", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09a4ad16389472456a12d79ee22289ae493", null ], - [ "Conn_3G_3M1", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09a526cd3bc2b0f967e20c73caa911d82bb", null ], - [ "Conn_3G_4M1", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09a908dacb2f4fed0c9a67f202fc72f8178", null ], - [ "Conn_3G_1M2", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09aa0108e92c5dbe396fe3c6f3addc3b1ba", null ], - [ "Conn_3G_1M3", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09a89ecaab2c989c9b83b3d3385bbe50fcc", null ], - [ "Conn_3G_2M3", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09ac7df07258767867ac3e1d312d08e43b1", null ], - [ "Conn_3G_3M3", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09aef00538c3c9282c0b80e0762f01ab901", null ], - [ "Conn_3G_4M3", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09a5bb0e1f5536c473a0873b72e1e51b3d3", null ], - [ "Conn_4G_1M1", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09a09b7b35e52b234bac7b720edaca69981", null ], - [ "Conn_4G_2M1", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09a06bfda69da36f3b9eb94f570c3380b91", null ], - [ "Conn_4G_3M1", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09aee145feb6eff2ff25741230b21e3d12f", null ], - [ "Conn_4G_4M1", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09a7f2b134e303cf06ff5c3f258071d5cbc", null ], - [ "Conn_4G_1M3", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09a64986f76efdd194572dbc76fb89ee2d8", null ], - [ "Conn_1G_1Pad", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09abd230e3b3f0a67bf833d411f588892a9", null ], - [ "Conn_2G_1Pad", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09a0c7589037c97e2acf305dc7b67fb9d50", null ], - [ "Conn_3G_1Pad", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09abcfc9a4a9d3de182650dfdd982be6105", null ], - [ "Conn_1G_1PinM2", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#aa099db40867ea18e3963e077893c7d09ae700aa84d63dd80bdfcf7d50a37186f2", null ], - [ "Global_Vertical_End", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#a13d3c4a7c0719a5d790effa30f00b224a6fcb4a9f0e24e3fb2e973e55d13b5374", null ], - [ "Global_Horizontal_End", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#a13d3c4a7c0719a5d790effa30f00b224a044eafff0a7736561c4c8bc63f030ae0", null ], - [ "Global_Horizontal", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#a13d3c4a7c0719a5d790effa30f00b224a5d582471dcbd6ebb373c12d87b8a39bc", null ], - [ "Global_Vertical", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#a13d3c4a7c0719a5d790effa30f00b224a19ba6adcc473acc1a80f62d26d43361a", null ], - [ "Global_Turn", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#a13d3c4a7c0719a5d790effa30f00b224a4bc04ec84fb36addfd2ddb44e13e25e8", null ], - [ "Global_Fork", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#a13d3c4a7c0719a5d790effa30f00b224a7ac122d4fb67c4deb4d1570c52320b06", null ], - [ "Global_Fixed", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#a13d3c4a7c0719a5d790effa30f00b224ac80b66ee99890595e7c12a34d5a6a160", null ], - [ "Global_End", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#a13d3c4a7c0719a5d790effa30f00b224a0442dcf47df62cdf41d01bc5b946f9a3", null ], - [ "Global_Split", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html#a13d3c4a7c0719a5d790effa30f00b224a50534324a00a39829a06d3857d61bba2", null ] - ] ], - [ "doRp_AutoContacts", "group__LoadGlobalRouting.html#gae9cae408ea16a3f7c77c3d75f0242f19", null ], - [ "doRp_Access", "group__LoadGlobalRouting.html#gada6d3c694b8d741b6504b7c3da166357", null ], - [ "doRp_StairCaseH", "group__LoadGlobalRouting.html#ga3291d84592215974fe4052c00304bdb1", null ], - [ "doRp_StairCaseV", "group__LoadGlobalRouting.html#ga6361fb0e90f35cd59063a1ee971ef2a9", null ], - [ "_do_xG", "group__LoadGlobalRouting.html#gaaa6d4ccd2eadfb6bc3e2cc98cfaf2cca", null ], - [ "_do_1G_1M1", "group__LoadGlobalRouting.html#gad24a03e87e269f16dcc28d8c2d9f1cfb", null ], - [ "_do_1G_xM1", "group__LoadGlobalRouting.html#ga97942453a1bc5b01106aa380271fd7fc", null ], - [ "_do_xG_xM1_xM3", "group__LoadGlobalRouting.html#gaf9b009520f54099668ac9d12f2c85257", null ], - [ "_do_xG_1M1_1M2", "group__LoadGlobalRouting.html#gae60ed4e27ad89a1e2ff2cd6415ef33f1", null ], - [ "_do_xG_xM2", "group__LoadGlobalRouting.html#ga532d1c6b530e0375078ea2d6ea3c6024", null ], - [ "_do_1G_1M3", "group__LoadGlobalRouting.html#ga2519ef984b3d19f123827a9b12651672", null ], - [ "_do_xG_xM3", "group__LoadGlobalRouting.html#ga007efc725aae31782204a44949765cb4", null ] -]; \ No newline at end of file diff --git a/deprecated/katabatic/doc/html/classes.html b/deprecated/katabatic/doc/html/classes.html deleted file mode 100644 index d1ef0173..00000000 --- a/deprecated/katabatic/doc/html/classes.html +++ /dev/null @@ -1,96 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -
    -
    Class Index
    -
    - -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/closed.png b/deprecated/katabatic/doc/html/closed.png deleted file mode 100644 index e4e2b25a..00000000 Binary files a/deprecated/katabatic/doc/html/closed.png and /dev/null differ diff --git a/deprecated/katabatic/doc/html/customHierarchy.html b/deprecated/katabatic/doc/html/customHierarchy.html deleted file mode 100644 index 3c5a145b..00000000 --- a/deprecated/katabatic/doc/html/customHierarchy.html +++ /dev/null @@ -1,65 +0,0 @@ -
    -

    The complete class hierarchy could be accessed here.

    -

    All the classes below are in the Katabatic namespace.

    -

    The inheritance tree has been splitted/simplificated.

    - Legend :
    -
    -      
    -        
    -        
    -      
    ClassA  ClassA is abstract
    ClassB  ClassB is instanciable
    -
    -
    - -

    Utilities

    - -
    BaseObserver -
    - -
    Observer -
    - -
    Observable -
    - -

    Katabatic Engine

    - -
    Katabatic -
    ChipTools -
    KatabaticEngine -
    Session -
    DataAlgorithm -
    - -

    Contacts

    - -
    AutoContact -
    - -
    AutoContactTerminal -
    AutoContactTurn -
    AutoContactHTee -
    AutoContactVTee -
    - -

    Segments

    - -
    AutoSegment -
    - -
    AutoHorizontal -
    AutoVertical -
    - -

    GCell

    - -
    GCell -
    BaseGrid::Axis -
    BaseGrid -
    - -
    Grid -
    - -
    GCellGrid -
    diff --git a/deprecated/katabatic/doc/html/dir_46a5d811a0c60e95b7acaa92d73c003a.html b/deprecated/katabatic/doc/html/dir_46a5d811a0c60e95b7acaa92d73c003a.html deleted file mode 100644 index 5f57f4e3..00000000 --- a/deprecated/katabatic/doc/html/dir_46a5d811a0c60e95b7acaa92d73c003a.html +++ /dev/null @@ -1,63 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - - -
    -
    -
    katabatic Directory Reference
    -
    -
    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/dir_46a5d811a0c60e95b7acaa92d73c003a_dep.map b/deprecated/katabatic/doc/html/dir_46a5d811a0c60e95b7acaa92d73c003a_dep.map deleted file mode 100644 index f64f0bfd..00000000 --- a/deprecated/katabatic/doc/html/dir_46a5d811a0c60e95b7acaa92d73c003a_dep.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/deprecated/katabatic/doc/html/dir_46a5d811a0c60e95b7acaa92d73c003a_dep.md5 b/deprecated/katabatic/doc/html/dir_46a5d811a0c60e95b7acaa92d73c003a_dep.md5 deleted file mode 100644 index a5d223f9..00000000 --- a/deprecated/katabatic/doc/html/dir_46a5d811a0c60e95b7acaa92d73c003a_dep.md5 +++ /dev/null @@ -1 +0,0 @@ -fa1a55e6a4c9f786ecb0836d43a732d6 \ No newline at end of file diff --git a/deprecated/katabatic/doc/html/dir_46a5d811a0c60e95b7acaa92d73c003a_dep.png b/deprecated/katabatic/doc/html/dir_46a5d811a0c60e95b7acaa92d73c003a_dep.png deleted file mode 100644 index 4256ae8f..00000000 Binary files a/deprecated/katabatic/doc/html/dir_46a5d811a0c60e95b7acaa92d73c003a_dep.png and /dev/null differ diff --git a/deprecated/katabatic/doc/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html b/deprecated/katabatic/doc/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html deleted file mode 100644 index f85665f6..00000000 --- a/deprecated/katabatic/doc/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html +++ /dev/null @@ -1,67 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - - -
    -
    -
    src Directory Reference
    -
    -
    - - -

    -Directories

    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.map b/deprecated/katabatic/doc/html/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.map deleted file mode 100644 index fc0f16e2..00000000 --- a/deprecated/katabatic/doc/html/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/deprecated/katabatic/doc/html/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.md5 b/deprecated/katabatic/doc/html/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.md5 deleted file mode 100644 index 4bbbe8c1..00000000 --- a/deprecated/katabatic/doc/html/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.md5 +++ /dev/null @@ -1 +0,0 @@ -182a22a1f2ab4703b284d09b35f11000 \ No newline at end of file diff --git a/deprecated/katabatic/doc/html/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.png b/deprecated/katabatic/doc/html/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.png deleted file mode 100644 index 076f1ca5..00000000 Binary files a/deprecated/katabatic/doc/html/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.png and /dev/null differ diff --git a/deprecated/katabatic/doc/html/doRp_Access.png b/deprecated/katabatic/doc/html/doRp_Access.png deleted file mode 100644 index bc6c3fd1..00000000 Binary files a/deprecated/katabatic/doc/html/doRp_Access.png and /dev/null differ diff --git a/deprecated/katabatic/doc/html/doRp_AutoContacts.png b/deprecated/katabatic/doc/html/doRp_AutoContacts.png deleted file mode 100644 index 6bb6b5b9..00000000 Binary files a/deprecated/katabatic/doc/html/doRp_AutoContacts.png and /dev/null differ diff --git a/deprecated/katabatic/doc/html/doRp_StairCaseH.png b/deprecated/katabatic/doc/html/doRp_StairCaseH.png deleted file mode 100644 index f175a996..00000000 Binary files a/deprecated/katabatic/doc/html/doRp_StairCaseH.png and /dev/null differ diff --git a/deprecated/katabatic/doc/html/doRp_StairCaseV.png b/deprecated/katabatic/doc/html/doRp_StairCaseV.png deleted file mode 100644 index 53c92bee..00000000 Binary files a/deprecated/katabatic/doc/html/doRp_StairCaseV.png and /dev/null differ diff --git a/deprecated/katabatic/doc/html/doc.png b/deprecated/katabatic/doc/html/doc.png deleted file mode 100644 index 17edabff..00000000 Binary files a/deprecated/katabatic/doc/html/doc.png and /dev/null differ diff --git a/deprecated/katabatic/doc/html/doxygen.png b/deprecated/katabatic/doc/html/doxygen.png deleted file mode 100644 index 3ff17d80..00000000 Binary files a/deprecated/katabatic/doc/html/doxygen.png and /dev/null differ diff --git a/deprecated/katabatic/doc/html/dynsections.js b/deprecated/katabatic/doc/html/dynsections.js deleted file mode 100644 index c1ce1226..00000000 --- a/deprecated/katabatic/doc/html/dynsections.js +++ /dev/null @@ -1,120 +0,0 @@ -/* - @licstart The following is the entire license notice for the - JavaScript code in this file. - - Copyright (C) 1997-2017 by Dimitri van Heesch - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - - @licend The above is the entire license notice - for the JavaScript code in this file - */ -function toggleVisibility(linkObj) -{ - var base = $(linkObj).attr('id'); - var summary = $('#'+base+'-summary'); - var content = $('#'+base+'-content'); - var trigger = $('#'+base+'-trigger'); - var src=$(trigger).attr('src'); - if (content.is(':visible')===true) { - content.hide(); - summary.show(); - $(linkObj).addClass('closed').removeClass('opened'); - $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); - } else { - content.show(); - summary.hide(); - $(linkObj).removeClass('closed').addClass('opened'); - $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); - } - return false; -} - -function updateStripes() -{ - $('table.directory tr'). - removeClass('even').filter(':visible:even').addClass('even'); -} - -function toggleLevel(level) -{ - $('table.directory tr').each(function() { - var l = this.id.split('_').length-1; - var i = $('#img'+this.id.substring(3)); - var a = $('#arr'+this.id.substring(3)); - if (l - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -
    -
    File List
    -
    -
    -
    Here is a list of all documented files with brief descriptions:
    - - - - - - - - - - - - - - - - - - - -
     AutoContact.h
     AutoContactHTee.h
     AutoContactTerminal.h
     AutoContactTurn.h
     AutoContactVTee.h
     AutoHorizontal.h
     AutoSegment.h
     AutoSegments.h
     AutoVertical.h
     ChipTools.h
     Constants.h
     GCell.h
     GCellGrid.h
     GCells.h
     Grid.h
     KatabaticEngine.h
     Observer.h
     Session.h
    -
    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/files.js b/deprecated/katabatic/doc/html/files.js deleted file mode 100644 index 112f153d..00000000 --- a/deprecated/katabatic/doc/html/files.js +++ /dev/null @@ -1,21 +0,0 @@ -var files = -[ - [ "AutoContact.h", "AutoContact_8h_source.html", null ], - [ "AutoContactHTee.h", "AutoContactHTee_8h_source.html", null ], - [ "AutoContactTerminal.h", "AutoContactTerminal_8h_source.html", null ], - [ "AutoContactTurn.h", "AutoContactTurn_8h_source.html", null ], - [ "AutoContactVTee.h", "AutoContactVTee_8h_source.html", null ], - [ "AutoHorizontal.h", "AutoHorizontal_8h_source.html", null ], - [ "AutoSegment.h", "AutoSegment_8h_source.html", null ], - [ "AutoSegments.h", "AutoSegments_8h_source.html", null ], - [ "AutoVertical.h", "AutoVertical_8h_source.html", null ], - [ "ChipTools.h", "ChipTools_8h_source.html", null ], - [ "Constants.h", "Constants_8h_source.html", null ], - [ "GCell.h", "GCell_8h_source.html", null ], - [ "GCellGrid.h", "GCellGrid_8h_source.html", null ], - [ "GCells.h", "GCells_8h_source.html", null ], - [ "Grid.h", "Grid_8h_source.html", null ], - [ "KatabaticEngine.h", "KatabaticEngine_8h_source.html", null ], - [ "Observer.h", "Observer_8h_source.html", null ], - [ "Session.h", "Session_8h_source.html", null ] -]; \ No newline at end of file diff --git a/deprecated/katabatic/doc/html/folderclosed.png b/deprecated/katabatic/doc/html/folderclosed.png deleted file mode 100644 index bb8ab35e..00000000 Binary files a/deprecated/katabatic/doc/html/folderclosed.png and /dev/null differ diff --git a/deprecated/katabatic/doc/html/folderopen.png b/deprecated/katabatic/doc/html/folderopen.png deleted file mode 100644 index d6c7f676..00000000 Binary files a/deprecated/katabatic/doc/html/folderopen.png and /dev/null differ diff --git a/deprecated/katabatic/doc/html/form_0.png b/deprecated/katabatic/doc/html/form_0.png deleted file mode 100644 index 127b3247..00000000 Binary files a/deprecated/katabatic/doc/html/form_0.png and /dev/null differ diff --git a/deprecated/katabatic/doc/html/form_1.png b/deprecated/katabatic/doc/html/form_1.png deleted file mode 100644 index 29f97cf2..00000000 Binary files a/deprecated/katabatic/doc/html/form_1.png and /dev/null differ diff --git a/deprecated/katabatic/doc/html/form_2.png b/deprecated/katabatic/doc/html/form_2.png deleted file mode 100644 index e4543773..00000000 Binary files a/deprecated/katabatic/doc/html/form_2.png and /dev/null differ diff --git a/deprecated/katabatic/doc/html/form_3.png b/deprecated/katabatic/doc/html/form_3.png deleted file mode 100644 index 7a40af42..00000000 Binary files a/deprecated/katabatic/doc/html/form_3.png and /dev/null differ diff --git a/deprecated/katabatic/doc/html/form_4.png b/deprecated/katabatic/doc/html/form_4.png deleted file mode 100644 index fd230790..00000000 Binary files a/deprecated/katabatic/doc/html/form_4.png and /dev/null differ diff --git a/deprecated/katabatic/doc/html/form_5.png b/deprecated/katabatic/doc/html/form_5.png deleted file mode 100644 index 6ab22ccd..00000000 Binary files a/deprecated/katabatic/doc/html/form_5.png and /dev/null differ diff --git a/deprecated/katabatic/doc/html/form_6.png b/deprecated/katabatic/doc/html/form_6.png deleted file mode 100644 index e485faf5..00000000 Binary files a/deprecated/katabatic/doc/html/form_6.png and /dev/null differ diff --git a/deprecated/katabatic/doc/html/form_7.png b/deprecated/katabatic/doc/html/form_7.png deleted file mode 100644 index e16acb86..00000000 Binary files a/deprecated/katabatic/doc/html/form_7.png and /dev/null differ diff --git a/deprecated/katabatic/doc/html/form_8.png b/deprecated/katabatic/doc/html/form_8.png deleted file mode 100644 index 80ad5622..00000000 Binary files a/deprecated/katabatic/doc/html/form_8.png and /dev/null differ diff --git a/deprecated/katabatic/doc/html/form_9.png b/deprecated/katabatic/doc/html/form_9.png deleted file mode 100644 index 386df62d..00000000 Binary files a/deprecated/katabatic/doc/html/form_9.png and /dev/null differ diff --git a/deprecated/katabatic/doc/html/formula.repository b/deprecated/katabatic/doc/html/formula.repository deleted file mode 100644 index 7d031e1f..00000000 --- a/deprecated/katabatic/doc/html/formula.repository +++ /dev/null @@ -1,10 +0,0 @@ -\form#0:\[ WL_{max} = width(GCell) \times Htracks(GCell) \] -\form#1:$WL_{max}$ -\form#2:\[ Wdensity(depth) = \frac{WL_{used}(depth)}{WL_{max}(depth)} \] -\form#3:\[ Cont_{density} = \frac{|Contacts|}{Htracks \times Vtracks \times 4} \] -\form#4:\[ Htracks = \frac{heigth(GCell)}{Vpitch} + 1 \] -\form#5:$(density(depth),id)$ -\form#6:$ rows \times columns $ -\form#7:\[ index = c + r \times columns \] -\form#8:\[ row = index / columns \] -\form#9:\[ column = index \div columns \] diff --git a/deprecated/katabatic/doc/html/ftv2blank.png b/deprecated/katabatic/doc/html/ftv2blank.png deleted file mode 100644 index 63c605bb..00000000 Binary files a/deprecated/katabatic/doc/html/ftv2blank.png and /dev/null differ diff --git a/deprecated/katabatic/doc/html/ftv2cl.png b/deprecated/katabatic/doc/html/ftv2cl.png deleted file mode 100644 index 132f6577..00000000 Binary files a/deprecated/katabatic/doc/html/ftv2cl.png and /dev/null differ diff --git a/deprecated/katabatic/doc/html/ftv2doc.png b/deprecated/katabatic/doc/html/ftv2doc.png deleted file mode 100644 index 17edabff..00000000 Binary files a/deprecated/katabatic/doc/html/ftv2doc.png and /dev/null differ diff --git a/deprecated/katabatic/doc/html/ftv2folderclosed.png b/deprecated/katabatic/doc/html/ftv2folderclosed.png deleted file mode 100644 index bb8ab35e..00000000 Binary files a/deprecated/katabatic/doc/html/ftv2folderclosed.png and /dev/null differ diff --git a/deprecated/katabatic/doc/html/ftv2folderopen.png b/deprecated/katabatic/doc/html/ftv2folderopen.png deleted file mode 100644 index d6c7f676..00000000 Binary files a/deprecated/katabatic/doc/html/ftv2folderopen.png and /dev/null differ diff --git a/deprecated/katabatic/doc/html/ftv2lastnode.png b/deprecated/katabatic/doc/html/ftv2lastnode.png deleted file mode 100644 index 63c605bb..00000000 Binary files a/deprecated/katabatic/doc/html/ftv2lastnode.png and /dev/null differ diff --git a/deprecated/katabatic/doc/html/ftv2link.png b/deprecated/katabatic/doc/html/ftv2link.png deleted file mode 100644 index 17edabff..00000000 Binary files a/deprecated/katabatic/doc/html/ftv2link.png and /dev/null differ diff --git a/deprecated/katabatic/doc/html/ftv2mlastnode.png b/deprecated/katabatic/doc/html/ftv2mlastnode.png deleted file mode 100644 index 0b63f6d3..00000000 Binary files a/deprecated/katabatic/doc/html/ftv2mlastnode.png and /dev/null differ diff --git a/deprecated/katabatic/doc/html/ftv2mnode.png b/deprecated/katabatic/doc/html/ftv2mnode.png deleted file mode 100644 index 0b63f6d3..00000000 Binary files a/deprecated/katabatic/doc/html/ftv2mnode.png and /dev/null differ diff --git a/deprecated/katabatic/doc/html/ftv2mo.png b/deprecated/katabatic/doc/html/ftv2mo.png deleted file mode 100644 index 4bfb80f7..00000000 Binary files a/deprecated/katabatic/doc/html/ftv2mo.png and /dev/null differ diff --git a/deprecated/katabatic/doc/html/ftv2node.png b/deprecated/katabatic/doc/html/ftv2node.png deleted file mode 100644 index 63c605bb..00000000 Binary files a/deprecated/katabatic/doc/html/ftv2node.png and /dev/null differ diff --git a/deprecated/katabatic/doc/html/ftv2ns.png b/deprecated/katabatic/doc/html/ftv2ns.png deleted file mode 100644 index 72e3d71c..00000000 Binary files a/deprecated/katabatic/doc/html/ftv2ns.png and /dev/null differ diff --git a/deprecated/katabatic/doc/html/ftv2plastnode.png b/deprecated/katabatic/doc/html/ftv2plastnode.png deleted file mode 100644 index c6ee22f9..00000000 Binary files a/deprecated/katabatic/doc/html/ftv2plastnode.png and /dev/null differ diff --git a/deprecated/katabatic/doc/html/ftv2pnode.png b/deprecated/katabatic/doc/html/ftv2pnode.png deleted file mode 100644 index c6ee22f9..00000000 Binary files a/deprecated/katabatic/doc/html/ftv2pnode.png and /dev/null differ diff --git a/deprecated/katabatic/doc/html/ftv2splitbar.png b/deprecated/katabatic/doc/html/ftv2splitbar.png deleted file mode 100644 index fe895f2c..00000000 Binary files a/deprecated/katabatic/doc/html/ftv2splitbar.png and /dev/null differ diff --git a/deprecated/katabatic/doc/html/ftv2vertline.png b/deprecated/katabatic/doc/html/ftv2vertline.png deleted file mode 100644 index 63c605bb..00000000 Binary files a/deprecated/katabatic/doc/html/ftv2vertline.png and /dev/null differ diff --git a/deprecated/katabatic/doc/html/functions.html b/deprecated/katabatic/doc/html/functions.html deleted file mode 100644 index 7c20d1c8..00000000 --- a/deprecated/katabatic/doc/html/functions.html +++ /dev/null @@ -1,120 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -
    Here is a list of all documented class members with links to the class documentation for each member:
    - -

    - _ -

    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/functions_0x61.html b/deprecated/katabatic/doc/html/functions_0x61.html deleted file mode 100644 index d5e71c3f..00000000 --- a/deprecated/katabatic/doc/html/functions_0x61.html +++ /dev/null @@ -1,152 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -
    Here is a list of all documented class members with links to the class documentation for each member:
    - -

    - a -

    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.5 on Thu Mar 19 2020Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2016 UPMC. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/functions_0x62.html b/deprecated/katabatic/doc/html/functions_0x62.html deleted file mode 100644 index b2ae324d..00000000 --- a/deprecated/katabatic/doc/html/functions_0x62.html +++ /dev/null @@ -1,113 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -
    Here is a list of all documented class members with links to the class documentation for each member:
    - -

    - b -

    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.5 on Thu Mar 19 2020Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2016 UPMC. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/functions_0x63.html b/deprecated/katabatic/doc/html/functions_0x63.html deleted file mode 100644 index b1492b60..00000000 --- a/deprecated/katabatic/doc/html/functions_0x63.html +++ /dev/null @@ -1,188 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -
    Here is a list of all documented class members with links to the class documentation for each member:
    - -

    - c -

    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.5 on Thu Mar 19 2020Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2016 UPMC. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/functions_0x64.html b/deprecated/katabatic/doc/html/functions_0x64.html deleted file mode 100644 index 1ae619a1..00000000 --- a/deprecated/katabatic/doc/html/functions_0x64.html +++ /dev/null @@ -1,142 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -
    Here is a list of all documented class members with links to the class documentation for each member:
    - -

    - d -

    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.5 on Thu Mar 19 2020Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2016 UPMC. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/functions_0x65.html b/deprecated/katabatic/doc/html/functions_0x65.html deleted file mode 100644 index 5a77991a..00000000 --- a/deprecated/katabatic/doc/html/functions_0x65.html +++ /dev/null @@ -1,109 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -
    Here is a list of all documented class members with links to the class documentation for each member:
    - -

    - e -

    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.5 on Thu Mar 19 2020Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2016 UPMC. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/functions_0x66.html b/deprecated/katabatic/doc/html/functions_0x66.html deleted file mode 100644 index e867c093..00000000 --- a/deprecated/katabatic/doc/html/functions_0x66.html +++ /dev/null @@ -1,106 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -
    Here is a list of all documented class members with links to the class documentation for each member:
    - -

    - f -

    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.5 on Thu Mar 19 2020Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2016 UPMC. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/functions_0x67.html b/deprecated/katabatic/doc/html/functions_0x67.html deleted file mode 100644 index 39ecd149..00000000 --- a/deprecated/katabatic/doc/html/functions_0x67.html +++ /dev/null @@ -1,680 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -
    Here is a list of all documented class members with links to the class documentation for each member:
    - -

    - g -

    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.5 on Thu Mar 19 2020Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2016 UPMC. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/functions_0x68.html b/deprecated/katabatic/doc/html/functions_0x68.html deleted file mode 100644 index d0e42d50..00000000 --- a/deprecated/katabatic/doc/html/functions_0x68.html +++ /dev/null @@ -1,109 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -
    Here is a list of all documented class members with links to the class documentation for each member:
    - -

    - h -

    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.5 on Thu Mar 19 2020Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2016 UPMC. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/functions_0x69.html b/deprecated/katabatic/doc/html/functions_0x69.html deleted file mode 100644 index f723d8bb..00000000 --- a/deprecated/katabatic/doc/html/functions_0x69.html +++ /dev/null @@ -1,228 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -
    Here is a list of all documented class members with links to the class documentation for each member:
    - -

    - i -

    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.5 on Thu Mar 19 2020Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2016 UPMC. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/functions_0x6b.html b/deprecated/katabatic/doc/html/functions_0x6b.html deleted file mode 100644 index 63e62ed9..00000000 --- a/deprecated/katabatic/doc/html/functions_0x6b.html +++ /dev/null @@ -1,106 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -
    Here is a list of all documented class members with links to the class documentation for each member:
    - -

    - k -

    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.5 on Thu Mar 19 2020Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2016 UPMC. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/functions_0x6c.html b/deprecated/katabatic/doc/html/functions_0x6c.html deleted file mode 100644 index fbe6b436..00000000 --- a/deprecated/katabatic/doc/html/functions_0x6c.html +++ /dev/null @@ -1,118 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -
    Here is a list of all documented class members with links to the class documentation for each member:
    - -

    - l -

    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.5 on Thu Mar 19 2020Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2016 UPMC. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/functions_0x6d.html b/deprecated/katabatic/doc/html/functions_0x6d.html deleted file mode 100644 index b3364bf7..00000000 --- a/deprecated/katabatic/doc/html/functions_0x6d.html +++ /dev/null @@ -1,143 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -
    Here is a list of all documented class members with links to the class documentation for each member:
    - -

    - m -

    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.5 on Thu Mar 19 2020Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2016 UPMC. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/functions_0x6e.html b/deprecated/katabatic/doc/html/functions_0x6e.html deleted file mode 100644 index be8e60b2..00000000 --- a/deprecated/katabatic/doc/html/functions_0x6e.html +++ /dev/null @@ -1,110 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -
    Here is a list of all documented class members with links to the class documentation for each member:
    - -

    - n -

    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.5 on Thu Mar 19 2020Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2016 UPMC. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/functions_0x6f.html b/deprecated/katabatic/doc/html/functions_0x6f.html deleted file mode 100644 index 55b430aa..00000000 --- a/deprecated/katabatic/doc/html/functions_0x6f.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -
    Here is a list of all documented class members with links to the class documentation for each member:
    - -

    - o -

    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.5 on Thu Mar 19 2020Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2016 UPMC. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/functions_0x70.html b/deprecated/katabatic/doc/html/functions_0x70.html deleted file mode 100644 index 86772f79..00000000 --- a/deprecated/katabatic/doc/html/functions_0x70.html +++ /dev/null @@ -1,109 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -
    Here is a list of all documented class members with links to the class documentation for each member:
    - -

    - p -

    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.5 on Thu Mar 19 2020Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2016 UPMC. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/functions_0x72.html b/deprecated/katabatic/doc/html/functions_0x72.html deleted file mode 100644 index 5571b262..00000000 --- a/deprecated/katabatic/doc/html/functions_0x72.html +++ /dev/null @@ -1,146 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -
    Here is a list of all documented class members with links to the class documentation for each member:
    - -

    - r -

    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.5 on Thu Mar 19 2020Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2016 UPMC. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/functions_0x73.html b/deprecated/katabatic/doc/html/functions_0x73.html deleted file mode 100644 index 80f44e71..00000000 --- a/deprecated/katabatic/doc/html/functions_0x73.html +++ /dev/null @@ -1,226 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -
    Here is a list of all documented class members with links to the class documentation for each member:
    - -

    - s -

    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.5 on Thu Mar 19 2020Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2016 UPMC. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/functions_0x74.html b/deprecated/katabatic/doc/html/functions_0x74.html deleted file mode 100644 index 4efbd2f7..00000000 --- a/deprecated/katabatic/doc/html/functions_0x74.html +++ /dev/null @@ -1,116 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -
    Here is a list of all documented class members with links to the class documentation for each member:
    - -

    - t -

    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.5 on Thu Mar 19 2020Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2016 UPMC. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/functions_0x75.html b/deprecated/katabatic/doc/html/functions_0x75.html deleted file mode 100644 index 8129d2d6..00000000 --- a/deprecated/katabatic/doc/html/functions_0x75.html +++ /dev/null @@ -1,151 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -
    Here is a list of all documented class members with links to the class documentation for each member:
    - -

    - u -

    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.5 on Thu Mar 19 2020Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2016 UPMC. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/functions_0x78.html b/deprecated/katabatic/doc/html/functions_0x78.html deleted file mode 100644 index e6758547..00000000 --- a/deprecated/katabatic/doc/html/functions_0x78.html +++ /dev/null @@ -1,106 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -
    Here is a list of all documented class members with links to the class documentation for each member:
    - -

    - x -

    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.5 on Thu Mar 19 2020Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2016 UPMC. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/functions_0x7e.html b/deprecated/katabatic/doc/html/functions_0x7e.html deleted file mode 100644 index a5c6498c..00000000 --- a/deprecated/katabatic/doc/html/functions_0x7e.html +++ /dev/null @@ -1,65 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -
    Here is a list of all documented class members with links to the class documentation for each member:
    - -

    - ~ -

    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/functions_a.html b/deprecated/katabatic/doc/html/functions_a.html deleted file mode 100644 index afbd139a..00000000 --- a/deprecated/katabatic/doc/html/functions_a.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -
    Here is a list of all documented class members with links to the class documentation for each member:
    - -

    - a -

    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/functions_b.html b/deprecated/katabatic/doc/html/functions_b.html deleted file mode 100644 index 535d5b84..00000000 --- a/deprecated/katabatic/doc/html/functions_b.html +++ /dev/null @@ -1,68 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -
    Here is a list of all documented class members with links to the class documentation for each member:
    - -

    - b -

    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/functions_c.html b/deprecated/katabatic/doc/html/functions_c.html deleted file mode 100644 index a1ff5608..00000000 --- a/deprecated/katabatic/doc/html/functions_c.html +++ /dev/null @@ -1,144 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -
    Here is a list of all documented class members with links to the class documentation for each member:
    - -

    - c -

    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/functions_d.html b/deprecated/katabatic/doc/html/functions_d.html deleted file mode 100644 index 1fc0e157..00000000 --- a/deprecated/katabatic/doc/html/functions_d.html +++ /dev/null @@ -1,98 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -
    Here is a list of all documented class members with links to the class documentation for each member:
    - -

    - d -

    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/functions_dup.js b/deprecated/katabatic/doc/html/functions_dup.js deleted file mode 100644 index 5e3f9537..00000000 --- a/deprecated/katabatic/doc/html/functions_dup.js +++ /dev/null @@ -1,25 +0,0 @@ -var functions_dup = -[ - [ "_", "functions.html", null ], - [ "a", "functions_0x61.html", null ], - [ "b", "functions_0x62.html", null ], - [ "c", "functions_0x63.html", null ], - [ "d", "functions_0x64.html", null ], - [ "e", "functions_0x65.html", null ], - [ "f", "functions_0x66.html", null ], - [ "g", "functions_0x67.html", null ], - [ "h", "functions_0x68.html", null ], - [ "i", "functions_0x69.html", null ], - [ "k", "functions_0x6b.html", null ], - [ "l", "functions_0x6c.html", null ], - [ "m", "functions_0x6d.html", null ], - [ "n", "functions_0x6e.html", null ], - [ "o", "functions_0x6f.html", null ], - [ "p", "functions_0x70.html", null ], - [ "r", "functions_0x72.html", null ], - [ "s", "functions_0x73.html", null ], - [ "t", "functions_0x74.html", null ], - [ "u", "functions_0x75.html", null ], - [ "x", "functions_0x78.html", null ], - [ "~", "functions_0x7e.html", null ] -]; \ No newline at end of file diff --git a/deprecated/katabatic/doc/html/functions_e.html b/deprecated/katabatic/doc/html/functions_e.html deleted file mode 100644 index 452e1a59..00000000 --- a/deprecated/katabatic/doc/html/functions_e.html +++ /dev/null @@ -1,65 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -
    Here is a list of all documented class members with links to the class documentation for each member:
    - -

    - e -

    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/functions_enum.html b/deprecated/katabatic/doc/html/functions_enum.html deleted file mode 100644 index a0b55119..00000000 --- a/deprecated/katabatic/doc/html/functions_enum.html +++ /dev/null @@ -1,60 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/functions_eval.html b/deprecated/katabatic/doc/html/functions_eval.html deleted file mode 100644 index eb82050c..00000000 --- a/deprecated/katabatic/doc/html/functions_eval.html +++ /dev/null @@ -1,78 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/functions_f.html b/deprecated/katabatic/doc/html/functions_f.html deleted file mode 100644 index c354bc25..00000000 --- a/deprecated/katabatic/doc/html/functions_f.html +++ /dev/null @@ -1,62 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -
    Here is a list of all documented class members with links to the class documentation for each member:
    - -

    - f -

    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/functions_func.html b/deprecated/katabatic/doc/html/functions_func.html deleted file mode 100644 index c5cf045a..00000000 --- a/deprecated/katabatic/doc/html/functions_func.html +++ /dev/null @@ -1,120 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -  - -

    - _ -

    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/functions_func.js b/deprecated/katabatic/doc/html/functions_func.js deleted file mode 100644 index 83f7dd0b..00000000 --- a/deprecated/katabatic/doc/html/functions_func.js +++ /dev/null @@ -1,25 +0,0 @@ -var functions_func = -[ - [ "_", "functions_func.html", null ], - [ "a", "functions_func_0x61.html", null ], - [ "b", "functions_func_0x62.html", null ], - [ "c", "functions_func_0x63.html", null ], - [ "d", "functions_func_0x64.html", null ], - [ "e", "functions_func_0x65.html", null ], - [ "f", "functions_func_0x66.html", null ], - [ "g", "functions_func_0x67.html", null ], - [ "h", "functions_func_0x68.html", null ], - [ "i", "functions_func_0x69.html", null ], - [ "k", "functions_func_0x6b.html", null ], - [ "l", "functions_func_0x6c.html", null ], - [ "m", "functions_func_0x6d.html", null ], - [ "n", "functions_func_0x6e.html", null ], - [ "o", "functions_func_0x6f.html", null ], - [ "p", "functions_func_0x70.html", null ], - [ "r", "functions_func_0x72.html", null ], - [ "s", "functions_func_0x73.html", null ], - [ "t", "functions_func_0x74.html", null ], - [ "u", "functions_func_0x75.html", null ], - [ "x", "functions_func_0x78.html", null ], - [ "~", "functions_func_0x7e.html", null ] -]; \ No newline at end of file diff --git a/deprecated/katabatic/doc/html/functions_func_0x61.html b/deprecated/katabatic/doc/html/functions_func_0x61.html deleted file mode 100644 index 0243206a..00000000 --- a/deprecated/katabatic/doc/html/functions_func_0x61.html +++ /dev/null @@ -1,143 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -  - -

    - a -

    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.5 on Thu Mar 19 2020Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2016 UPMC. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/functions_func_0x62.html b/deprecated/katabatic/doc/html/functions_func_0x62.html deleted file mode 100644 index 4bce0a7a..00000000 --- a/deprecated/katabatic/doc/html/functions_func_0x62.html +++ /dev/null @@ -1,113 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -  - -

    - b -

    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.5 on Thu Mar 19 2020Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2016 UPMC. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/functions_func_0x63.html b/deprecated/katabatic/doc/html/functions_func_0x63.html deleted file mode 100644 index 70a170c6..00000000 --- a/deprecated/katabatic/doc/html/functions_func_0x63.html +++ /dev/null @@ -1,188 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -  - -

    - c -

    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.5 on Thu Mar 19 2020Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2016 UPMC. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/functions_func_0x64.html b/deprecated/katabatic/doc/html/functions_func_0x64.html deleted file mode 100644 index 2f0dbcd1..00000000 --- a/deprecated/katabatic/doc/html/functions_func_0x64.html +++ /dev/null @@ -1,139 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -  - -

    - d -

    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.5 on Thu Mar 19 2020Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2016 UPMC. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/functions_func_0x65.html b/deprecated/katabatic/doc/html/functions_func_0x65.html deleted file mode 100644 index 9eb39fb2..00000000 --- a/deprecated/katabatic/doc/html/functions_func_0x65.html +++ /dev/null @@ -1,109 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -  - -

    - e -

    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.5 on Thu Mar 19 2020Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2016 UPMC. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/functions_func_0x66.html b/deprecated/katabatic/doc/html/functions_func_0x66.html deleted file mode 100644 index f54eaa14..00000000 --- a/deprecated/katabatic/doc/html/functions_func_0x66.html +++ /dev/null @@ -1,106 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -  - -

    - f -

    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.5 on Thu Mar 19 2020Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2016 UPMC. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/functions_func_0x67.html b/deprecated/katabatic/doc/html/functions_func_0x67.html deleted file mode 100644 index adcc40c7..00000000 --- a/deprecated/katabatic/doc/html/functions_func_0x67.html +++ /dev/null @@ -1,680 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -  - -

    - g -

    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.5 on Thu Mar 19 2020Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2016 UPMC. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/functions_func_0x68.html b/deprecated/katabatic/doc/html/functions_func_0x68.html deleted file mode 100644 index 76a53ab0..00000000 --- a/deprecated/katabatic/doc/html/functions_func_0x68.html +++ /dev/null @@ -1,109 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -  - -

    - h -

    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.5 on Thu Mar 19 2020Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2016 UPMC. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/functions_func_0x69.html b/deprecated/katabatic/doc/html/functions_func_0x69.html deleted file mode 100644 index 1f9d5dc4..00000000 --- a/deprecated/katabatic/doc/html/functions_func_0x69.html +++ /dev/null @@ -1,228 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -  - -

    - i -

    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.5 on Thu Mar 19 2020Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2016 UPMC. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/functions_func_0x6b.html b/deprecated/katabatic/doc/html/functions_func_0x6b.html deleted file mode 100644 index 092c6c5f..00000000 --- a/deprecated/katabatic/doc/html/functions_func_0x6b.html +++ /dev/null @@ -1,106 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -  - -

    - k -

    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.5 on Thu Mar 19 2020Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2016 UPMC. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/functions_func_0x6c.html b/deprecated/katabatic/doc/html/functions_func_0x6c.html deleted file mode 100644 index 3d44b0a4..00000000 --- a/deprecated/katabatic/doc/html/functions_func_0x6c.html +++ /dev/null @@ -1,118 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -  - -

    - l -

    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.5 on Thu Mar 19 2020Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2016 UPMC. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/functions_func_0x6d.html b/deprecated/katabatic/doc/html/functions_func_0x6d.html deleted file mode 100644 index 38769987..00000000 --- a/deprecated/katabatic/doc/html/functions_func_0x6d.html +++ /dev/null @@ -1,131 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -  - -

    - m -

    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.5 on Thu Mar 19 2020Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2016 UPMC. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/functions_func_0x6e.html b/deprecated/katabatic/doc/html/functions_func_0x6e.html deleted file mode 100644 index bd7600a3..00000000 --- a/deprecated/katabatic/doc/html/functions_func_0x6e.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -  - -

    - n -

    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.5 on Thu Mar 19 2020Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2016 UPMC. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/functions_func_0x6f.html b/deprecated/katabatic/doc/html/functions_func_0x6f.html deleted file mode 100644 index 44d0e3be..00000000 --- a/deprecated/katabatic/doc/html/functions_func_0x6f.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -  - -

    - o -

    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.5 on Thu Mar 19 2020Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2016 UPMC. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/functions_func_0x70.html b/deprecated/katabatic/doc/html/functions_func_0x70.html deleted file mode 100644 index 8466ec0e..00000000 --- a/deprecated/katabatic/doc/html/functions_func_0x70.html +++ /dev/null @@ -1,109 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -  - -

    - p -

    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.5 on Thu Mar 19 2020Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2016 UPMC. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/functions_func_0x72.html b/deprecated/katabatic/doc/html/functions_func_0x72.html deleted file mode 100644 index 12e781ed..00000000 --- a/deprecated/katabatic/doc/html/functions_func_0x72.html +++ /dev/null @@ -1,146 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -  - -

    - r -

    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.5 on Thu Mar 19 2020Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2016 UPMC. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/functions_func_0x73.html b/deprecated/katabatic/doc/html/functions_func_0x73.html deleted file mode 100644 index 15ab14fb..00000000 --- a/deprecated/katabatic/doc/html/functions_func_0x73.html +++ /dev/null @@ -1,223 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -  - -

    - s -

    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.5 on Thu Mar 19 2020Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2016 UPMC. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/functions_func_0x74.html b/deprecated/katabatic/doc/html/functions_func_0x74.html deleted file mode 100644 index 39bc06f6..00000000 --- a/deprecated/katabatic/doc/html/functions_func_0x74.html +++ /dev/null @@ -1,116 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -  - -

    - t -

    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.5 on Thu Mar 19 2020Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2016 UPMC. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/functions_func_0x75.html b/deprecated/katabatic/doc/html/functions_func_0x75.html deleted file mode 100644 index 2f0f9ba7..00000000 --- a/deprecated/katabatic/doc/html/functions_func_0x75.html +++ /dev/null @@ -1,151 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -  - -

    - u -

    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.5 on Thu Mar 19 2020Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2016 UPMC. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/functions_func_0x78.html b/deprecated/katabatic/doc/html/functions_func_0x78.html deleted file mode 100644 index d8417f5c..00000000 --- a/deprecated/katabatic/doc/html/functions_func_0x78.html +++ /dev/null @@ -1,106 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -  - -

    - x -

    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.5 on Thu Mar 19 2020Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2016 UPMC. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/functions_func_0x7e.html b/deprecated/katabatic/doc/html/functions_func_0x7e.html deleted file mode 100644 index 1a2429f6..00000000 --- a/deprecated/katabatic/doc/html/functions_func_0x7e.html +++ /dev/null @@ -1,65 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -  - -

    - ~ -

    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/functions_func_a.html b/deprecated/katabatic/doc/html/functions_func_a.html deleted file mode 100644 index 0667a67d..00000000 --- a/deprecated/katabatic/doc/html/functions_func_a.html +++ /dev/null @@ -1,99 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -  - -

    - a -

    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/functions_func_b.html b/deprecated/katabatic/doc/html/functions_func_b.html deleted file mode 100644 index a3e6655c..00000000 --- a/deprecated/katabatic/doc/html/functions_func_b.html +++ /dev/null @@ -1,68 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -  - -

    - b -

    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/functions_func_c.html b/deprecated/katabatic/doc/html/functions_func_c.html deleted file mode 100644 index 08bebad6..00000000 --- a/deprecated/katabatic/doc/html/functions_func_c.html +++ /dev/null @@ -1,144 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -  - -

    - c -

    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/functions_func_d.html b/deprecated/katabatic/doc/html/functions_func_d.html deleted file mode 100644 index b308b70e..00000000 --- a/deprecated/katabatic/doc/html/functions_func_d.html +++ /dev/null @@ -1,95 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -  - -

    - d -

    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/functions_func_e.html b/deprecated/katabatic/doc/html/functions_func_e.html deleted file mode 100644 index 7ee2953c..00000000 --- a/deprecated/katabatic/doc/html/functions_func_e.html +++ /dev/null @@ -1,65 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -  - -

    - e -

    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/functions_func_f.html b/deprecated/katabatic/doc/html/functions_func_f.html deleted file mode 100644 index fe596ca6..00000000 --- a/deprecated/katabatic/doc/html/functions_func_f.html +++ /dev/null @@ -1,62 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -  - -

    - f -

    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/functions_func_g.html b/deprecated/katabatic/doc/html/functions_func_g.html deleted file mode 100644 index 98668eb6..00000000 --- a/deprecated/katabatic/doc/html/functions_func_g.html +++ /dev/null @@ -1,636 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -  - -

    - g -

    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/functions_func_h.html b/deprecated/katabatic/doc/html/functions_func_h.html deleted file mode 100644 index fe794eef..00000000 --- a/deprecated/katabatic/doc/html/functions_func_h.html +++ /dev/null @@ -1,65 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -  - -

    - h -

    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/functions_func_i.html b/deprecated/katabatic/doc/html/functions_func_i.html deleted file mode 100644 index 4e84089e..00000000 --- a/deprecated/katabatic/doc/html/functions_func_i.html +++ /dev/null @@ -1,183 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -  - -

    - i -

    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/functions_func_k.html b/deprecated/katabatic/doc/html/functions_func_k.html deleted file mode 100644 index 1fdfb963..00000000 --- a/deprecated/katabatic/doc/html/functions_func_k.html +++ /dev/null @@ -1,62 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -  - -

    - k -

    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/functions_func_l.html b/deprecated/katabatic/doc/html/functions_func_l.html deleted file mode 100644 index d83539e9..00000000 --- a/deprecated/katabatic/doc/html/functions_func_l.html +++ /dev/null @@ -1,74 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -  - -

    - l -

    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/functions_func_m.html b/deprecated/katabatic/doc/html/functions_func_m.html deleted file mode 100644 index d34b56fe..00000000 --- a/deprecated/katabatic/doc/html/functions_func_m.html +++ /dev/null @@ -1,87 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -  - -

    - m -

    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/functions_func_n.html b/deprecated/katabatic/doc/html/functions_func_n.html deleted file mode 100644 index 16c72d92..00000000 --- a/deprecated/katabatic/doc/html/functions_func_n.html +++ /dev/null @@ -1,63 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -  - -

    - n -

    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/functions_func_o.html b/deprecated/katabatic/doc/html/functions_func_o.html deleted file mode 100644 index 417e3bcd..00000000 --- a/deprecated/katabatic/doc/html/functions_func_o.html +++ /dev/null @@ -1,71 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -  - -

    - o -

    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/functions_func_p.html b/deprecated/katabatic/doc/html/functions_func_p.html deleted file mode 100644 index 0aaec910..00000000 --- a/deprecated/katabatic/doc/html/functions_func_p.html +++ /dev/null @@ -1,65 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -  - -

    - p -

    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/functions_func_r.html b/deprecated/katabatic/doc/html/functions_func_r.html deleted file mode 100644 index 13ecb0ac..00000000 --- a/deprecated/katabatic/doc/html/functions_func_r.html +++ /dev/null @@ -1,102 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -  - -

    - r -

    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/functions_func_s.html b/deprecated/katabatic/doc/html/functions_func_s.html deleted file mode 100644 index dfd99c7e..00000000 --- a/deprecated/katabatic/doc/html/functions_func_s.html +++ /dev/null @@ -1,179 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -  - -

    - s -

    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/functions_func_t.html b/deprecated/katabatic/doc/html/functions_func_t.html deleted file mode 100644 index ec569311..00000000 --- a/deprecated/katabatic/doc/html/functions_func_t.html +++ /dev/null @@ -1,72 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -  - -

    - t -

    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/functions_func_u.html b/deprecated/katabatic/doc/html/functions_func_u.html deleted file mode 100644 index 84377257..00000000 --- a/deprecated/katabatic/doc/html/functions_func_u.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -  - -

    - u -

    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/functions_func_x.html b/deprecated/katabatic/doc/html/functions_func_x.html deleted file mode 100644 index 13ba9cd1..00000000 --- a/deprecated/katabatic/doc/html/functions_func_x.html +++ /dev/null @@ -1,62 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -  - -

    - x -

    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/functions_g.html b/deprecated/katabatic/doc/html/functions_g.html deleted file mode 100644 index 951c1844..00000000 --- a/deprecated/katabatic/doc/html/functions_g.html +++ /dev/null @@ -1,636 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -
    Here is a list of all documented class members with links to the class documentation for each member:
    - -

    - g -

    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/functions_h.html b/deprecated/katabatic/doc/html/functions_h.html deleted file mode 100644 index e7817dd8..00000000 --- a/deprecated/katabatic/doc/html/functions_h.html +++ /dev/null @@ -1,65 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -
    Here is a list of all documented class members with links to the class documentation for each member:
    - -

    - h -

    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/functions_i.html b/deprecated/katabatic/doc/html/functions_i.html deleted file mode 100644 index c8090743..00000000 --- a/deprecated/katabatic/doc/html/functions_i.html +++ /dev/null @@ -1,183 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -
    Here is a list of all documented class members with links to the class documentation for each member:
    - -

    - i -

    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/functions_k.html b/deprecated/katabatic/doc/html/functions_k.html deleted file mode 100644 index 0b5518ba..00000000 --- a/deprecated/katabatic/doc/html/functions_k.html +++ /dev/null @@ -1,62 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -
    Here is a list of all documented class members with links to the class documentation for each member:
    - -

    - k -

    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/functions_l.html b/deprecated/katabatic/doc/html/functions_l.html deleted file mode 100644 index c0dc94ba..00000000 --- a/deprecated/katabatic/doc/html/functions_l.html +++ /dev/null @@ -1,74 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -
    Here is a list of all documented class members with links to the class documentation for each member:
    - -

    - l -

    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/functions_m.html b/deprecated/katabatic/doc/html/functions_m.html deleted file mode 100644 index 3728798e..00000000 --- a/deprecated/katabatic/doc/html/functions_m.html +++ /dev/null @@ -1,99 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -
    Here is a list of all documented class members with links to the class documentation for each member:
    - -

    - m -

    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/functions_n.html b/deprecated/katabatic/doc/html/functions_n.html deleted file mode 100644 index 4eee84ca..00000000 --- a/deprecated/katabatic/doc/html/functions_n.html +++ /dev/null @@ -1,66 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -
    Here is a list of all documented class members with links to the class documentation for each member:
    - -

    - n -

    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/functions_o.html b/deprecated/katabatic/doc/html/functions_o.html deleted file mode 100644 index 6358c1de..00000000 --- a/deprecated/katabatic/doc/html/functions_o.html +++ /dev/null @@ -1,71 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -
    Here is a list of all documented class members with links to the class documentation for each member:
    - -

    - o -

    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/functions_p.html b/deprecated/katabatic/doc/html/functions_p.html deleted file mode 100644 index d89a259c..00000000 --- a/deprecated/katabatic/doc/html/functions_p.html +++ /dev/null @@ -1,65 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -
    Here is a list of all documented class members with links to the class documentation for each member:
    - -

    - p -

    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/functions_r.html b/deprecated/katabatic/doc/html/functions_r.html deleted file mode 100644 index 201928a7..00000000 --- a/deprecated/katabatic/doc/html/functions_r.html +++ /dev/null @@ -1,102 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -
    Here is a list of all documented class members with links to the class documentation for each member:
    - -

    - r -

    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/functions_s.html b/deprecated/katabatic/doc/html/functions_s.html deleted file mode 100644 index 30cd21db..00000000 --- a/deprecated/katabatic/doc/html/functions_s.html +++ /dev/null @@ -1,182 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -
    Here is a list of all documented class members with links to the class documentation for each member:
    - -

    - s -

    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/functions_t.html b/deprecated/katabatic/doc/html/functions_t.html deleted file mode 100644 index 7dd6002f..00000000 --- a/deprecated/katabatic/doc/html/functions_t.html +++ /dev/null @@ -1,72 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -
    Here is a list of all documented class members with links to the class documentation for each member:
    - -

    - t -

    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/functions_type.html b/deprecated/katabatic/doc/html/functions_type.html deleted file mode 100644 index 3bc3c085..00000000 --- a/deprecated/katabatic/doc/html/functions_type.html +++ /dev/null @@ -1,63 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/functions_u.html b/deprecated/katabatic/doc/html/functions_u.html deleted file mode 100644 index 44f64e1e..00000000 --- a/deprecated/katabatic/doc/html/functions_u.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -
    Here is a list of all documented class members with links to the class documentation for each member:
    - -

    - u -

    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/functions_x.html b/deprecated/katabatic/doc/html/functions_x.html deleted file mode 100644 index e0ad2b37..00000000 --- a/deprecated/katabatic/doc/html/functions_x.html +++ /dev/null @@ -1,62 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -
    Here is a list of all documented class members with links to the class documentation for each member:
    - -

    - x -

    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/graph_legend.html b/deprecated/katabatic/doc/html/graph_legend.html deleted file mode 100644 index 3d8b492c..00000000 --- a/deprecated/katabatic/doc/html/graph_legend.html +++ /dev/null @@ -1,88 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -
    -
    Graph Legend
    -
    -
    -

    This page explains how to interpret the graphs that are generated by doxygen.

    -

    Consider the following example:

    /*! Invisible class because of truncation */
    class Invisible { };
    /*! Truncated class, inheritance relation is hidden */
    class Truncated : public Invisible { };
    /* Class not documented with doxygen comments */
    class Undocumented { };
    /*! Class that is inherited using public inheritance */
    class PublicBase : public Truncated { };
    /*! A template class */
    template<class T> class Templ { };
    /*! Class that is inherited using protected inheritance */
    class ProtectedBase { };
    /*! Class that is inherited using private inheritance */
    class PrivateBase { };
    /*! Class that is used by the Inherited class */
    class Used { };
    /*! Super class that inherits a number of other classes */
    class Inherited : public PublicBase,
    protected ProtectedBase,
    private PrivateBase,
    public Undocumented,
    public Templ<int>
    {
    private:
    Used *m_usedClass;
    };

    This will result in the following graph:

    -
    - -
    -

    The boxes in the above graph have the following meaning:

    -
      -
    • -A filled gray box represents the struct or class for which the graph is generated.
    • -
    • -A box with a black border denotes a documented struct or class.
    • -
    • -A box with a gray border denotes an undocumented struct or class.
    • -
    • -A box with a red border denotes a documented struct or class forwhich not all inheritance/containment relations are shown. A graph is truncated if it does not fit within the specified boundaries.
    • -
    -

    The arrows have the following meaning:

    -
      -
    • -A dark blue arrow is used to visualize a public inheritance relation between two classes.
    • -
    • -A dark green arrow is used for protected inheritance.
    • -
    • -A dark red arrow is used for private inheritance.
    • -
    • -A purple dashed arrow is used if a class is contained or used by another class. The arrow is labelled with the variable(s) through which the pointed class or struct is accessible.
    • -
    • -A yellow dashed arrow denotes a relation between a template instance and the template class it was instantiated from. The arrow is labelled with the template parameters of the instance.
    • -
    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/graph_legend.md5 b/deprecated/katabatic/doc/html/graph_legend.md5 deleted file mode 100644 index a06ed050..00000000 --- a/deprecated/katabatic/doc/html/graph_legend.md5 +++ /dev/null @@ -1 +0,0 @@ -387ff8eb65306fa251338d3c9bd7bfff \ No newline at end of file diff --git a/deprecated/katabatic/doc/html/graph_legend.png b/deprecated/katabatic/doc/html/graph_legend.png deleted file mode 100644 index 2cfe61c6..00000000 Binary files a/deprecated/katabatic/doc/html/graph_legend.png and /dev/null differ diff --git a/deprecated/katabatic/doc/html/group__DbUGroup.js b/deprecated/katabatic/doc/html/group__DbUGroup.js deleted file mode 100644 index 84aafa19..00000000 --- a/deprecated/katabatic/doc/html/group__DbUGroup.js +++ /dev/null @@ -1,49 +0,0 @@ -var group__DbUGroup = -[ - [ "Unit", "../hurricane/group__DbUGroup.html#ga4fbfa3e8c89347af76c9628ea06c4146", null ], - [ "StringMode", "../hurricane/group__DbUGroup.html#ga6af6a5b8d113a661fea65b2bcb8b25c4", null ], - [ "UnitPower", "../hurricane/group__DbUGroup.html#ga50b5785bf4d75026c4c112caec3040a7", null ], - [ "SnapMode", "../hurricane/group__DbUGroup.html#ga1082168d6f9956ebba22ab8bbec21637", null ], - [ "Db", "../hurricane/group__DbUGroup.html#gga6af6a5b8d113a661fea65b2bcb8b25c4a1b91af5faf467afcb73dec10bc54f233", null ], - [ "Grid", "../hurricane/group__DbUGroup.html#gga6af6a5b8d113a661fea65b2bcb8b25c4ac6b6574b2ef79ee4e44c6c00fe757c7c", null ], - [ "Symbolic", "../hurricane/group__DbUGroup.html#gga6af6a5b8d113a661fea65b2bcb8b25c4a16f8df0900c42b001f0a91475a1b93f8", null ], - [ "Pico", "../hurricane/group__DbUGroup.html#gga50b5785bf4d75026c4c112caec3040a7a3cf34ad82faf73a9b48dcb3a621d0557", null ], - [ "Nano", "../hurricane/group__DbUGroup.html#gga50b5785bf4d75026c4c112caec3040a7a03e5923be5810db830626f2ca26319d6", null ], - [ "Micro", "../hurricane/group__DbUGroup.html#gga50b5785bf4d75026c4c112caec3040a7aa0481a3398a6cbb0a68a523146f0a7fb", null ], - [ "Milli", "../hurricane/group__DbUGroup.html#gga50b5785bf4d75026c4c112caec3040a7aac2973886c68f16ee68a192154ea65be", null ], - [ "Unity", "../hurricane/group__DbUGroup.html#gga50b5785bf4d75026c4c112caec3040a7ac5c524bb7247124f3dce7d1dbdc7d2c6", null ], - [ "Kilo", "../hurricane/group__DbUGroup.html#gga50b5785bf4d75026c4c112caec3040a7a7853e18601786b5c51a1bc9cfaf8bb74", null ], - [ "Inferior", "../hurricane/group__DbUGroup.html#gga1082168d6f9956ebba22ab8bbec21637a888eae532f84c3f19b024e1830ef8cb3", null ], - [ "Superior", "../hurricane/group__DbUGroup.html#gga1082168d6f9956ebba22ab8bbec21637a8ce92cf7ff7627c46baf85612f9ad847", null ], - [ "Nearest", "../hurricane/group__DbUGroup.html#gga1082168d6f9956ebba22ab8bbec21637a65e6f47eb16779b8974a80d6145a2db5", null ], - [ "fromDb", "../hurricane/group__DbUGroup.html#ga564cf1075a481e6792b022caa394ef4a", null ], - [ "fromGrid", "../hurricane/group__DbUGroup.html#ga367e1d1b5ac1df076745550cba8a83c1", null ], - [ "fromLambda", "../hurricane/group__DbUGroup.html#ga4b570755b19ea9ff0f2f258a221bd935", null ], - [ "fromPhysical", "../hurricane/group__DbUGroup.html#ga11d4dbd9134a19bda35cbacde1cb2769", null ], - [ "toDb", "../hurricane/group__DbUGroup.html#gaec07c6e7ae2a2a6f54e2a16b32c8bf26", null ], - [ "toGrid", "../hurricane/group__DbUGroup.html#ga318d673386c9424e07c12efd598c730d", null ], - [ "toLambda", "../hurricane/group__DbUGroup.html#ga4923a9a443871282ad7d331be2a2a5d4", null ], - [ "toPhysical", "../hurricane/group__DbUGroup.html#gab901e9d5c12e878728178f113def6c45", null ], - [ "getPrecision", "../hurricane/group__DbUGroup.html#ga6169efbdd9b3d54a0bd8467c8f957fda", null ], - [ "getMaximalPrecision", "../hurricane/group__DbUGroup.html#ga8756c9f0a32af5f601cd150e73b02c03", null ], - [ "getResolution", "../hurricane/group__DbUGroup.html#ga120a60b09b344d01c583567a1e489d9e", null ], - [ "setGridsPerLambda", "../hurricane/group__DbUGroup.html#gab2bc65c9f879d122b1795fd36b8151f4", null ], - [ "getGridsPerLambda", "../hurricane/group__DbUGroup.html#ga9a0359adbfafc356326f5c6adf57ff04", null ], - [ "setStringMode", "../hurricane/group__DbUGroup.html#ga89ab8f8326c54113336086663ecf1d25", null ], - [ "getValueString", "../hurricane/group__DbUGroup.html#gadc9c1a06b4296dbddcf711077113f4bd", null ], - [ "setPrecision", "../hurricane/group__DbUGroup.html#gae0c85bf74707d686d4d9c32a68316371", null ], - [ "setRealSnapGridStep", "../hurricane/group__DbUGroup.html#ga202cc3aa3364c2224647a29dde047fae", null ], - [ "getRealSnapGridStep", "../hurricane/group__DbUGroup.html#ga09e46fcca6aaca94851adfa196e10170", null ], - [ "getOnRealSnapGrid", "../hurricane/group__DbUGroup.html#ga8746e486f153aa37ee469c1604eba5c0", null ], - [ "setSymbolicSnapGridStep", "../hurricane/group__DbUGroup.html#ga9ccd423c8f268ef54770f4663e6c9304", null ], - [ "getSymbolicSnapGridStep", "../hurricane/group__DbUGroup.html#ga687a9134729b107c42fb7f69596c4c3b", null ], - [ "getOnSymbolicSnapGrid", "../hurricane/group__DbUGroup.html#gad1b0c0f3680093cf5a63d901312c925d", null ], - [ "getOnCustomGrid", "../hurricane/group__DbUGroup.html#ga87323d9038656dceabffc37d45de408a", null ], - [ "getOnPhysicalGrid", "../hurricane/group__DbUGroup.html#ga9419025221579f4277475c65655be3dc", null ], - [ "db", "../hurricane/group__DbUGroup.html#ga504f36c862f58bdc42db559844509262", null ], - [ "grid", "../hurricane/group__DbUGroup.html#ga1d4bac6e3b68c8cd44b345de3b425753", null ], - [ "lambda", "../hurricane/group__DbUGroup.html#gaa1ba98acc939ff1c370c18544a5e0dce", null ], - [ "getDb", "../hurricane/group__DbUGroup.html#ga4233772b1b3e68f3ec723c7509ea87ff", null ], - [ "getGrid", "../hurricane/group__DbUGroup.html#gad4485d0d7b5fd7ae87b32f165155c0a2", null ], - [ "getLambda", "../hurricane/group__DbUGroup.html#gadea6b9a6e84243f70f3a5e2725b2c6d8", null ] -]; \ No newline at end of file diff --git a/deprecated/katabatic/doc/html/group__Generalities.js b/deprecated/katabatic/doc/html/group__Generalities.js deleted file mode 100644 index 7b09bc87..00000000 --- a/deprecated/katabatic/doc/html/group__Generalities.js +++ /dev/null @@ -1,5 +0,0 @@ -var group__Generalities = -[ - [ "demangle", "../hurricane/group__Generalities.html#ga93af87d1b7b19294382ba6dae51d0363", null ], - [ "demangle", "../hurricane/group__Generalities.html#gae4be209e8a3f2227b0c7a22246817c6f", null ] -]; \ No newline at end of file diff --git a/deprecated/katabatic/doc/html/group__LoadGlobalRouting.html b/deprecated/katabatic/doc/html/group__LoadGlobalRouting.html deleted file mode 100644 index d1fe2e2a..00000000 --- a/deprecated/katabatic/doc/html/group__LoadGlobalRouting.html +++ /dev/null @@ -1,880 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    - -
    -
    Global Routing Loading
    -
    -
    - -

    Translation rules to build detailed routing from global. -More...

    - - - - - -

    -Classes

    class  GCellTopology
     Build the wiring for a Net inside a GCell (internal). More...
     
    - - - -

    -Enumerations

    enum  LocalFunctionFlag {
    -  NoFlags = 0x00000000 -,
    -  HAccess = 0x00000002, -
    -  VSmall = 0x00000004, -
    -  HSmall = 0x00000008, -
    -  Punctual = 0x00000010 -,
    -  DoSourceContact = 0x00000100, -
    -  DoTargetContact = 0x00000200 -
    - }
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Functions

    unsigned int checkRoutingPadSize (Component *anchor)
     
    static void doRp_AutoContacts (GCell *, Component *, AutoContact *&source, AutoContact *&target, unsigned int flags)
     
    static AutoContactdoRp_Access (GCell *, Component *, unsigned int flags)
     
    static AutoContactdoRp_AccessPad (RoutingPad *, unsigned int flags)
     
    static void doRp_StairCaseH (GCell *, Component *rp1, Component *rp2)
     
    static void doRp_StairCaseV (GCell *, Component *rp1, Component *rp2)
     
    void _do_xG_1Pad ()
     
    void _do_xG ()
     
    void _do_1G_1M1 ()
     
    void _do_1G_xM1 ()
     
    void _do_xG_1M1_1M2 ()
     
    void _do_xG_xM1_xM3 ()
     
    void _do_xG_xM2 ()
     
    void _do_1G_1M3 ()
     
    void _do_xG_xM3 ()
     
    void singleGCell (KatabaticEngine *ktbt, Net *net)
     
    -

    Detailed Description

    -

    Translation rules to build detailed routing from global.

    -

    This module documents how the global routing built by Knik is loaded into the Katabatic data-base. It is intented for developpers only.

    -

    Enumeration Type Documentation

    - -

    ◆ LocalFunctionFlag

    - -
    -
    - - - - -
    enum LocalFunctionFlag
    -
    -

    A set of flags for all functions of the LoadGrByNet module. They can be combined to form the flags argument of functions. the functions will ignore flags that are not intended to them.

    -

    For HSmall, VSmall & Punctual see checkRoutingPadSize().

    - - - - - - - - -
    Enumerator
    NoFlags 

    A simple alias over zero to explicitly tell that no flag at all is passed to the function.

    -
    HAccess 

    The constructed topology will be accessed through an horizontal segment. The absence of this flag tell that the access will be done trough a vertical.

    -
    VSmall 

    The RoutingPad vertically covers a very small number of access points, so it is likely overconstrained for direct horizontal connexion.

    -
    HSmall 

    The RoutingPad horizontally covers a very small number of access points, so it is likely overconstrained for direct vertical connexion.

    -
    Punctual 

    The RoutingPad covers only an access point in either direction.

    -
    DoSourceContact 

    When creating Katabatic::AutoContactTerminal on non-punctual RoutingPad, this flag request the creation of a contact on the source point.

    -
    DoTargetContact 

    When creating Katabatic::AutoContactTerminal on non-punctual RoutingPad, this flag request the creation of a contact on the target point.

    -
    - -
    -
    -

    Function Documentation

    - -

    ◆ checkRoutingPadSize()

    - -
    -
    - - - - - - - - -
    unsigned int checkRoutingPadSize (Componentrp)
    -
    -

    Look at the geometrical size of the Component and assess if it's span is too narrow either horizontally or vertically. Return a combination of flags indicating it's state:

      -
    • HSmall : less than 3 pitches in horizontal direction.
    • -
    • VSmall : less than 3 pitches in vertical direction.
    • -
    • Punctual : one pitch in either directions.
    • -
    -

    The component can be a RoutingPad, a Vertical or an Horizontal.

    -
    -checkRoutingPadSize.png -
    -checkRoutingPadSize()
    - -

    References Component::getLayer(), anonymous_namespace{LoadGrByNet.cpp}::HSmall, anonymous_namespace{LoadGrByNet.cpp}::Punctual, toLambda(), and anonymous_namespace{LoadGrByNet.cpp}::VSmall.

    - -

    Referenced by GCellTopology::doRp_Access().

    - -
    -
    - -

    ◆ doRp_AutoContacts()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    void doRp_AutoContacts (GCellgcell,
    Componentrp,
    AutoContact *& source,
    AutoContact *& target,
    unsigned int flags 
    )
    -
    -static
    -
    -
    Parameters
    - - - - - - -
    gcellThe GCell into which create the AutoContact.
    rpThe Component we want to access.
    sourceThe AutoContact created on the source (returned).
    targetThe AutoContact created on the target (returned).
    flagsManaged by this function:
      -
    • LocalFunctionFlag::DoSourceContact
    • -
    • LocalFunctionFlag::DoTargetContact
    • -
    -
    -
    -
    -

    Create the AutoContact directly anchored on the Component (terminal). Three cases are manageds:

      -
    1. Ordinary (non-punctual) METAL1 terminal: an AutoContactTerminal is anchored on the RoutingPad.
    2. -
    3. Punctual METAL1 terminal, the access must never be blocked by other routing. To ensure it, we create a fixed AutoSegment (anchored on two AutoContactTerminal) to cover it. The normal AutoContactTerminal is also created.
    4. -
    5. non METAL1 terminal, as for the punctual METAL1, a fixed protection is added over the RoutingPad. If we access horizontally a vertical RoutingPad or vertically an horizontal one, an extra AutoContactTerminal is added (to allow is displacement along the RoutingPad).
    6. -
    -

    To avoid creating a fixed protection over a RoutingPad multiple times, the RoutingPad and it's associated protection is stored in a static map : __routingPadAutoSegments.

    -

    Conversely, because an AutoContactTerminal can only be connected to one segment, each time this function is called a new terminal will be created (or maybe two in case of non-punctual terminals). If only one AutoContact is requested, it is created centered on the RoutingPad. The initial position of AutoContact do not prevent them to move afterwards, even those created on source/target on a non-punctual RoutingPad.

    -
    Remark: For clarity we describe the layer management of this function in term
    of METAL, but it is the RoutingGauge depth which is actually used.
    -
    -doRp_AutoContacts.png -
    -doRp_AutoContacts()
    - -

    References Katabatic::CntFixed, AutoContactTerminal::create(), AutoSegment::create(), anonymous_namespace{LoadGrByNet.cpp}::DoSourceContact, anonymous_namespace{LoadGrByNet.cpp}::DoTargetContact, Session::getContactLayer(), Grid< GCellT >::getGCell(), KatabaticEngine::getGCellGrid(), Session::getKatabatic(), Component::getLayer(), Katabatic::KbHorizontal, Katabatic::SegFixed, and AutoSegment::setFlags().

    - -

    Referenced by GCellTopology::_do_1G_1M3(), GCellTopology::_do_xG_1M1_1M2(), GCellTopology::_do_xG_xM1_xM3(), GCellTopology::_do_xG_xM2(), GCellTopology::_do_xG_xM3(), GCellTopology::doRp_Access(), GCellTopology::doRp_StairCaseH(), GCellTopology::doRp_StairCaseV(), and anonymous_namespace{LoadGrByNet.cpp}::singleGCell().

    - -
    -
    - -

    ◆ doRp_Access()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    AutoContact * doRp_Access (GCellgcell,
    Componentrp,
    unsigned int flags 
    )
    -
    -static
    -
    -
    Parameters
    - - - - -
    gcellThe GCell into which create the AutoContact.
    rpThe Component onto which anchor the access contact.
    flagsRelevant flags are:
      -
    • HAccess, the terminal is to be accessed through an horizontal segment.
    • -
    • VSmall, force the terminal to be considered as small in the vertical direction.
    • -
    -
    -
    -
    -

    If HAccess is set, the Component is to be accessed trough an horizontal segment. If unset, the access is done vertically.

    -

    Create an AutoContact to access a Component (terminal). If the Component is not to be accessed through an horizontal segment, and do not cover a large span in the horizontal direction (flag VSmall), a local horizontal AutoSegment is added to slacken the vertical constraints.

    -
    -doRp_Access.png -
    -doRp_Access()
    - -

    References anonymous_namespace{LoadGrByNet.cpp}::checkRoutingPadSize(), AutoContactTurn::create(), AutoSegment::create(), GCellTopology::doRp_AutoContacts(), Session::getContactLayer(), Component::getNet(), anonymous_namespace{LoadGrByNet.cpp}::HAccess, anonymous_namespace{LoadGrByNet.cpp}::HSmall, Katabatic::KbHorizontal, Katabatic::KbVertical, and anonymous_namespace{LoadGrByNet.cpp}::VSmall.

    - -

    Referenced by GCellTopology::_do_1G_1M1(), GCellTopology::_do_1G_xM1(), GCellTopology::_do_xG_xM1_xM3(), GCellTopology::_do_xG_xM2(), and GCellTopology::_do_xG_xM3().

    - -
    -
    - -

    ◆ doRp_AccessPad()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    AutoContact * doRp_AccessPad (RoutingPadrp,
    unsigned int flags 
    )
    -
    -static
    -
    -
    Parameters
    - - - -
    rpThe Component onto which anchor the access contact.
    flagsRelevant flags are:
      -
    • HAccess, the terminal is to be accessed through an horizontal segment.
    • -
    • VSmall, force the terminal to be considered as small in the vertical direction.
    • -
    -
    -
    -
    -
    Returns
    A Katabatic::AutoContactTerminal .
    -

    The Component rp is a RoutingPad which belongs to a pad cell. This case occurs when we are routing a complete chip. This method build, from the rp a stack of articulated punctual segments and contacts to reach the default H/V routing layers (usually METAL2 & METAL3). This may be needed when the pad terminal is in METAL5, for instance.

    -

    The returned AutoContactTerminal is anchored on the last punctual segment build.

    -

    The GCell into which the AutoContactTerminal is created may be under the pads area. However, it will be right on the border of the GCell. The global router vertexes of GCell under the pad area are marked as blocked so will never be used for routing.

    -
    Remark: The segments and contacts added to ensure the layer connexity are not
    put into the Katabatic database. They are plain Hurricane objects, invisibles from it.
    - -

    References Contact::create(), Horizontal::create(), Vertical::create(), AutoContactTerminal::create(), Hook::detach(), Component::getBodyHook(), RoutingPad::getBoundingBox(), RoutingPad::getCenter(), Session::getContactLayer(), Grid< GCellT >::getGCell(), KatabaticEngine::getGCellGrid(), Box::getHeight(), Session::getKatabatic(), RoutingPad::getLayer(), Component::getNet(), RoutingPad::getOccurrence(), Transformation::getOrientation(), Occurrence::getPath(), Session::getRoutingLayer(), Path::getTransformation(), Box::getWidth(), Box::getXMax(), Box::getXMin(), Box::getYMax(), Box::getYMin(), anonymous_namespace{LoadGrByNet.cpp}::HAccess, Katabatic::KbHorizontal, Point::setX(), and Point::setY().

    - -

    Referenced by GCellTopology::_do_xG_1Pad().

    - -
    -
    - -

    ◆ doRp_StairCaseH()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void doRp_StairCaseH (GCellgcell,
    Componentrp1,
    Componentrp2 
    )
    -
    -static
    -
    -

    Build the wiring to connect to horizontal Component. Two cases:

      -
    • The Component are aligneds, then only a straight wire is created.
    • -
    • They are not aligned, then a complete dogleg is created.
    • -
    -
    -doRp_StairCaseH.png -
    -doRp_StairCaseH()
    - -

    References AutoContactTurn::create(), AutoSegment::create(), GCellTopology::doRp_AutoContacts(), anonymous_namespace{LoadGrByNet.cpp}::DoSourceContact, anonymous_namespace{LoadGrByNet.cpp}::DoTargetContact, Session::getContactLayer(), Component::getLayer(), Component::getNet(), Component::getX(), AutoContact::getY(), Katabatic::KbHorizontal, and Katabatic::KbVertical.

    - -

    Referenced by GCellTopology::_do_xG_xM2().

    - -
    -
    - -

    ◆ doRp_StairCaseV()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void doRp_StairCaseV (GCellgcell,
    Componentrp1,
    Componentrp2 
    )
    -
    -static
    -
    -

    Build the wiring to connect to vertical Components. Two cases:

      -
    • The Components are aligneds, then only a straight wire is created.
    • -
    • They are not aligned, then a complete dogleg is created.
    • -
    -
    -doRp_StairCaseV.png -
    -doRp_StairCaseV()
    - -

    References AutoContactTurn::create(), AutoSegment::create(), GCellTopology::doRp_AutoContacts(), anonymous_namespace{LoadGrByNet.cpp}::DoSourceContact, anonymous_namespace{LoadGrByNet.cpp}::DoTargetContact, Session::getContactLayer(), Component::getLayer(), Component::getNet(), AutoContact::getX(), Component::getY(), Katabatic::KbHorizontal, and Katabatic::KbVertical.

    - -

    Referenced by GCellTopology::_do_xG_xM3().

    - -
    -
    - -

    ◆ _do_xG_1Pad()

    - -
    -
    - - - - - -
    - - - - - - - -
    void _do_xG_1Pad ()
    -
    -private
    -
    -

    Construct the topology, when there is only global wires and one local terminal, but coming from a Pad. As thoses connectors will always be on one border of the GCell they can be considered as a kind of global.

    -

    So this method mostly calls GCellTopology::doRp_AccessPad() to create the AutoContactTerminal, then calls GCellTopology::_do_xG(), except for straight lines which are managed directly.

    - -

    References GCellTopology::_do_xG(), AutoContactTurn::create(), AutoSegment::create(), GCellTopology::doRp_AccessPad(), AutoContact::getBodyHook(), Session::getContactLayer(), anonymous_namespace{LoadGrByNet.cpp}::HAccess, Katabatic::KbHorizontal, Katabatic::KbVertical, and anonymous_namespace{LoadGrByNet.cpp}::NoFlags.

    - -
    -
    - -

    ◆ _do_xG()

    - -
    -
    - - - - - -
    - - - - - - - -
    void _do_xG ()
    -
    -private
    -
    -

    Construct the topology, when there is only global wires (no local terminals).

    -

    Some topology are not handled because they must not be managed by this function:

      -
    • -One global: nonsensical because there also must be a terminal.
    • -
    • -Two aligned globals: in that case we do a straight wire without any AutoContact (handled by the source/target of the wire).
    • -
    -
    -_do_xG.png -
    -_do_xG()
    - -

    References AutoContactVTee::create(), AutoContactTurn::create(), AutoContactHTee::create(), AutoSegment::create(), Session::getContactLayer(), Katabatic::KbHorizontal, and Katabatic::KbVertical.

    - -

    Referenced by GCellTopology::_do_xG_1Pad().

    - -
    -
    - -

    ◆ _do_1G_1M1()

    - -
    -
    - - - - - -
    - - - - - - - -
    void _do_1G_1M1 ()
    -
    -private
    -
    -

    Construct a topology where there is one global and one RoutingPad in METAL1. The METAL1 is assumed to be vertical.

    -
    Remark: When accessing the RoutingPad through an horizontal global segment
    and the vertical extension of the segment is small, the global is still directly attached to the terminal, inducing a high constraint on it. We left to job of slackening it to the router.
    -
    -_do_1G_1M1.png -
    -_do_1G_1M1()
    - -

    References GCellTopology::doRp_Access(), anonymous_namespace{LoadGrByNet.cpp}::HAccess, anonymous_namespace{LoadGrByNet.cpp}::NoFlags, and anonymous_namespace{LoadGrByNet.cpp}::VSmall.

    - -
    -
    - -

    ◆ _do_1G_xM1()

    - -
    -
    - - - - - -
    - - - - - - - -
    void _do_1G_xM1 ()
    -
    -private
    -
    -

    Construct a topology where there is one global and any number of RoutingPad in METAL1. The METAL1 is assumed to be vertical.

    -

    The RoutingPads are linked together two by two. If the horizontal segments are not aligned by the router, part of the routage will be done through the RoutingPad itself. The global incoming segment will connected to the leftmost, rightmost or centermost RoutingPad according from wich side it comes from.

    -
    -_do_1G_xM1.png -
    -_do_1G_xM1()
    - -

    References AutoContactTurn::create(), AutoSegment::create(), GCellTopology::doRp_Access(), Component::getBoundingBox(), Session::getContactLayer(), Box::getHeight(), anonymous_namespace{LoadGrByNet.cpp}::HAccess, Katabatic::KbHorizontal, and anonymous_namespace{LoadGrByNet.cpp}::NoFlags.

    - -
    -
    - -

    ◆ _do_xG_1M1_1M2()

    - -
    -
    - - - - - -
    - - - - - - - -
    void _do_xG_1M1_1M2 ()
    -
    -private
    -
    -

    Construct a topology where there is at least one global (and up to 4), one METAL1 RoutingPad (assumed V) and one METAL2 RoutingPad (assumed H).

    -

    In this topology, we want to try to reuse the METAL2 RoutingPad as a feedtrough in the horizontal routage. Thus:

      -
    • The METAL1 and METAL2 RoutingPad are connected through a separate wiring.
    • -
    • The south & west global wiring is attached to the leftmost contact of the METAL2.
    • -
    • The north & east global wiring is attached to the rightmost contact of the METAL2.
    • -
    -

    South/west and north/south can be build independantly. Depending on the number of globals, they can consist of:

      -
    • Nothing (no south nor west).
    • -
    • An AutoContact (west present).
    • -
    • An horizontal plus a turn (south present).
    • -
    • An horizontal plus a HTee (south & west present).
    • -
    -
    Remark: Not all configurations are represented below.
    -
    -_do_xG_1M1_1M2.png -
    -_do_xG_1M1_1M2()
    - -

    References AutoContactTurn::create(), AutoContactHTee::create(), AutoSegment::create(), GCellTopology::doRp_AutoContacts(), anonymous_namespace{LoadGrByNet.cpp}::DoSourceContact, anonymous_namespace{LoadGrByNet.cpp}::DoTargetContact, Session::getContactLayer(), Session::getRoutingLayer(), Katabatic::KbHorizontal, Katabatic::KbVertical, and anonymous_namespace{LoadGrByNet.cpp}::NoFlags.

    - -
    -
    - -

    ◆ _do_xG_xM1_xM3()

    - -
    -
    - - - - - -
    - - - - - - - -
    void _do_xG_xM1_xM3 ()
    -
    -private
    -
    -

    Construct a topology where there is at least one global (and up to 4), at least one METAL1 RoutingPad (assumed V) and at least one METAL3 RoutingPad (assumed V).

    -

    In this topology, we want to try to reuse the METAL3 RoutingPad as a feedtrough in the vertical routage. Thus:

      -
    • The METAL1 and METAL3 RoutingPad are connected through a separate wiring made of separate horizontals.
    • -
    • The south-west global wiring is attached to the leftmost RoutingPad if there isn't south or to the first METAL3 otherwise.
    • -
    • The north-east global wiring is attached to the rightmost RoutingPad if there isn't north or to the first METAL3 otherwise.
    • -
    -

    South/west and north/south can be build independantly. Depending on the number of globals, they can consist of:

      -
    • Nothing (no south nor west).
    • -
    • An AutoContact on the leftmost RoutingPad (west present).
    • -
    • An AutoContact on the first METAL3 (only south present).
    • -
    • An AutoContact plus a vertical plus a VTee (south & west present).
    • -
    -
    -_do_xG_xM1_xM3.png -
    -_do_xG_xM1_xM3()
    - -

    References AutoContactVTee::create(), AutoContactTurn::create(), AutoContactHTee::create(), AutoSegment::create(), GCellTopology::doRp_Access(), GCellTopology::doRp_AutoContacts(), anonymous_namespace{LoadGrByNet.cpp}::DoSourceContact, anonymous_namespace{LoadGrByNet.cpp}::DoTargetContact, Component::getBoundingBox(), Session::getContactLayer(), Box::getHeight(), Session::getRoutingLayer(), anonymous_namespace{LoadGrByNet.cpp}::HAccess, Katabatic::KbHorizontal, Katabatic::KbVertical, and anonymous_namespace{LoadGrByNet.cpp}::NoFlags.

    - -
    -
    - -

    ◆ _do_xG_xM2()

    - -
    -
    - - - - - -
    - - - - - - - -
    void _do_xG_xM2 ()
    -
    -private
    -
    -

    Construct a topology where there is at least one global (and up to 4), and any number of METAL2 RoutingPads (assumeds H).

    -

    In this topology, we want to try to reuse the METAL2 RoutingPad as a feedtrough in the horizontal routage. Thus:

      -
    • The RoutingPad are connecteds trough a separate staircase (or straight wire if aligneds).
    • -
    • The south-west global wiring is attached to the leftmost RoutingPad if there isn't south or to the biggest horizontal RoutingPad otherwise.
    • -
    • The north-east global wiring is attached to the rightmost RoutingPad if there isn't south or to the biggest horizontal RoutingPad otherwise.
    • -
    -
    -_do_xG_xM2.png -
    -_do_xG_xM2()
    - -

    References AutoContactVTee::create(), AutoSegment::create(), GCellTopology::doRp_Access(), GCellTopology::doRp_AutoContacts(), GCellTopology::doRp_StairCaseH(), anonymous_namespace{LoadGrByNet.cpp}::DoSourceContact, Component::getBoundingBox(), Session::getContactLayer(), Box::getWidth(), Katabatic::KbVertical, and anonymous_namespace{LoadGrByNet.cpp}::NoFlags.

    - -
    -
    - -

    ◆ _do_1G_1M3()

    - -
    -
    - - - - - -
    - - - - - - - -
    void _do_1G_1M3 ()
    -
    -private
    -
    -

    Construct a topology where there is one global and one METAL3 RoutingPad (assumeds V).

    -

    In this topology, we reuse the METAL3 RoutingPad as a feedtrough in the vertical routage. Thus:

      -
    • If the global is either north or south, we directly connect to the north end or south end of the RoutingPad. The vertical global will have no slack at all we assume that METAL3 terminals are only from blocks and are aligneds vertically.
    • -
    • If the global is east or west and the RoutingPad is sufficiently extended in the vertical direction, we connect an horizontal in the normal way.
    • -
    • If the global is not sufficiently extended, we add a turn to give some slack to the global.
    • -
    -
    -_do_1G_1M3.png -
    -_do_1G_1M3()
    - -

    References AutoContactTurn::create(), AutoSegment::create(), GCellTopology::doRp_AutoContacts(), anonymous_namespace{LoadGrByNet.cpp}::DoSourceContact, anonymous_namespace{LoadGrByNet.cpp}::DoTargetContact, Session::getContactLayer(), AutoContact::getX(), anonymous_namespace{LoadGrByNet.cpp}::HAccess, Katabatic::KbHorizontal, Katabatic::KbVertical, and anonymous_namespace{LoadGrByNet.cpp}::NoFlags.

    - -
    -
    - -

    ◆ _do_xG_xM3()

    - -
    -
    - - - - - -
    - - - - - - - -
    void _do_xG_xM3 ()
    -
    -private
    -
    -

    Construct a topology where there at least one global and two METAL3 RoutingPad (assumed V).

    -

    In this topology, we reuse the METAL3 RoutingPad as a feedtrough in the vertical routage. We assume that the most likely relative position of the RoutingPads is to be aligned vertically. Thus:

      -
    • All RoutingPads are linked two by two trough vertical staircases.
    • -
    • The south-west global wiring is attached to the bottommost RoutingPad (without vertical slack). If a misalignment is detected, then a dogleg is added.
    • -
    • The north-east global wiring is attached to the topmost RoutingPad (without vertical slack).
    • -
    -

    South/west and north/south can be build independantly. Depending on the number of globals, they can consist of:

      -
    • Nothing (no south nor west).
    • -
    • An sliding AutoContact on the bottommost RoutingPad (west present).
    • -
    • An fixed AutoContact on the bottommost RoutingPad (only south present).
    • -
    • An fixed AutoContact plus a vertical plus a VTee (south & west present).
    • -
    -
    -_do_xG_xM3.png -
    -_do_xG_xM3()
    - -

    References AutoContactVTee::create(), AutoContactTurn::create(), AutoSegment::create(), GCellTopology::doRp_Access(), GCellTopology::doRp_AutoContacts(), GCellTopology::doRp_StairCaseV(), anonymous_namespace{LoadGrByNet.cpp}::DoSourceContact, anonymous_namespace{LoadGrByNet.cpp}::DoTargetContact, Session::getContactLayer(), DbU::getValueString(), AutoContact::getX(), anonymous_namespace{LoadGrByNet.cpp}::HAccess, Katabatic::KbHorizontal, Katabatic::KbVertical, and anonymous_namespace{LoadGrByNet.cpp}::NoFlags.

    - -
    -
    - -

    ◆ singleGCell()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void singleGCell (KatabaticEnginektbt,
    Netnet 
    )
    -
    -
    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/group__LoadGlobalRouting.js b/deprecated/katabatic/doc/html/group__LoadGlobalRouting.js deleted file mode 100644 index 3ddfbea4..00000000 --- a/deprecated/katabatic/doc/html/group__LoadGlobalRouting.js +++ /dev/null @@ -1,47 +0,0 @@ -var group__LoadGlobalRouting = -[ - [ "GCellTopology", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html", [ - [ "doRp_AutoContacts", "group__LoadGlobalRouting.html#gae9cae408ea16a3f7c77c3d75f0242f19", null ], - [ "doRp_Access", "group__LoadGlobalRouting.html#gada6d3c694b8d741b6504b7c3da166357", null ], - [ "doRp_StairCaseH", "group__LoadGlobalRouting.html#ga3291d84592215974fe4052c00304bdb1", null ], - [ "doRp_StairCaseV", "group__LoadGlobalRouting.html#ga6361fb0e90f35cd59063a1ee971ef2a9", null ], - [ "_do_xG", "group__LoadGlobalRouting.html#gaaa6d4ccd2eadfb6bc3e2cc98cfaf2cca", null ], - [ "_do_1G_1M1", "group__LoadGlobalRouting.html#gad24a03e87e269f16dcc28d8c2d9f1cfb", null ], - [ "_do_1G_xM1", "group__LoadGlobalRouting.html#ga97942453a1bc5b01106aa380271fd7fc", null ], - [ "_do_xG_xM1_xM3", "group__LoadGlobalRouting.html#gaf9b009520f54099668ac9d12f2c85257", null ], - [ "_do_xG_1M1_1M2", "group__LoadGlobalRouting.html#gae60ed4e27ad89a1e2ff2cd6415ef33f1", null ], - [ "_do_xG_xM2", "group__LoadGlobalRouting.html#ga532d1c6b530e0375078ea2d6ea3c6024", null ], - [ "_do_1G_1M3", "group__LoadGlobalRouting.html#ga2519ef984b3d19f123827a9b12651672", null ], - [ "_do_xG_xM3", "group__LoadGlobalRouting.html#ga007efc725aae31782204a44949765cb4", null ] - ] ], - [ "LocalFunctionFlag", "group__LoadGlobalRouting.html#gaec07c7f30c801c3b0f72193757250d64", [ - [ "NoFlags", "group__LoadGlobalRouting.html#ggaec07c7f30c801c3b0f72193757250d64add44bf8d6f7bbe1393d76b940b85294b", null ], - [ "HAccess", "group__LoadGlobalRouting.html#ggaec07c7f30c801c3b0f72193757250d64a5c3692a6c886c6293a3c9f240b60a5d9", null ], - [ "VSmall", "group__LoadGlobalRouting.html#ggaec07c7f30c801c3b0f72193757250d64a260f6bf57246879aed7febfe83c9dacc", null ], - [ "HSmall", "group__LoadGlobalRouting.html#ggaec07c7f30c801c3b0f72193757250d64af1a4f1cb841460f20d26dcf902247fb8", null ], - [ "Punctual", "group__LoadGlobalRouting.html#ggaec07c7f30c801c3b0f72193757250d64a65b52a199afe857e3d551dbac8b293b9", null ], - [ "DoSourceContact", "group__LoadGlobalRouting.html#ggaec07c7f30c801c3b0f72193757250d64aece46caaf822b33d7db94bb2dd16a30d", null ], - [ "DoTargetContact", "group__LoadGlobalRouting.html#ggaec07c7f30c801c3b0f72193757250d64aeb33c01c5e62df73de6b11888b17a5f2", null ] - ] ], - [ "NoFlags", "group__LoadGlobalRouting.html#ggaec07c7f30c801c3b0f72193757250d64add44bf8d6f7bbe1393d76b940b85294b", null ], - [ "HAccess", "group__LoadGlobalRouting.html#ggaec07c7f30c801c3b0f72193757250d64a5c3692a6c886c6293a3c9f240b60a5d9", null ], - [ "VSmall", "group__LoadGlobalRouting.html#ggaec07c7f30c801c3b0f72193757250d64a260f6bf57246879aed7febfe83c9dacc", null ], - [ "HSmall", "group__LoadGlobalRouting.html#ggaec07c7f30c801c3b0f72193757250d64af1a4f1cb841460f20d26dcf902247fb8", null ], - [ "Punctual", "group__LoadGlobalRouting.html#ggaec07c7f30c801c3b0f72193757250d64a65b52a199afe857e3d551dbac8b293b9", null ], - [ "DoSourceContact", "group__LoadGlobalRouting.html#ggaec07c7f30c801c3b0f72193757250d64aece46caaf822b33d7db94bb2dd16a30d", null ], - [ "DoTargetContact", "group__LoadGlobalRouting.html#ggaec07c7f30c801c3b0f72193757250d64aeb33c01c5e62df73de6b11888b17a5f2", null ], - [ "checkRoutingPadSize", "group__LoadGlobalRouting.html#gaad5d32b07d1d53ecc8642e4b10df9605", null ], - [ "doRp_AutoContacts", "group__LoadGlobalRouting.html#gae9cae408ea16a3f7c77c3d75f0242f19", null ], - [ "doRp_Access", "group__LoadGlobalRouting.html#gada6d3c694b8d741b6504b7c3da166357", null ], - [ "doRp_StairCaseH", "group__LoadGlobalRouting.html#ga3291d84592215974fe4052c00304bdb1", null ], - [ "doRp_StairCaseV", "group__LoadGlobalRouting.html#ga6361fb0e90f35cd59063a1ee971ef2a9", null ], - [ "_do_xG", "group__LoadGlobalRouting.html#gaaa6d4ccd2eadfb6bc3e2cc98cfaf2cca", null ], - [ "_do_1G_1M1", "group__LoadGlobalRouting.html#gad24a03e87e269f16dcc28d8c2d9f1cfb", null ], - [ "_do_1G_xM1", "group__LoadGlobalRouting.html#ga97942453a1bc5b01106aa380271fd7fc", null ], - [ "_do_xG_1M1_1M2", "group__LoadGlobalRouting.html#gae60ed4e27ad89a1e2ff2cd6415ef33f1", null ], - [ "_do_xG_xM1_xM3", "group__LoadGlobalRouting.html#gaf9b009520f54099668ac9d12f2c85257", null ], - [ "_do_xG_xM2", "group__LoadGlobalRouting.html#ga532d1c6b530e0375078ea2d6ea3c6024", null ], - [ "_do_1G_1M3", "group__LoadGlobalRouting.html#ga2519ef984b3d19f123827a9b12651672", null ], - [ "_do_xG_xM3", "group__LoadGlobalRouting.html#ga007efc725aae31782204a44949765cb4", null ], - [ "singleGCell", "group__LoadGlobalRouting.html#ga3973291866b39c10cea5ca17f7d174fb", null ] -]; \ No newline at end of file diff --git a/deprecated/katabatic/doc/html/group__grpSynthHierarchy.html b/deprecated/katabatic/doc/html/group__grpSynthHierarchy.html deleted file mode 100644 index 4ae0702a..00000000 --- a/deprecated/katabatic/doc/html/group__grpSynthHierarchy.html +++ /dev/null @@ -1,128 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -
    -
    Synthetic Class Hierarchy
    -
    -
    - -

    Simplificated class hierarchy. -More...

    -

    Simplificated class hierarchy.

    -
    -

    The complete class hierarchy could be accessed here.

    -

    All the classes below are in the Katabatic namespace.

    -

    The inheritance tree has been splitted/simplificated.

    - Legend :
    -
    -      
    -        
    -        
    -      
    ClassA  ClassA is abstract
    ClassB  ClassB is instanciable
    -
    -
    - -

    Utilities

    - -
    BaseObserver -
    - -
    Observer -
    - -
    Observable -
    - -

    Katabatic Engine

    - -
    Katabatic -
    ChipTools -
    KatabaticEngine -
    Session -
    DataAlgorithm -
    - -

    Contacts

    - -
    AutoContact -
    - -
    AutoContactTerminal -
    AutoContactTurn -
    AutoContactHTee -
    AutoContactVTee -
    - -

    Segments

    - -
    AutoSegment -
    - -
    AutoHorizontal -
    AutoVertical -
    - -

    GCell

    - -
    GCell -
    BaseGrid::Axis -
    BaseGrid -
    - -
    Grid -
    - -
    GCellGrid -
    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/hierarchy.html b/deprecated/katabatic/doc/html/hierarchy.html deleted file mode 100644 index 3d110c4d..00000000 --- a/deprecated/katabatic/doc/html/hierarchy.html +++ /dev/null @@ -1,99 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -
    -
    Class Hierarchy
    -
    -
    -
    This inheritance list is sorted roughly, but not completely, alphabetically:
    -
    [detail level 123]
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
     CAutoContactAbstract base class for AutoContact
     CAutoContactHTeeAutoContact H-Tee (two H, one V)
     CAutoContactTerminalAutoContact Terminal (S/T is a Terminal)
     CAutoContactTurnAutoContact Turn (one H, one V)
     CAutoContactVTeeAutoContact V-Tee (one H, two V)
     CAutoSegmentAbstract base class for AutoSegment
     CAutoHorizontalConcrete Horizontal AutoSegment
     CAutoVerticalConcrete Vertical AutoSegment
     CBaseGrid::AxisGraduations on a BaseGrid Axis (H or V)
     CBaseGridAbstract Base Class for Irregular Grid
     CGrid< GCell >
     CGCellGridGCell Grid
     CGrid< GCellT >Template Class for Regular Grid
     CBaseObserverObserver Design Pattern, Observer part
     CObserver< T >Observer Design Pattern, Observer part
     CChipToolsUtilities for Chip Level Design
     C
     CAutoSegments_AlignedsAll aligned AutoSegment of a set
     CAutoSegments_AnchorOnGCellAll AutoSegment Beginning and/or Stopping in a GCell
     CAutoSegments_OnContactAll AutoSegment anchored on a Contact
     CAutoSegments_PerpandicularsAll perpandicular AutoSegment to a set of aligneds
     CGCell::CompareByDensityGCell Density Comparison Functor
     CGCell::CompareByIndexGCell Index Comparison Functor
     C
     C
     CKatabaticEngineThe Katabatic Tool
     C
     CAutoSegments_InDirectionFilter to select AutoSegment in a given direction
     CAutoSegments_IsAccountableFilter to select accoutable AutoSegment
     CGCellRouting Global Cell
     CGCellDensitySetGCell Set, sorted by density
     CGCellTopologyBuild the wiring for a Net inside a GCell (internal)
     CGCell::KeyGCell Key - Density Cache
     CLocatorHelperLocator Helper Collection's Locators
     CObservableObserver Design Pattern, Subject part
     CSessionModification Session for Katabatic
    -
    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/hierarchy.js b/deprecated/katabatic/doc/html/hierarchy.js deleted file mode 100644 index 7f40ea6a..00000000 --- a/deprecated/katabatic/doc/html/hierarchy.js +++ /dev/null @@ -1,44 +0,0 @@ -var hierarchy = -[ - [ "AutoContact", "classKatabatic_1_1AutoContact.html", [ - [ "AutoContactHTee", "classKatabatic_1_1AutoContactHTee.html", null ], - [ "AutoContactTerminal", "classKatabatic_1_1AutoContactTerminal.html", null ], - [ "AutoContactTurn", "classKatabatic_1_1AutoContactTurn.html", null ], - [ "AutoContactVTee", "classKatabatic_1_1AutoContactVTee.html", null ] - ] ], - [ "AutoSegment", "classKatabatic_1_1AutoSegment.html", [ - [ "AutoHorizontal", "classKatabatic_1_1AutoHorizontal.html", null ], - [ "AutoVertical", "classKatabatic_1_1AutoVertical.html", null ] - ] ], - [ "BaseGrid::Axis", "classKatabatic_1_1BaseGrid_1_1Axis.html", null ], - [ "BaseGrid", "classKatabatic_1_1BaseGrid.html", [ - [ "Grid< GCell >", "classKatabatic_1_1Grid.html", [ - [ "GCellGrid", "classKatabatic_1_1GCellGrid.html", null ] - ] ], - [ "Grid< GCellT >", "classKatabatic_1_1Grid.html", null ] - ] ], - [ "BaseObserver", "classKatabatic_1_1BaseObserver.html", [ - [ "Observer< T >", "classKatabatic_1_1Observer.html", null ] - ] ], - [ "ChipTools", "classKatabatic_1_1ChipTools.html", null ], - [ "Collection< Type >", "../hurricane/classHurricane_1_1Collection.html", [ - [ "AutoSegments_Aligneds", "classKatabatic_1_1AutoSegments__Aligneds.html", null ], - [ "AutoSegments_AnchorOnGCell", "classKatabatic_1_1AutoSegments__AnchorOnGCell.html", null ], - [ "AutoSegments_OnContact", "classKatabatic_1_1AutoSegments__OnContact.html", null ], - [ "AutoSegments_Perpandiculars", "classKatabatic_1_1AutoSegments__Perpandiculars.html", null ] - ] ], - [ "GCell::CompareByDensity", "classKatabatic_1_1GCell_1_1CompareByDensity.html", null ], - [ "GCell::CompareByIndex", "classKatabatic_1_1GCell_1_1CompareByIndex.html", null ], - [ "Filter< Type >", "../hurricane/classHurricane_1_1Filter.html", [ - [ "AutoSegments_InDirection", "classKatabatic_1_1AutoSegments__InDirection.html", null ], - [ "AutoSegments_IsAccountable", "classKatabatic_1_1AutoSegments__IsAccountable.html", null ] - ] ], - [ "GCell", "classKatabatic_1_1GCell.html", null ], - [ "GCellDensitySet", "classKatabatic_1_1GCellDensitySet.html", null ], - [ "GCellTopology", "classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html", null ], - [ "KatabaticEngine", "classKatabatic_1_1KatabaticEngine.html", null ], - [ "GCell::Key", "classKatabatic_1_1GCell_1_1Key.html", null ], - [ "LocatorHelper", "classKatabatic_1_1LocatorHelper.html", null ], - [ "Observable", "classKatabatic_1_1Observable.html", null ], - [ "Session", "classKatabatic_1_1Session.html", null ] -]; \ No newline at end of file diff --git a/deprecated/katabatic/doc/html/index.html b/deprecated/katabatic/doc/html/index.html deleted file mode 100644 index 48324c1f..00000000 --- a/deprecated/katabatic/doc/html/index.html +++ /dev/null @@ -1,62 +0,0 @@ - - - - - Katabatic Documentation - - - - - -

    Katabatic - Routing Toolbox

    - -
    - - - - - - - -
    -
    -
    Katabatic Documentation
    -
    -
    -

    Additionnal documents:

    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Sun Nov 21 2021Return to top of page
    - - - - - -
    Katabatic - Routing ToolboxCopyright © 2008-2020 Sorbonne Universite. All rights reserved
    - - diff --git a/deprecated/katabatic/doc/html/installdox b/deprecated/katabatic/doc/html/installdox deleted file mode 100755 index 2516baa4..00000000 --- a/deprecated/katabatic/doc/html/installdox +++ /dev/null @@ -1,117 +0,0 @@ -#!/usr/bin/perl - -%subst = ( "hurricane.tag", ""); -$quiet = 0; - -if (open(F,"search.cfg")) -{ - $_= ; s/[ \t\n]*$//g ; $subst{"_doc"} = $_; - $_= ; s/[ \t\n]*$//g ; $subst{"_cgi"} = $_; -} - -while ( @ARGV ) { - $_ = shift @ARGV; - if ( s/^-// ) { - if ( /^l(.*)/ ) { - $v = ($1 eq "") ? shift @ARGV : $1; - ($v =~ /\/$/) || ($v .= "/"); - $_ = $v; - if ( /(.+)\@(.+)/ ) { - if ( exists $subst{$1} ) { - $subst{$1} = $2; - } else { - print STDERR "Unknown tag file $1 given with option -l\n"; - &usage(); - } - } else { - print STDERR "Argument $_ is invalid for option -l\n"; - &usage(); - } - } - elsif ( /^q/ ) { - $quiet = 1; - } - elsif ( /^\?|^h/ ) { - &usage(); - } - else { - print STDERR "Illegal option -$_\n"; - &usage(); - } - } - else { - push (@files, $_ ); - } -} - -foreach $sub (keys %subst) -{ - if ( $subst{$sub} eq "" ) - { - print STDERR "No substitute given for tag file `$sub'\n"; - &usage(); - } - elsif ( ! $quiet && $sub ne "_doc" && $sub ne "_cgi" ) - { - print "Substituting $subst{$sub} for each occurence of tag file $sub\n"; - } -} - -if ( ! @files ) { - if (opendir(D,".")) { - foreach $file ( readdir(D) ) { - $match = ".html"; - next if ( $file =~ /^\.\.?$/ ); - ($file =~ /$match/) && (push @files, $file); - ($file =~ "tree.js") && (push @files, $file); - } - closedir(D); - } -} - -if ( ! @files ) { - print STDERR "Warning: No input files given and none found!\n"; -} - -foreach $f (@files) -{ - if ( ! $quiet ) { - print "Editing: $f...\n"; - } - $oldf = $f; - $f .= ".bak"; - unless (rename $oldf,$f) { - print STDERR "Error: cannot rename file $oldf\n"; - exit 1; - } - if (open(F,"<$f")) { - unless (open(G,">$oldf")) { - print STDERR "Error: opening file $oldf for writing\n"; - exit 1; - } - if ($oldf ne "tree.js") { - while () { - s/doxygen\=\"([^ \"\:\t\>\<]*)\:([^ \"\t\>\<]*)\" (href|src)=\"\2/doxygen\=\"$1:$subst{$1}\" \3=\"$subst{$1}/g; - print G "$_"; - } - } - else { - while () { - s/\"([^ \"\:\t\>\<]*)\:([^ \"\t\>\<]*)\", \"\2/\"$1:$subst{$1}\" ,\"$subst{$1}/g; - print G "$_"; - } - } - } - else { - print STDERR "Warning file $f does not exist\n"; - } - unlink $f; -} - -sub usage { - print STDERR "Usage: installdox [options] [html-file [html-file ...]]\n"; - print STDERR "Options:\n"; - print STDERR " -l tagfile\@linkName tag file + URL or directory \n"; - print STDERR " -q Quiet mode\n\n"; - exit 1; -} diff --git a/deprecated/katabatic/doc/html/jquery.js b/deprecated/katabatic/doc/html/jquery.js deleted file mode 100644 index 2771c749..00000000 --- a/deprecated/katabatic/doc/html/jquery.js +++ /dev/null @@ -1,115 +0,0 @@ -/* - @licstart The following is the entire license notice for the - JavaScript code in this file. - - Copyright (C) 1997-2017 by Dimitri van Heesch - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - "Software"), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - @licend The above is the entire license notice - for the JavaScript code in this file - */ -/*! - * jQuery JavaScript Library v1.7.1 - * http://jquery.com/ - * - * Copyright 2011, John Resig - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * Includes Sizzle.js - * http://sizzlejs.com/ - * Copyright 2011, The Dojo Foundation - * Released under the MIT, BSD, and GPL Licenses. - * - * Date: Mon Nov 21 21:11:03 2011 -0500 - */ -(function(bb,L){var av=bb.document,bu=bb.navigator,bl=bb.location;var b=(function(){var bF=function(b0,b1){return new bF.fn.init(b0,b1,bD)},bU=bb.jQuery,bH=bb.$,bD,bY=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,bM=/\S/,bI=/^\s+/,bE=/\s+$/,bA=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,bN=/^[\],:{}\s]*$/,bW=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,bP=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,bJ=/(?:^|:|,)(?:\s*\[)+/g,by=/(webkit)[ \/]([\w.]+)/,bR=/(opera)(?:.*version)?[ \/]([\w.]+)/,bQ=/(msie) ([\w.]+)/,bS=/(mozilla)(?:.*? rv:([\w.]+))?/,bB=/-([a-z]|[0-9])/ig,bZ=/^-ms-/,bT=function(b0,b1){return(b1+"").toUpperCase()},bX=bu.userAgent,bV,bC,e,bL=Object.prototype.toString,bG=Object.prototype.hasOwnProperty,bz=Array.prototype.push,bK=Array.prototype.slice,bO=String.prototype.trim,bv=Array.prototype.indexOf,bx={};bF.fn=bF.prototype={constructor:bF,init:function(b0,b4,b3){var b2,b5,b1,b6;if(!b0){return this}if(b0.nodeType){this.context=this[0]=b0;this.length=1;return this}if(b0==="body"&&!b4&&av.body){this.context=av;this[0]=av.body;this.selector=b0;this.length=1;return this}if(typeof b0==="string"){if(b0.charAt(0)==="<"&&b0.charAt(b0.length-1)===">"&&b0.length>=3){b2=[null,b0,null]}else{b2=bY.exec(b0)}if(b2&&(b2[1]||!b4)){if(b2[1]){b4=b4 instanceof bF?b4[0]:b4;b6=(b4?b4.ownerDocument||b4:av);b1=bA.exec(b0);if(b1){if(bF.isPlainObject(b4)){b0=[av.createElement(b1[1])];bF.fn.attr.call(b0,b4,true)}else{b0=[b6.createElement(b1[1])]}}else{b1=bF.buildFragment([b2[1]],[b6]);b0=(b1.cacheable?bF.clone(b1.fragment):b1.fragment).childNodes}return bF.merge(this,b0)}else{b5=av.getElementById(b2[2]);if(b5&&b5.parentNode){if(b5.id!==b2[2]){return b3.find(b0)}this.length=1;this[0]=b5}this.context=av;this.selector=b0;return this}}else{if(!b4||b4.jquery){return(b4||b3).find(b0)}else{return this.constructor(b4).find(b0)}}}else{if(bF.isFunction(b0)){return b3.ready(b0)}}if(b0.selector!==L){this.selector=b0.selector;this.context=b0.context}return bF.makeArray(b0,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return bK.call(this,0)},get:function(b0){return b0==null?this.toArray():(b0<0?this[this.length+b0]:this[b0])},pushStack:function(b1,b3,b0){var b2=this.constructor();if(bF.isArray(b1)){bz.apply(b2,b1)}else{bF.merge(b2,b1)}b2.prevObject=this;b2.context=this.context;if(b3==="find"){b2.selector=this.selector+(this.selector?" ":"")+b0}else{if(b3){b2.selector=this.selector+"."+b3+"("+b0+")"}}return b2},each:function(b1,b0){return bF.each(this,b1,b0)},ready:function(b0){bF.bindReady();bC.add(b0);return this},eq:function(b0){b0=+b0;return b0===-1?this.slice(b0):this.slice(b0,b0+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(bK.apply(this,arguments),"slice",bK.call(arguments).join(","))},map:function(b0){return this.pushStack(bF.map(this,function(b2,b1){return b0.call(b2,b1,b2)}))},end:function(){return this.prevObject||this.constructor(null)},push:bz,sort:[].sort,splice:[].splice};bF.fn.init.prototype=bF.fn;bF.extend=bF.fn.extend=function(){var b9,b2,b0,b1,b6,b7,b5=arguments[0]||{},b4=1,b3=arguments.length,b8=false;if(typeof b5==="boolean"){b8=b5;b5=arguments[1]||{};b4=2}if(typeof b5!=="object"&&!bF.isFunction(b5)){b5={}}if(b3===b4){b5=this;--b4}for(;b40){return}bC.fireWith(av,[bF]);if(bF.fn.trigger){bF(av).trigger("ready").off("ready")}}},bindReady:function(){if(bC){return}bC=bF.Callbacks("once memory");if(av.readyState==="complete"){return setTimeout(bF.ready,1)}if(av.addEventListener){av.addEventListener("DOMContentLoaded",e,false);bb.addEventListener("load",bF.ready,false)}else{if(av.attachEvent){av.attachEvent("onreadystatechange",e);bb.attachEvent("onload",bF.ready);var b0=false;try{b0=bb.frameElement==null}catch(b1){}if(av.documentElement.doScroll&&b0){bw()}}}},isFunction:function(b0){return bF.type(b0)==="function"},isArray:Array.isArray||function(b0){return bF.type(b0)==="array"},isWindow:function(b0){return b0&&typeof b0==="object"&&"setInterval" in b0},isNumeric:function(b0){return !isNaN(parseFloat(b0))&&isFinite(b0)},type:function(b0){return b0==null?String(b0):bx[bL.call(b0)]||"object"},isPlainObject:function(b2){if(!b2||bF.type(b2)!=="object"||b2.nodeType||bF.isWindow(b2)){return false}try{if(b2.constructor&&!bG.call(b2,"constructor")&&!bG.call(b2.constructor.prototype,"isPrototypeOf")){return false}}catch(b1){return false}var b0;for(b0 in b2){}return b0===L||bG.call(b2,b0)},isEmptyObject:function(b1){for(var b0 in b1){return false}return true},error:function(b0){throw new Error(b0)},parseJSON:function(b0){if(typeof b0!=="string"||!b0){return null}b0=bF.trim(b0);if(bb.JSON&&bb.JSON.parse){return bb.JSON.parse(b0)}if(bN.test(b0.replace(bW,"@").replace(bP,"]").replace(bJ,""))){return(new Function("return "+b0))()}bF.error("Invalid JSON: "+b0)},parseXML:function(b2){var b0,b1;try{if(bb.DOMParser){b1=new DOMParser();b0=b1.parseFromString(b2,"text/xml")}else{b0=new ActiveXObject("Microsoft.XMLDOM");b0.async="false";b0.loadXML(b2)}}catch(b3){b0=L}if(!b0||!b0.documentElement||b0.getElementsByTagName("parsererror").length){bF.error("Invalid XML: "+b2)}return b0},noop:function(){},globalEval:function(b0){if(b0&&bM.test(b0)){(bb.execScript||function(b1){bb["eval"].call(bb,b1)})(b0)}},camelCase:function(b0){return b0.replace(bZ,"ms-").replace(bB,bT)},nodeName:function(b1,b0){return b1.nodeName&&b1.nodeName.toUpperCase()===b0.toUpperCase()},each:function(b3,b6,b2){var b1,b4=0,b5=b3.length,b0=b5===L||bF.isFunction(b3);if(b2){if(b0){for(b1 in b3){if(b6.apply(b3[b1],b2)===false){break}}}else{for(;b40&&b0[0]&&b0[b1-1])||b1===0||bF.isArray(b0));if(b3){for(;b21?aJ.call(arguments,0):bG;if(!(--bw)){bC.resolveWith(bC,bx)}}}function bz(bF){return function(bG){bB[bF]=arguments.length>1?aJ.call(arguments,0):bG;bC.notifyWith(bE,bB)}}if(e>1){for(;bv
    a";bI=bv.getElementsByTagName("*");bF=bv.getElementsByTagName("a")[0];if(!bI||!bI.length||!bF){return{}}bG=av.createElement("select");bx=bG.appendChild(av.createElement("option"));bE=bv.getElementsByTagName("input")[0];bJ={leadingWhitespace:(bv.firstChild.nodeType===3),tbody:!bv.getElementsByTagName("tbody").length,htmlSerialize:!!bv.getElementsByTagName("link").length,style:/top/.test(bF.getAttribute("style")),hrefNormalized:(bF.getAttribute("href")==="/a"),opacity:/^0.55/.test(bF.style.opacity),cssFloat:!!bF.style.cssFloat,checkOn:(bE.value==="on"),optSelected:bx.selected,getSetAttribute:bv.className!=="t",enctype:!!av.createElement("form").enctype,html5Clone:av.createElement("nav").cloneNode(true).outerHTML!=="<:nav>",submitBubbles:true,changeBubbles:true,focusinBubbles:false,deleteExpando:true,noCloneEvent:true,inlineBlockNeedsLayout:false,shrinkWrapBlocks:false,reliableMarginRight:true};bE.checked=true;bJ.noCloneChecked=bE.cloneNode(true).checked;bG.disabled=true;bJ.optDisabled=!bx.disabled;try{delete bv.test}catch(bC){bJ.deleteExpando=false}if(!bv.addEventListener&&bv.attachEvent&&bv.fireEvent){bv.attachEvent("onclick",function(){bJ.noCloneEvent=false});bv.cloneNode(true).fireEvent("onclick")}bE=av.createElement("input");bE.value="t";bE.setAttribute("type","radio");bJ.radioValue=bE.value==="t";bE.setAttribute("checked","checked");bv.appendChild(bE);bD=av.createDocumentFragment();bD.appendChild(bv.lastChild);bJ.checkClone=bD.cloneNode(true).cloneNode(true).lastChild.checked;bJ.appendChecked=bE.checked;bD.removeChild(bE);bD.appendChild(bv);bv.innerHTML="";if(bb.getComputedStyle){bA=av.createElement("div");bA.style.width="0";bA.style.marginRight="0";bv.style.width="2px";bv.appendChild(bA);bJ.reliableMarginRight=(parseInt((bb.getComputedStyle(bA,null)||{marginRight:0}).marginRight,10)||0)===0}if(bv.attachEvent){for(by in {submit:1,change:1,focusin:1}){bB="on"+by;bw=(bB in bv);if(!bw){bv.setAttribute(bB,"return;");bw=(typeof bv[bB]==="function")}bJ[by+"Bubbles"]=bw}}bD.removeChild(bv);bD=bG=bx=bA=bv=bE=null;b(function(){var bM,bU,bV,bT,bN,bO,bL,bS,bR,e,bP,bQ=av.getElementsByTagName("body")[0];if(!bQ){return}bL=1;bS="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;";bR="visibility:hidden;border:0;";e="style='"+bS+"border:5px solid #000;padding:0;'";bP="
    ";bM=av.createElement("div");bM.style.cssText=bR+"width:0;height:0;position:static;top:0;margin-top:"+bL+"px";bQ.insertBefore(bM,bQ.firstChild);bv=av.createElement("div");bM.appendChild(bv);bv.innerHTML="
    t
    ";bz=bv.getElementsByTagName("td");bw=(bz[0].offsetHeight===0);bz[0].style.display="";bz[1].style.display="none";bJ.reliableHiddenOffsets=bw&&(bz[0].offsetHeight===0);bv.innerHTML="";bv.style.width=bv.style.paddingLeft="1px";b.boxModel=bJ.boxModel=bv.offsetWidth===2;if(typeof bv.style.zoom!=="undefined"){bv.style.display="inline";bv.style.zoom=1;bJ.inlineBlockNeedsLayout=(bv.offsetWidth===2);bv.style.display="";bv.innerHTML="
    ";bJ.shrinkWrapBlocks=(bv.offsetWidth!==2)}bv.style.cssText=bS+bR;bv.innerHTML=bP;bU=bv.firstChild;bV=bU.firstChild;bN=bU.nextSibling.firstChild.firstChild;bO={doesNotAddBorder:(bV.offsetTop!==5),doesAddBorderForTableAndCells:(bN.offsetTop===5)};bV.style.position="fixed";bV.style.top="20px";bO.fixedPosition=(bV.offsetTop===20||bV.offsetTop===15);bV.style.position=bV.style.top="";bU.style.overflow="hidden";bU.style.position="relative";bO.subtractsBorderForOverflowNotVisible=(bV.offsetTop===-5);bO.doesNotIncludeMarginInBodyOffset=(bQ.offsetTop!==bL);bQ.removeChild(bM);bv=bM=null;b.extend(bJ,bO)});return bJ})();var aS=/^(?:\{.*\}|\[.*\])$/,aA=/([A-Z])/g;b.extend({cache:{},uuid:0,expando:"jQuery"+(b.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:true,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:true},hasData:function(e){e=e.nodeType?b.cache[e[b.expando]]:e[b.expando];return !!e&&!S(e)},data:function(bx,bv,bz,by){if(!b.acceptData(bx)){return}var bG,bA,bD,bE=b.expando,bC=typeof bv==="string",bF=bx.nodeType,e=bF?b.cache:bx,bw=bF?bx[bE]:bx[bE]&&bE,bB=bv==="events";if((!bw||!e[bw]||(!bB&&!by&&!e[bw].data))&&bC&&bz===L){return}if(!bw){if(bF){bx[bE]=bw=++b.uuid}else{bw=bE}}if(!e[bw]){e[bw]={};if(!bF){e[bw].toJSON=b.noop}}if(typeof bv==="object"||typeof bv==="function"){if(by){e[bw]=b.extend(e[bw],bv)}else{e[bw].data=b.extend(e[bw].data,bv)}}bG=bA=e[bw];if(!by){if(!bA.data){bA.data={}}bA=bA.data}if(bz!==L){bA[b.camelCase(bv)]=bz}if(bB&&!bA[bv]){return bG.events}if(bC){bD=bA[bv];if(bD==null){bD=bA[b.camelCase(bv)]}}else{bD=bA}return bD},removeData:function(bx,bv,by){if(!b.acceptData(bx)){return}var bB,bA,bz,bC=b.expando,bD=bx.nodeType,e=bD?b.cache:bx,bw=bD?bx[bC]:bC;if(!e[bw]){return}if(bv){bB=by?e[bw]:e[bw].data;if(bB){if(!b.isArray(bv)){if(bv in bB){bv=[bv]}else{bv=b.camelCase(bv);if(bv in bB){bv=[bv]}else{bv=bv.split(" ")}}}for(bA=0,bz=bv.length;bA-1){return true}}return false},val:function(bx){var e,bv,by,bw=this[0];if(!arguments.length){if(bw){e=b.valHooks[bw.nodeName.toLowerCase()]||b.valHooks[bw.type];if(e&&"get" in e&&(bv=e.get(bw,"value"))!==L){return bv}bv=bw.value;return typeof bv==="string"?bv.replace(aU,""):bv==null?"":bv}return}by=b.isFunction(bx);return this.each(function(bA){var bz=b(this),bB;if(this.nodeType!==1){return}if(by){bB=bx.call(this,bA,bz.val())}else{bB=bx}if(bB==null){bB=""}else{if(typeof bB==="number"){bB+=""}else{if(b.isArray(bB)){bB=b.map(bB,function(bC){return bC==null?"":bC+""})}}}e=b.valHooks[this.nodeName.toLowerCase()]||b.valHooks[this.type];if(!e||!("set" in e)||e.set(this,bB,"value")===L){this.value=bB}})}});b.extend({valHooks:{option:{get:function(e){var bv=e.attributes.value;return !bv||bv.specified?e.value:e.text}},select:{get:function(e){var bA,bv,bz,bx,by=e.selectedIndex,bB=[],bC=e.options,bw=e.type==="select-one";if(by<0){return null}bv=bw?by:0;bz=bw?by+1:bC.length;for(;bv=0});if(!e.length){bv.selectedIndex=-1}return e}}},attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(bA,bx,bB,bz){var bw,e,by,bv=bA.nodeType;if(!bA||bv===3||bv===8||bv===2){return}if(bz&&bx in b.attrFn){return b(bA)[bx](bB)}if(typeof bA.getAttribute==="undefined"){return b.prop(bA,bx,bB)}by=bv!==1||!b.isXMLDoc(bA);if(by){bx=bx.toLowerCase();e=b.attrHooks[bx]||(ao.test(bx)?aY:be)}if(bB!==L){if(bB===null){b.removeAttr(bA,bx);return}else{if(e&&"set" in e&&by&&(bw=e.set(bA,bB,bx))!==L){return bw}else{bA.setAttribute(bx,""+bB);return bB}}}else{if(e&&"get" in e&&by&&(bw=e.get(bA,bx))!==null){return bw}else{bw=bA.getAttribute(bx);return bw===null?L:bw}}},removeAttr:function(bx,bz){var by,bA,bv,e,bw=0;if(bz&&bx.nodeType===1){bA=bz.toLowerCase().split(af);e=bA.length;for(;bw=0)}}})});var bd=/^(?:textarea|input|select)$/i,n=/^([^\.]*)?(?:\.(.+))?$/,J=/\bhover(\.\S+)?\b/,aO=/^key/,bf=/^(?:mouse|contextmenu)|click/,T=/^(?:focusinfocus|focusoutblur)$/,U=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,Y=function(e){var bv=U.exec(e);if(bv){bv[1]=(bv[1]||"").toLowerCase();bv[3]=bv[3]&&new RegExp("(?:^|\\s)"+bv[3]+"(?:\\s|$)")}return bv},j=function(bw,e){var bv=bw.attributes||{};return((!e[1]||bw.nodeName.toLowerCase()===e[1])&&(!e[2]||(bv.id||{}).value===e[2])&&(!e[3]||e[3].test((bv["class"]||{}).value)))},bt=function(e){return b.event.special.hover?e:e.replace(J,"mouseenter$1 mouseleave$1")};b.event={add:function(bx,bC,bJ,bA,by){var bD,bB,bK,bI,bH,bF,e,bG,bv,bz,bw,bE;if(bx.nodeType===3||bx.nodeType===8||!bC||!bJ||!(bD=b._data(bx))){return}if(bJ.handler){bv=bJ;bJ=bv.handler}if(!bJ.guid){bJ.guid=b.guid++}bK=bD.events;if(!bK){bD.events=bK={}}bB=bD.handle;if(!bB){bD.handle=bB=function(bL){return typeof b!=="undefined"&&(!bL||b.event.triggered!==bL.type)?b.event.dispatch.apply(bB.elem,arguments):L};bB.elem=bx}bC=b.trim(bt(bC)).split(" ");for(bI=0;bI=0){bG=bG.slice(0,-1);bw=true}if(bG.indexOf(".")>=0){bx=bG.split(".");bG=bx.shift();bx.sort()}if((!bA||b.event.customEvent[bG])&&!b.event.global[bG]){return}bv=typeof bv==="object"?bv[b.expando]?bv:new b.Event(bG,bv):new b.Event(bG);bv.type=bG;bv.isTrigger=true;bv.exclusive=bw;bv.namespace=bx.join(".");bv.namespace_re=bv.namespace?new RegExp("(^|\\.)"+bx.join("\\.(?:.*\\.)?")+"(\\.|$)"):null;by=bG.indexOf(":")<0?"on"+bG:"";if(!bA){e=b.cache;for(bC in e){if(e[bC].events&&e[bC].events[bG]){b.event.trigger(bv,bD,e[bC].handle.elem,true)}}return}bv.result=L;if(!bv.target){bv.target=bA}bD=bD!=null?b.makeArray(bD):[];bD.unshift(bv);bF=b.event.special[bG]||{};if(bF.trigger&&bF.trigger.apply(bA,bD)===false){return}bB=[[bA,bF.bindType||bG]];if(!bJ&&!bF.noBubble&&!b.isWindow(bA)){bI=bF.delegateType||bG;bH=T.test(bI+bG)?bA:bA.parentNode;bz=null;for(;bH;bH=bH.parentNode){bB.push([bH,bI]);bz=bH}if(bz&&bz===bA.ownerDocument){bB.push([bz.defaultView||bz.parentWindow||bb,bI])}}for(bC=0;bCbA){bH.push({elem:this,matches:bz.slice(bA)})}for(bC=0;bC0?this.on(e,null,bx,bw):this.trigger(e)};if(b.attrFn){b.attrFn[e]=true}if(aO.test(e)){b.event.fixHooks[e]=b.event.keyHooks}if(bf.test(e)){b.event.fixHooks[e]=b.event.mouseHooks}}); -/*! - * Sizzle CSS Selector Engine - * Copyright 2011, The Dojo Foundation - * Released under the MIT, BSD, and GPL Licenses. - * More information: http://sizzlejs.com/ - */ -(function(){var bH=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,bC="sizcache"+(Math.random()+"").replace(".",""),bI=0,bL=Object.prototype.toString,bB=false,bA=true,bK=/\\/g,bO=/\r\n/g,bQ=/\W/;[0,0].sort(function(){bA=false;return 0});var by=function(bV,e,bY,bZ){bY=bY||[];e=e||av;var b1=e;if(e.nodeType!==1&&e.nodeType!==9){return[]}if(!bV||typeof bV!=="string"){return bY}var bS,b3,b6,bR,b2,b5,b4,bX,bU=true,bT=by.isXML(e),bW=[],b0=bV;do{bH.exec("");bS=bH.exec(b0);if(bS){b0=bS[3];bW.push(bS[1]);if(bS[2]){bR=bS[3];break}}}while(bS);if(bW.length>1&&bD.exec(bV)){if(bW.length===2&&bE.relative[bW[0]]){b3=bM(bW[0]+bW[1],e,bZ)}else{b3=bE.relative[bW[0]]?[e]:by(bW.shift(),e);while(bW.length){bV=bW.shift();if(bE.relative[bV]){bV+=bW.shift()}b3=bM(bV,b3,bZ)}}}else{if(!bZ&&bW.length>1&&e.nodeType===9&&!bT&&bE.match.ID.test(bW[0])&&!bE.match.ID.test(bW[bW.length-1])){b2=by.find(bW.shift(),e,bT);e=b2.expr?by.filter(b2.expr,b2.set)[0]:b2.set[0]}if(e){b2=bZ?{expr:bW.pop(),set:bF(bZ)}:by.find(bW.pop(),bW.length===1&&(bW[0]==="~"||bW[0]==="+")&&e.parentNode?e.parentNode:e,bT);b3=b2.expr?by.filter(b2.expr,b2.set):b2.set;if(bW.length>0){b6=bF(b3)}else{bU=false}while(bW.length){b5=bW.pop();b4=b5;if(!bE.relative[b5]){b5=""}else{b4=bW.pop()}if(b4==null){b4=e}bE.relative[b5](b6,b4,bT)}}else{b6=bW=[]}}if(!b6){b6=b3}if(!b6){by.error(b5||bV)}if(bL.call(b6)==="[object Array]"){if(!bU){bY.push.apply(bY,b6)}else{if(e&&e.nodeType===1){for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&(b6[bX]===true||b6[bX].nodeType===1&&by.contains(e,b6[bX]))){bY.push(b3[bX])}}}else{for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&b6[bX].nodeType===1){bY.push(b3[bX])}}}}}else{bF(b6,bY)}if(bR){by(bR,b1,bY,bZ);by.uniqueSort(bY)}return bY};by.uniqueSort=function(bR){if(bJ){bB=bA;bR.sort(bJ);if(bB){for(var e=1;e0};by.find=function(bX,e,bY){var bW,bS,bU,bT,bV,bR;if(!bX){return[]}for(bS=0,bU=bE.order.length;bS":function(bW,bR){var bV,bU=typeof bR==="string",bS=0,e=bW.length;if(bU&&!bQ.test(bR)){bR=bR.toLowerCase();for(;bS=0)){if(!bS){e.push(bV)}}else{if(bS){bR[bU]=false}}}}return false},ID:function(e){return e[1].replace(bK,"")},TAG:function(bR,e){return bR[1].replace(bK,"").toLowerCase()},CHILD:function(e){if(e[1]==="nth"){if(!e[2]){by.error(e[0])}e[2]=e[2].replace(/^\+|\s*/g,"");var bR=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(e[2]==="even"&&"2n"||e[2]==="odd"&&"2n+1"||!/\D/.test(e[2])&&"0n+"+e[2]||e[2]);e[2]=(bR[1]+(bR[2]||1))-0;e[3]=bR[3]-0}else{if(e[2]){by.error(e[0])}}e[0]=bI++;return e},ATTR:function(bU,bR,bS,e,bV,bW){var bT=bU[1]=bU[1].replace(bK,"");if(!bW&&bE.attrMap[bT]){bU[1]=bE.attrMap[bT]}bU[4]=(bU[4]||bU[5]||"").replace(bK,"");if(bU[2]==="~="){bU[4]=" "+bU[4]+" "}return bU},PSEUDO:function(bU,bR,bS,e,bV){if(bU[1]==="not"){if((bH.exec(bU[3])||"").length>1||/^\w/.test(bU[3])){bU[3]=by(bU[3],null,null,bR)}else{var bT=by.filter(bU[3],bR,bS,true^bV);if(!bS){e.push.apply(e,bT)}return false}}else{if(bE.match.POS.test(bU[0])||bE.match.CHILD.test(bU[0])){return true}}return bU},POS:function(e){e.unshift(true);return e}},filters:{enabled:function(e){return e.disabled===false&&e.type!=="hidden"},disabled:function(e){return e.disabled===true},checked:function(e){return e.checked===true},selected:function(e){if(e.parentNode){e.parentNode.selectedIndex}return e.selected===true},parent:function(e){return !!e.firstChild},empty:function(e){return !e.firstChild},has:function(bS,bR,e){return !!by(e[3],bS).length},header:function(e){return(/h\d/i).test(e.nodeName)},text:function(bS){var e=bS.getAttribute("type"),bR=bS.type;return bS.nodeName.toLowerCase()==="input"&&"text"===bR&&(e===bR||e===null)},radio:function(e){return e.nodeName.toLowerCase()==="input"&&"radio"===e.type},checkbox:function(e){return e.nodeName.toLowerCase()==="input"&&"checkbox"===e.type},file:function(e){return e.nodeName.toLowerCase()==="input"&&"file"===e.type},password:function(e){return e.nodeName.toLowerCase()==="input"&&"password"===e.type},submit:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"submit"===bR.type},image:function(e){return e.nodeName.toLowerCase()==="input"&&"image"===e.type},reset:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"reset"===bR.type},button:function(bR){var e=bR.nodeName.toLowerCase();return e==="input"&&"button"===bR.type||e==="button"},input:function(e){return(/input|select|textarea|button/i).test(e.nodeName)},focus:function(e){return e===e.ownerDocument.activeElement}},setFilters:{first:function(bR,e){return e===0},last:function(bS,bR,e,bT){return bR===bT.length-1},even:function(bR,e){return e%2===0},odd:function(bR,e){return e%2===1},lt:function(bS,bR,e){return bRe[3]-0},nth:function(bS,bR,e){return e[3]-0===bR},eq:function(bS,bR,e){return e[3]-0===bR}},filter:{PSEUDO:function(bS,bX,bW,bY){var e=bX[1],bR=bE.filters[e];if(bR){return bR(bS,bW,bX,bY)}else{if(e==="contains"){return(bS.textContent||bS.innerText||bw([bS])||"").indexOf(bX[3])>=0}else{if(e==="not"){var bT=bX[3];for(var bV=0,bU=bT.length;bV=0)}}},ID:function(bR,e){return bR.nodeType===1&&bR.getAttribute("id")===e},TAG:function(bR,e){return(e==="*"&&bR.nodeType===1)||!!bR.nodeName&&bR.nodeName.toLowerCase()===e},CLASS:function(bR,e){return(" "+(bR.className||bR.getAttribute("class"))+" ").indexOf(e)>-1},ATTR:function(bV,bT){var bS=bT[1],e=by.attr?by.attr(bV,bS):bE.attrHandle[bS]?bE.attrHandle[bS](bV):bV[bS]!=null?bV[bS]:bV.getAttribute(bS),bW=e+"",bU=bT[2],bR=bT[4];return e==null?bU==="!=":!bU&&by.attr?e!=null:bU==="="?bW===bR:bU==="*="?bW.indexOf(bR)>=0:bU==="~="?(" "+bW+" ").indexOf(bR)>=0:!bR?bW&&e!==false:bU==="!="?bW!==bR:bU==="^="?bW.indexOf(bR)===0:bU==="$="?bW.substr(bW.length-bR.length)===bR:bU==="|="?bW===bR||bW.substr(0,bR.length+1)===bR+"-":false},POS:function(bU,bR,bS,bV){var e=bR[2],bT=bE.setFilters[e];if(bT){return bT(bU,bS,bR,bV)}}}};var bD=bE.match.POS,bx=function(bR,e){return"\\"+(e-0+1)};for(var bz in bE.match){bE.match[bz]=new RegExp(bE.match[bz].source+(/(?![^\[]*\])(?![^\(]*\))/.source));bE.leftMatch[bz]=new RegExp(/(^(?:.|\r|\n)*?)/.source+bE.match[bz].source.replace(/\\(\d+)/g,bx))}var bF=function(bR,e){bR=Array.prototype.slice.call(bR,0);if(e){e.push.apply(e,bR);return e}return bR};try{Array.prototype.slice.call(av.documentElement.childNodes,0)[0].nodeType}catch(bP){bF=function(bU,bT){var bS=0,bR=bT||[];if(bL.call(bU)==="[object Array]"){Array.prototype.push.apply(bR,bU)}else{if(typeof bU.length==="number"){for(var e=bU.length;bS";e.insertBefore(bR,e.firstChild);if(av.getElementById(bS)){bE.find.ID=function(bU,bV,bW){if(typeof bV.getElementById!=="undefined"&&!bW){var bT=bV.getElementById(bU[1]);return bT?bT.id===bU[1]||typeof bT.getAttributeNode!=="undefined"&&bT.getAttributeNode("id").nodeValue===bU[1]?[bT]:L:[]}};bE.filter.ID=function(bV,bT){var bU=typeof bV.getAttributeNode!=="undefined"&&bV.getAttributeNode("id");return bV.nodeType===1&&bU&&bU.nodeValue===bT}}e.removeChild(bR);e=bR=null})();(function(){var e=av.createElement("div");e.appendChild(av.createComment(""));if(e.getElementsByTagName("*").length>0){bE.find.TAG=function(bR,bV){var bU=bV.getElementsByTagName(bR[1]);if(bR[1]==="*"){var bT=[];for(var bS=0;bU[bS];bS++){if(bU[bS].nodeType===1){bT.push(bU[bS])}}bU=bT}return bU}}e.innerHTML="";if(e.firstChild&&typeof e.firstChild.getAttribute!=="undefined"&&e.firstChild.getAttribute("href")!=="#"){bE.attrHandle.href=function(bR){return bR.getAttribute("href",2)}}e=null})();if(av.querySelectorAll){(function(){var e=by,bT=av.createElement("div"),bS="__sizzle__";bT.innerHTML="

    ";if(bT.querySelectorAll&&bT.querySelectorAll(".TEST").length===0){return}by=function(b4,bV,bZ,b3){bV=bV||av;if(!b3&&!by.isXML(bV)){var b2=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b4);if(b2&&(bV.nodeType===1||bV.nodeType===9)){if(b2[1]){return bF(bV.getElementsByTagName(b4),bZ)}else{if(b2[2]&&bE.find.CLASS&&bV.getElementsByClassName){return bF(bV.getElementsByClassName(b2[2]),bZ)}}}if(bV.nodeType===9){if(b4==="body"&&bV.body){return bF([bV.body],bZ)}else{if(b2&&b2[3]){var bY=bV.getElementById(b2[3]);if(bY&&bY.parentNode){if(bY.id===b2[3]){return bF([bY],bZ)}}else{return bF([],bZ)}}}try{return bF(bV.querySelectorAll(b4),bZ)}catch(b0){}}else{if(bV.nodeType===1&&bV.nodeName.toLowerCase()!=="object"){var bW=bV,bX=bV.getAttribute("id"),bU=bX||bS,b6=bV.parentNode,b5=/^\s*[+~]/.test(b4);if(!bX){bV.setAttribute("id",bU)}else{bU=bU.replace(/'/g,"\\$&")}if(b5&&b6){bV=bV.parentNode}try{if(!b5||b6){return bF(bV.querySelectorAll("[id='"+bU+"'] "+b4),bZ)}}catch(b1){}finally{if(!bX){bW.removeAttribute("id")}}}}}return e(b4,bV,bZ,b3)};for(var bR in e){by[bR]=e[bR]}bT=null})()}(function(){var e=av.documentElement,bS=e.matchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.msMatchesSelector;if(bS){var bU=!bS.call(av.createElement("div"),"div"),bR=false;try{bS.call(av.documentElement,"[test!='']:sizzle")}catch(bT){bR=true}by.matchesSelector=function(bW,bY){bY=bY.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!by.isXML(bW)){try{if(bR||!bE.match.PSEUDO.test(bY)&&!/!=/.test(bY)){var bV=bS.call(bW,bY);if(bV||!bU||bW.document&&bW.document.nodeType!==11){return bV}}}catch(bX){}}return by(bY,null,null,[bW]).length>0}}})();(function(){var e=av.createElement("div");e.innerHTML="
    ";if(!e.getElementsByClassName||e.getElementsByClassName("e").length===0){return}e.lastChild.className="e";if(e.getElementsByClassName("e").length===1){return}bE.order.splice(1,0,"CLASS");bE.find.CLASS=function(bR,bS,bT){if(typeof bS.getElementsByClassName!=="undefined"&&!bT){return bS.getElementsByClassName(bR[1])}};e=null})();function bv(bR,bW,bV,bZ,bX,bY){for(var bT=0,bS=bZ.length;bT0){bU=e;break}}}e=e[bR]}bZ[bT]=bU}}}if(av.documentElement.contains){by.contains=function(bR,e){return bR!==e&&(bR.contains?bR.contains(e):true)}}else{if(av.documentElement.compareDocumentPosition){by.contains=function(bR,e){return !!(bR.compareDocumentPosition(e)&16)}}else{by.contains=function(){return false}}}by.isXML=function(e){var bR=(e?e.ownerDocument||e:0).documentElement;return bR?bR.nodeName!=="HTML":false};var bM=function(bS,e,bW){var bV,bX=[],bU="",bY=e.nodeType?[e]:e;while((bV=bE.match.PSEUDO.exec(bS))){bU+=bV[0];bS=bS.replace(bE.match.PSEUDO,"")}bS=bE.relative[bS]?bS+"*":bS;for(var bT=0,bR=bY.length;bT0){for(bB=bA;bB=0:b.filter(e,this).length>0:this.filter(e).length>0)},closest:function(by,bx){var bv=[],bw,e,bz=this[0];if(b.isArray(by)){var bB=1;while(bz&&bz.ownerDocument&&bz!==bx){for(bw=0;bw-1:b.find.matchesSelector(bz,by)){bv.push(bz);break}else{bz=bz.parentNode;if(!bz||!bz.ownerDocument||bz===bx||bz.nodeType===11){break}}}}bv=bv.length>1?b.unique(bv):bv;return this.pushStack(bv,"closest",by)},index:function(e){if(!e){return(this[0]&&this[0].parentNode)?this.prevAll().length:-1}if(typeof e==="string"){return b.inArray(this[0],b(e))}return b.inArray(e.jquery?e[0]:e,this)},add:function(e,bv){var bx=typeof e==="string"?b(e,bv):b.makeArray(e&&e.nodeType?[e]:e),bw=b.merge(this.get(),bx);return this.pushStack(C(bx[0])||C(bw[0])?bw:b.unique(bw))},andSelf:function(){return this.add(this.prevObject)}});function C(e){return !e||!e.parentNode||e.parentNode.nodeType===11}b.each({parent:function(bv){var e=bv.parentNode;return e&&e.nodeType!==11?e:null},parents:function(e){return b.dir(e,"parentNode")},parentsUntil:function(bv,e,bw){return b.dir(bv,"parentNode",bw)},next:function(e){return b.nth(e,2,"nextSibling")},prev:function(e){return b.nth(e,2,"previousSibling")},nextAll:function(e){return b.dir(e,"nextSibling")},prevAll:function(e){return b.dir(e,"previousSibling")},nextUntil:function(bv,e,bw){return b.dir(bv,"nextSibling",bw)},prevUntil:function(bv,e,bw){return b.dir(bv,"previousSibling",bw)},siblings:function(e){return b.sibling(e.parentNode.firstChild,e)},children:function(e){return b.sibling(e.firstChild)},contents:function(e){return b.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:b.makeArray(e.childNodes)}},function(e,bv){b.fn[e]=function(by,bw){var bx=b.map(this,bv,by);if(!ab.test(e)){bw=by}if(bw&&typeof bw==="string"){bx=b.filter(bw,bx)}bx=this.length>1&&!ay[e]?b.unique(bx):bx;if((this.length>1||a9.test(bw))&&aq.test(e)){bx=bx.reverse()}return this.pushStack(bx,e,P.call(arguments).join(","))}});b.extend({filter:function(bw,e,bv){if(bv){bw=":not("+bw+")"}return e.length===1?b.find.matchesSelector(e[0],bw)?[e[0]]:[]:b.find.matches(bw,e)},dir:function(bw,bv,by){var e=[],bx=bw[bv];while(bx&&bx.nodeType!==9&&(by===L||bx.nodeType!==1||!b(bx).is(by))){if(bx.nodeType===1){e.push(bx)}bx=bx[bv]}return e},nth:function(by,e,bw,bx){e=e||1;var bv=0;for(;by;by=by[bw]){if(by.nodeType===1&&++bv===e){break}}return by},sibling:function(bw,bv){var e=[];for(;bw;bw=bw.nextSibling){if(bw.nodeType===1&&bw!==bv){e.push(bw)}}return e}});function aG(bx,bw,e){bw=bw||0;if(b.isFunction(bw)){return b.grep(bx,function(bz,by){var bA=!!bw.call(bz,by,bz);return bA===e})}else{if(bw.nodeType){return b.grep(bx,function(bz,by){return(bz===bw)===e})}else{if(typeof bw==="string"){var bv=b.grep(bx,function(by){return by.nodeType===1});if(bp.test(bw)){return b.filter(bw,bv,!e)}else{bw=b.filter(bw,bv)}}}}return b.grep(bx,function(bz,by){return(b.inArray(bz,bw)>=0)===e})}function a(e){var bw=aR.split("|"),bv=e.createDocumentFragment();if(bv.createElement){while(bw.length){bv.createElement(bw.pop())}}return bv}var aR="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",ag=/ jQuery\d+="(?:\d+|null)"/g,ar=/^\s+/,R=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,d=/<([\w:]+)/,w=/",""],legend:[1,"
    ","
    "],thead:[1,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],col:[2,"","
    "],area:[1,"",""],_default:[0,"",""]},ac=a(av);ax.optgroup=ax.option;ax.tbody=ax.tfoot=ax.colgroup=ax.caption=ax.thead;ax.th=ax.td;if(!b.support.htmlSerialize){ax._default=[1,"div
    ","
    "]}b.fn.extend({text:function(e){if(b.isFunction(e)){return this.each(function(bw){var bv=b(this);bv.text(e.call(this,bw,bv.text()))})}if(typeof e!=="object"&&e!==L){return this.empty().append((this[0]&&this[0].ownerDocument||av).createTextNode(e))}return b.text(this)},wrapAll:function(e){if(b.isFunction(e)){return this.each(function(bw){b(this).wrapAll(e.call(this,bw))})}if(this[0]){var bv=b(e,this[0].ownerDocument).eq(0).clone(true);if(this[0].parentNode){bv.insertBefore(this[0])}bv.map(function(){var bw=this;while(bw.firstChild&&bw.firstChild.nodeType===1){bw=bw.firstChild}return bw}).append(this)}return this},wrapInner:function(e){if(b.isFunction(e)){return this.each(function(bv){b(this).wrapInner(e.call(this,bv))})}return this.each(function(){var bv=b(this),bw=bv.contents();if(bw.length){bw.wrapAll(e)}else{bv.append(e)}})},wrap:function(e){var bv=b.isFunction(e);return this.each(function(bw){b(this).wrapAll(bv?e.call(this,bw):e)})},unwrap:function(){return this.parent().each(function(){if(!b.nodeName(this,"body")){b(this).replaceWith(this.childNodes)}}).end()},append:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.appendChild(e)}})},prepend:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.insertBefore(e,this.firstChild)}})},before:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this)})}else{if(arguments.length){var e=b.clean(arguments);e.push.apply(e,this.toArray());return this.pushStack(e,"before",arguments)}}},after:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this.nextSibling)})}else{if(arguments.length){var e=this.pushStack(this,"after",arguments);e.push.apply(e,b.clean(arguments));return e}}},remove:function(e,bx){for(var bv=0,bw;(bw=this[bv])!=null;bv++){if(!e||b.filter(e,[bw]).length){if(!bx&&bw.nodeType===1){b.cleanData(bw.getElementsByTagName("*"));b.cleanData([bw])}if(bw.parentNode){bw.parentNode.removeChild(bw)}}}return this},empty:function(){for(var e=0,bv;(bv=this[e])!=null;e++){if(bv.nodeType===1){b.cleanData(bv.getElementsByTagName("*"))}while(bv.firstChild){bv.removeChild(bv.firstChild)}}return this},clone:function(bv,e){bv=bv==null?false:bv;e=e==null?bv:e;return this.map(function(){return b.clone(this,bv,e)})},html:function(bx){if(bx===L){return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(ag,""):null}else{if(typeof bx==="string"&&!ae.test(bx)&&(b.support.leadingWhitespace||!ar.test(bx))&&!ax[(d.exec(bx)||["",""])[1].toLowerCase()]){bx=bx.replace(R,"<$1>");try{for(var bw=0,bv=this.length;bw1&&bw0?this.clone(true):this).get();b(bC[bA])[bv](by);bz=bz.concat(by)}return this.pushStack(bz,e,bC.selector)}}});function bg(e){if(typeof e.getElementsByTagName!=="undefined"){return e.getElementsByTagName("*")}else{if(typeof e.querySelectorAll!=="undefined"){return e.querySelectorAll("*")}else{return[]}}}function az(e){if(e.type==="checkbox"||e.type==="radio"){e.defaultChecked=e.checked}}function E(e){var bv=(e.nodeName||"").toLowerCase();if(bv==="input"){az(e)}else{if(bv!=="script"&&typeof e.getElementsByTagName!=="undefined"){b.grep(e.getElementsByTagName("input"),az)}}}function al(e){var bv=av.createElement("div");ac.appendChild(bv);bv.innerHTML=e.outerHTML;return bv.firstChild}b.extend({clone:function(by,bA,bw){var e,bv,bx,bz=b.support.html5Clone||!ah.test("<"+by.nodeName)?by.cloneNode(true):al(by);if((!b.support.noCloneEvent||!b.support.noCloneChecked)&&(by.nodeType===1||by.nodeType===11)&&!b.isXMLDoc(by)){ai(by,bz);e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){if(bv[bx]){ai(e[bx],bv[bx])}}}if(bA){t(by,bz);if(bw){e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){t(e[bx],bv[bx])}}}e=bv=null;return bz},clean:function(bw,by,bH,bA){var bF;by=by||av;if(typeof by.createElement==="undefined"){by=by.ownerDocument||by[0]&&by[0].ownerDocument||av}var bI=[],bB;for(var bE=0,bz;(bz=bw[bE])!=null;bE++){if(typeof bz==="number"){bz+=""}if(!bz){continue}if(typeof bz==="string"){if(!W.test(bz)){bz=by.createTextNode(bz)}else{bz=bz.replace(R,"<$1>");var bK=(d.exec(bz)||["",""])[1].toLowerCase(),bx=ax[bK]||ax._default,bD=bx[0],bv=by.createElement("div");if(by===av){ac.appendChild(bv)}else{a(by).appendChild(bv)}bv.innerHTML=bx[1]+bz+bx[2];while(bD--){bv=bv.lastChild}if(!b.support.tbody){var e=w.test(bz),bC=bK==="table"&&!e?bv.firstChild&&bv.firstChild.childNodes:bx[1]===""&&!e?bv.childNodes:[];for(bB=bC.length-1;bB>=0;--bB){if(b.nodeName(bC[bB],"tbody")&&!bC[bB].childNodes.length){bC[bB].parentNode.removeChild(bC[bB])}}}if(!b.support.leadingWhitespace&&ar.test(bz)){bv.insertBefore(by.createTextNode(ar.exec(bz)[0]),bv.firstChild)}bz=bv.childNodes}}var bG;if(!b.support.appendChecked){if(bz[0]&&typeof(bG=bz.length)==="number"){for(bB=0;bB=0){return bx+"px"}}else{return bx}}}});if(!b.support.opacity){b.cssHooks.opacity={get:function(bv,e){return au.test((e&&bv.currentStyle?bv.currentStyle.filter:bv.style.filter)||"")?(parseFloat(RegExp.$1)/100)+"":e?"1":""},set:function(by,bz){var bx=by.style,bv=by.currentStyle,e=b.isNumeric(bz)?"alpha(opacity="+bz*100+")":"",bw=bv&&bv.filter||bx.filter||"";bx.zoom=1;if(bz>=1&&b.trim(bw.replace(ak,""))===""){bx.removeAttribute("filter");if(bv&&!bv.filter){return}}bx.filter=ak.test(bw)?bw.replace(ak,e):bw+" "+e}}}b(function(){if(!b.support.reliableMarginRight){b.cssHooks.marginRight={get:function(bw,bv){var e;b.swap(bw,{display:"inline-block"},function(){if(bv){e=Z(bw,"margin-right","marginRight")}else{e=bw.style.marginRight}});return e}}}});if(av.defaultView&&av.defaultView.getComputedStyle){aI=function(by,bw){var bv,bx,e;bw=bw.replace(z,"-$1").toLowerCase();if((bx=by.ownerDocument.defaultView)&&(e=bx.getComputedStyle(by,null))){bv=e.getPropertyValue(bw);if(bv===""&&!b.contains(by.ownerDocument.documentElement,by)){bv=b.style(by,bw)}}return bv}}if(av.documentElement.currentStyle){aX=function(bz,bw){var bA,e,by,bv=bz.currentStyle&&bz.currentStyle[bw],bx=bz.style;if(bv===null&&bx&&(by=bx[bw])){bv=by}if(!bc.test(bv)&&bn.test(bv)){bA=bx.left;e=bz.runtimeStyle&&bz.runtimeStyle.left;if(e){bz.runtimeStyle.left=bz.currentStyle.left}bx.left=bw==="fontSize"?"1em":(bv||0);bv=bx.pixelLeft+"px";bx.left=bA;if(e){bz.runtimeStyle.left=e}}return bv===""?"auto":bv}}Z=aI||aX;function p(by,bw,bv){var bA=bw==="width"?by.offsetWidth:by.offsetHeight,bz=bw==="width"?an:a1,bx=0,e=bz.length;if(bA>0){if(bv!=="border"){for(;bx)<[^<]*)*<\/script>/gi,q=/^(?:select|textarea)/i,h=/\s+/,br=/([?&])_=[^&]*/,K=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,A=b.fn.load,aa={},r={},aE,s,aV=["*/"]+["*"];try{aE=bl.href}catch(aw){aE=av.createElement("a");aE.href="";aE=aE.href}s=K.exec(aE.toLowerCase())||[];function f(e){return function(by,bA){if(typeof by!=="string"){bA=by;by="*"}if(b.isFunction(bA)){var bx=by.toLowerCase().split(h),bw=0,bz=bx.length,bv,bB,bC;for(;bw=0){var e=bw.slice(by,bw.length);bw=bw.slice(0,by)}var bx="GET";if(bz){if(b.isFunction(bz)){bA=bz;bz=L}else{if(typeof bz==="object"){bz=b.param(bz,b.ajaxSettings.traditional);bx="POST"}}}var bv=this;b.ajax({url:bw,type:bx,dataType:"html",data:bz,complete:function(bC,bB,bD){bD=bC.responseText;if(bC.isResolved()){bC.done(function(bE){bD=bE});bv.html(e?b("
    ").append(bD.replace(a6,"")).find(e):bD)}if(bA){bv.each(bA,[bD,bB,bC])}}});return this},serialize:function(){return b.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?b.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||q.test(this.nodeName)||aZ.test(this.type))}).map(function(e,bv){var bw=b(this).val();return bw==null?null:b.isArray(bw)?b.map(bw,function(by,bx){return{name:bv.name,value:by.replace(bs,"\r\n")}}):{name:bv.name,value:bw.replace(bs,"\r\n")}}).get()}});b.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(e,bv){b.fn[bv]=function(bw){return this.on(bv,bw)}});b.each(["get","post"],function(e,bv){b[bv]=function(bw,by,bz,bx){if(b.isFunction(by)){bx=bx||bz;bz=by;by=L}return b.ajax({type:bv,url:bw,data:by,success:bz,dataType:bx})}});b.extend({getScript:function(e,bv){return b.get(e,L,bv,"script")},getJSON:function(e,bv,bw){return b.get(e,bv,bw,"json")},ajaxSetup:function(bv,e){if(e){am(bv,b.ajaxSettings)}else{e=bv;bv=b.ajaxSettings}am(bv,e);return bv},ajaxSettings:{url:aE,isLocal:aM.test(s[1]),global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":aV},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":bb.String,"text html":true,"text json":b.parseJSON,"text xml":b.parseXML},flatOptions:{context:true,url:true}},ajaxPrefilter:f(aa),ajaxTransport:f(r),ajax:function(bz,bx){if(typeof bz==="object"){bx=bz;bz=L}bx=bx||{};var bD=b.ajaxSetup({},bx),bS=bD.context||bD,bG=bS!==bD&&(bS.nodeType||bS instanceof b)?b(bS):b.event,bR=b.Deferred(),bN=b.Callbacks("once memory"),bB=bD.statusCode||{},bC,bH={},bO={},bQ,by,bL,bE,bI,bA=0,bw,bK,bJ={readyState:0,setRequestHeader:function(bT,bU){if(!bA){var e=bT.toLowerCase();bT=bO[e]=bO[e]||bT;bH[bT]=bU}return this},getAllResponseHeaders:function(){return bA===2?bQ:null},getResponseHeader:function(bT){var e;if(bA===2){if(!by){by={};while((e=aD.exec(bQ))){by[e[1].toLowerCase()]=e[2]}}e=by[bT.toLowerCase()]}return e===L?null:e},overrideMimeType:function(e){if(!bA){bD.mimeType=e}return this},abort:function(e){e=e||"abort";if(bL){bL.abort(e)}bF(0,e);return this}};function bF(bZ,bU,b0,bW){if(bA===2){return}bA=2;if(bE){clearTimeout(bE)}bL=L;bQ=bW||"";bJ.readyState=bZ>0?4:0;var bT,b4,b3,bX=bU,bY=b0?bj(bD,bJ,b0):L,bV,b2;if(bZ>=200&&bZ<300||bZ===304){if(bD.ifModified){if((bV=bJ.getResponseHeader("Last-Modified"))){b.lastModified[bC]=bV}if((b2=bJ.getResponseHeader("Etag"))){b.etag[bC]=b2}}if(bZ===304){bX="notmodified";bT=true}else{try{b4=G(bD,bY);bX="success";bT=true}catch(b1){bX="parsererror";b3=b1}}}else{b3=bX;if(!bX||bZ){bX="error";if(bZ<0){bZ=0}}}bJ.status=bZ;bJ.statusText=""+(bU||bX);if(bT){bR.resolveWith(bS,[b4,bX,bJ])}else{bR.rejectWith(bS,[bJ,bX,b3])}bJ.statusCode(bB);bB=L;if(bw){bG.trigger("ajax"+(bT?"Success":"Error"),[bJ,bD,bT?b4:b3])}bN.fireWith(bS,[bJ,bX]);if(bw){bG.trigger("ajaxComplete",[bJ,bD]);if(!(--b.active)){b.event.trigger("ajaxStop")}}}bR.promise(bJ);bJ.success=bJ.done;bJ.error=bJ.fail;bJ.complete=bN.add;bJ.statusCode=function(bT){if(bT){var e;if(bA<2){for(e in bT){bB[e]=[bB[e],bT[e]]}}else{e=bT[bJ.status];bJ.then(e,e)}}return this};bD.url=((bz||bD.url)+"").replace(bq,"").replace(c,s[1]+"//");bD.dataTypes=b.trim(bD.dataType||"*").toLowerCase().split(h);if(bD.crossDomain==null){bI=K.exec(bD.url.toLowerCase());bD.crossDomain=!!(bI&&(bI[1]!=s[1]||bI[2]!=s[2]||(bI[3]||(bI[1]==="http:"?80:443))!=(s[3]||(s[1]==="http:"?80:443))))}if(bD.data&&bD.processData&&typeof bD.data!=="string"){bD.data=b.param(bD.data,bD.traditional)}aW(aa,bD,bx,bJ);if(bA===2){return false}bw=bD.global;bD.type=bD.type.toUpperCase();bD.hasContent=!aQ.test(bD.type);if(bw&&b.active++===0){b.event.trigger("ajaxStart")}if(!bD.hasContent){if(bD.data){bD.url+=(M.test(bD.url)?"&":"?")+bD.data;delete bD.data}bC=bD.url;if(bD.cache===false){var bv=b.now(),bP=bD.url.replace(br,"$1_="+bv);bD.url=bP+((bP===bD.url)?(M.test(bD.url)?"&":"?")+"_="+bv:"")}}if(bD.data&&bD.hasContent&&bD.contentType!==false||bx.contentType){bJ.setRequestHeader("Content-Type",bD.contentType)}if(bD.ifModified){bC=bC||bD.url;if(b.lastModified[bC]){bJ.setRequestHeader("If-Modified-Since",b.lastModified[bC])}if(b.etag[bC]){bJ.setRequestHeader("If-None-Match",b.etag[bC])}}bJ.setRequestHeader("Accept",bD.dataTypes[0]&&bD.accepts[bD.dataTypes[0]]?bD.accepts[bD.dataTypes[0]]+(bD.dataTypes[0]!=="*"?", "+aV+"; q=0.01":""):bD.accepts["*"]);for(bK in bD.headers){bJ.setRequestHeader(bK,bD.headers[bK])}if(bD.beforeSend&&(bD.beforeSend.call(bS,bJ,bD)===false||bA===2)){bJ.abort();return false}for(bK in {success:1,error:1,complete:1}){bJ[bK](bD[bK])}bL=aW(r,bD,bx,bJ);if(!bL){bF(-1,"No Transport")}else{bJ.readyState=1;if(bw){bG.trigger("ajaxSend",[bJ,bD])}if(bD.async&&bD.timeout>0){bE=setTimeout(function(){bJ.abort("timeout")},bD.timeout)}try{bA=1;bL.send(bH,bF)}catch(bM){if(bA<2){bF(-1,bM)}else{throw bM}}}return bJ},param:function(e,bw){var bv=[],by=function(bz,bA){bA=b.isFunction(bA)?bA():bA;bv[bv.length]=encodeURIComponent(bz)+"="+encodeURIComponent(bA)};if(bw===L){bw=b.ajaxSettings.traditional}if(b.isArray(e)||(e.jquery&&!b.isPlainObject(e))){b.each(e,function(){by(this.name,this.value)})}else{for(var bx in e){v(bx,e[bx],bw,by)}}return bv.join("&").replace(k,"+")}});function v(bw,by,bv,bx){if(b.isArray(by)){b.each(by,function(bA,bz){if(bv||ap.test(bw)){bx(bw,bz)}else{v(bw+"["+(typeof bz==="object"||b.isArray(bz)?bA:"")+"]",bz,bv,bx)}})}else{if(!bv&&by!=null&&typeof by==="object"){for(var e in by){v(bw+"["+e+"]",by[e],bv,bx)}}else{bx(bw,by)}}}b.extend({active:0,lastModified:{},etag:{}});function bj(bD,bC,bz){var bv=bD.contents,bB=bD.dataTypes,bw=bD.responseFields,by,bA,bx,e;for(bA in bw){if(bA in bz){bC[bw[bA]]=bz[bA]}}while(bB[0]==="*"){bB.shift();if(by===L){by=bD.mimeType||bC.getResponseHeader("content-type")}}if(by){for(bA in bv){if(bv[bA]&&bv[bA].test(by)){bB.unshift(bA);break}}}if(bB[0] in bz){bx=bB[0]}else{for(bA in bz){if(!bB[0]||bD.converters[bA+" "+bB[0]]){bx=bA;break}if(!e){e=bA}}bx=bx||e}if(bx){if(bx!==bB[0]){bB.unshift(bx)}return bz[bx]}}function G(bH,bz){if(bH.dataFilter){bz=bH.dataFilter(bz,bH.dataType)}var bD=bH.dataTypes,bG={},bA,bE,bw=bD.length,bB,bC=bD[0],bx,by,bF,bv,e;for(bA=1;bA=bw.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();bw.animatedProperties[this.prop]=true;for(bA in bw.animatedProperties){if(bw.animatedProperties[bA]!==true){e=false}}if(e){if(bw.overflow!=null&&!b.support.shrinkWrapBlocks){b.each(["","X","Y"],function(bC,bD){bz.style["overflow"+bD]=bw.overflow[bC]})}if(bw.hide){b(bz).hide()}if(bw.hide||bw.show){for(bA in bw.animatedProperties){b.style(bz,bA,bw.orig[bA]);b.removeData(bz,"fxshow"+bA,true);b.removeData(bz,"toggle"+bA,true)}}bv=bw.complete;if(bv){bw.complete=false;bv.call(bz)}}return false}else{if(bw.duration==Infinity){this.now=bx}else{bB=bx-this.startTime;this.state=bB/bw.duration;this.pos=b.easing[bw.animatedProperties[this.prop]](this.state,bB,0,1,bw.duration);this.now=this.start+((this.end-this.start)*this.pos)}this.update()}return true}};b.extend(b.fx,{tick:function(){var bw,bv=b.timers,e=0;for(;e").appendTo(e),bw=bv.css("display");bv.remove();if(bw==="none"||bw===""){if(!a8){a8=av.createElement("iframe");a8.frameBorder=a8.width=a8.height=0}e.appendChild(a8);if(!m||!a8.createElement){m=(a8.contentWindow||a8.contentDocument).document;m.write((av.compatMode==="CSS1Compat"?"":"")+"");m.close()}bv=m.createElement(bx);m.body.appendChild(bv);bw=b.css(bv,"display");e.removeChild(a8)}Q[bx]=bw}return Q[bx]}var V=/^t(?:able|d|h)$/i,ad=/^(?:body|html)$/i;if("getBoundingClientRect" in av.documentElement){b.fn.offset=function(bI){var by=this[0],bB;if(bI){return this.each(function(e){b.offset.setOffset(this,bI,e)})}if(!by||!by.ownerDocument){return null}if(by===by.ownerDocument.body){return b.offset.bodyOffset(by)}try{bB=by.getBoundingClientRect()}catch(bF){}var bH=by.ownerDocument,bw=bH.documentElement;if(!bB||!b.contains(bw,by)){return bB?{top:bB.top,left:bB.left}:{top:0,left:0}}var bC=bH.body,bD=aK(bH),bA=bw.clientTop||bC.clientTop||0,bE=bw.clientLeft||bC.clientLeft||0,bv=bD.pageYOffset||b.support.boxModel&&bw.scrollTop||bC.scrollTop,bz=bD.pageXOffset||b.support.boxModel&&bw.scrollLeft||bC.scrollLeft,bG=bB.top+bv-bA,bx=bB.left+bz-bE;return{top:bG,left:bx}}}else{b.fn.offset=function(bF){var bz=this[0];if(bF){return this.each(function(bG){b.offset.setOffset(this,bF,bG)})}if(!bz||!bz.ownerDocument){return null}if(bz===bz.ownerDocument.body){return b.offset.bodyOffset(bz)}var bC,bw=bz.offsetParent,bv=bz,bE=bz.ownerDocument,bx=bE.documentElement,bA=bE.body,bB=bE.defaultView,e=bB?bB.getComputedStyle(bz,null):bz.currentStyle,bD=bz.offsetTop,by=bz.offsetLeft;while((bz=bz.parentNode)&&bz!==bA&&bz!==bx){if(b.support.fixedPosition&&e.position==="fixed"){break}bC=bB?bB.getComputedStyle(bz,null):bz.currentStyle;bD-=bz.scrollTop;by-=bz.scrollLeft;if(bz===bw){bD+=bz.offsetTop;by+=bz.offsetLeft;if(b.support.doesNotAddBorder&&!(b.support.doesAddBorderForTableAndCells&&V.test(bz.nodeName))){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}bv=bw;bw=bz.offsetParent}if(b.support.subtractsBorderForOverflowNotVisible&&bC.overflow!=="visible"){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}e=bC}if(e.position==="relative"||e.position==="static"){bD+=bA.offsetTop;by+=bA.offsetLeft}if(b.support.fixedPosition&&e.position==="fixed"){bD+=Math.max(bx.scrollTop,bA.scrollTop);by+=Math.max(bx.scrollLeft,bA.scrollLeft)}return{top:bD,left:by}}}b.offset={bodyOffset:function(e){var bw=e.offsetTop,bv=e.offsetLeft;if(b.support.doesNotIncludeMarginInBodyOffset){bw+=parseFloat(b.css(e,"marginTop"))||0;bv+=parseFloat(b.css(e,"marginLeft"))||0}return{top:bw,left:bv}},setOffset:function(bx,bG,bA){var bB=b.css(bx,"position");if(bB==="static"){bx.style.position="relative"}var bz=b(bx),bv=bz.offset(),e=b.css(bx,"top"),bE=b.css(bx,"left"),bF=(bB==="absolute"||bB==="fixed")&&b.inArray("auto",[e,bE])>-1,bD={},bC={},bw,by;if(bF){bC=bz.position();bw=bC.top;by=bC.left}else{bw=parseFloat(e)||0;by=parseFloat(bE)||0}if(b.isFunction(bG)){bG=bG.call(bx,bA,bv)}if(bG.top!=null){bD.top=(bG.top-bv.top)+bw}if(bG.left!=null){bD.left=(bG.left-bv.left)+by}if("using" in bG){bG.using.call(bx,bD)}else{bz.css(bD)}}};b.fn.extend({position:function(){if(!this[0]){return null}var bw=this[0],bv=this.offsetParent(),bx=this.offset(),e=ad.test(bv[0].nodeName)?{top:0,left:0}:bv.offset();bx.top-=parseFloat(b.css(bw,"marginTop"))||0;bx.left-=parseFloat(b.css(bw,"marginLeft"))||0;e.top+=parseFloat(b.css(bv[0],"borderTopWidth"))||0;e.left+=parseFloat(b.css(bv[0],"borderLeftWidth"))||0;return{top:bx.top-e.top,left:bx.left-e.left}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||av.body;while(e&&(!ad.test(e.nodeName)&&b.css(e,"position")==="static")){e=e.offsetParent}return e})}});b.each(["Left","Top"],function(bv,e){var bw="scroll"+e;b.fn[bw]=function(bz){var bx,by;if(bz===L){bx=this[0];if(!bx){return null}by=aK(bx);return by?("pageXOffset" in by)?by[bv?"pageYOffset":"pageXOffset"]:b.support.boxModel&&by.document.documentElement[bw]||by.document.body[bw]:bx[bw]}return this.each(function(){by=aK(this);if(by){by.scrollTo(!bv?bz:b(by).scrollLeft(),bv?bz:b(by).scrollTop())}else{this[bw]=bz}})}});function aK(e){return b.isWindow(e)?e:e.nodeType===9?e.defaultView||e.parentWindow:false}b.each(["Height","Width"],function(bv,e){var bw=e.toLowerCase();b.fn["inner"+e]=function(){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,"padding")):this[bw]():null};b.fn["outer"+e]=function(by){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,by?"margin":"border")):this[bw]():null};b.fn[bw]=function(bz){var bA=this[0];if(!bA){return bz==null?null:this}if(b.isFunction(bz)){return this.each(function(bE){var bD=b(this);bD[bw](bz.call(this,bE,bD[bw]()))})}if(b.isWindow(bA)){var bB=bA.document.documentElement["client"+e],bx=bA.document.body;return bA.document.compatMode==="CSS1Compat"&&bB||bx&&bx["client"+e]||bB}else{if(bA.nodeType===9){return Math.max(bA.documentElement["client"+e],bA.body["scroll"+e],bA.documentElement["scroll"+e],bA.body["offset"+e],bA.documentElement["offset"+e])}else{if(bz===L){var bC=b.css(bA,bw),by=parseFloat(bC);return b.isNumeric(by)?by:bC}else{return this.css(bw,typeof bz==="string"?bz:bz+"px")}}}}});bb.jQuery=bb.$=b;if(typeof define==="function"&&define.amd&&define.amd.jQuery){define("jquery",[],function(){return b})}})(window);/*! - * jQuery UI 1.8.18 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI - */ -(function(a,d){a.ui=a.ui||{};if(a.ui.version){return}a.extend(a.ui,{version:"1.8.18",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});a.fn.extend({propAttr:a.fn.prop||a.fn.attr,_focus:a.fn.focus,focus:function(e,f){return typeof e==="number"?this.each(function(){var g=this;setTimeout(function(){a(g).focus();if(f){f.call(g)}},e)}):this._focus.apply(this,arguments)},scrollParent:function(){var e;if((a.browser.msie&&(/(static|relative)/).test(this.css("position")))||(/absolute/).test(this.css("position"))){e=this.parents().filter(function(){return(/(relative|absolute|fixed)/).test(a.curCSS(this,"position",1))&&(/(auto|scroll)/).test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0)}else{e=this.parents().filter(function(){return(/(auto|scroll)/).test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0)}return(/fixed/).test(this.css("position"))||!e.length?a(document):e},zIndex:function(h){if(h!==d){return this.css("zIndex",h)}if(this.length){var f=a(this[0]),e,g;while(f.length&&f[0]!==document){e=f.css("position");if(e==="absolute"||e==="relative"||e==="fixed"){g=parseInt(f.css("zIndex"),10);if(!isNaN(g)&&g!==0){return g}}f=f.parent()}}return 0},disableSelection:function(){return this.bind((a.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(e){e.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});a.each(["Width","Height"],function(g,e){var f=e==="Width"?["Left","Right"]:["Top","Bottom"],h=e.toLowerCase(),k={innerWidth:a.fn.innerWidth,innerHeight:a.fn.innerHeight,outerWidth:a.fn.outerWidth,outerHeight:a.fn.outerHeight};function j(m,l,i,n){a.each(f,function(){l-=parseFloat(a.curCSS(m,"padding"+this,true))||0;if(i){l-=parseFloat(a.curCSS(m,"border"+this+"Width",true))||0}if(n){l-=parseFloat(a.curCSS(m,"margin"+this,true))||0}});return l}a.fn["inner"+e]=function(i){if(i===d){return k["inner"+e].call(this)}return this.each(function(){a(this).css(h,j(this,i)+"px")})};a.fn["outer"+e]=function(i,l){if(typeof i!=="number"){return k["outer"+e].call(this,i)}return this.each(function(){a(this).css(h,j(this,i,true,l)+"px")})}});function c(g,e){var j=g.nodeName.toLowerCase();if("area"===j){var i=g.parentNode,h=i.name,f;if(!g.href||!h||i.nodeName.toLowerCase()!=="map"){return false}f=a("img[usemap=#"+h+"]")[0];return !!f&&b(f)}return(/input|select|textarea|button|object/.test(j)?!g.disabled:"a"==j?g.href||e:e)&&b(g)}function b(e){return !a(e).parents().andSelf().filter(function(){return a.curCSS(this,"visibility")==="hidden"||a.expr.filters.hidden(this)}).length}a.extend(a.expr[":"],{data:function(g,f,e){return !!a.data(g,e[3])},focusable:function(e){return c(e,!isNaN(a.attr(e,"tabindex")))},tabbable:function(g){var e=a.attr(g,"tabindex"),f=isNaN(e);return(f||e>=0)&&c(g,!f)}});a(function(){var e=document.body,f=e.appendChild(f=document.createElement("div"));f.offsetHeight;a.extend(f.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});a.support.minHeight=f.offsetHeight===100;a.support.selectstart="onselectstart" in f;e.removeChild(f).style.display="none"});a.extend(a.ui,{plugin:{add:function(f,g,j){var h=a.ui[f].prototype;for(var e in j){h.plugins[e]=h.plugins[e]||[];h.plugins[e].push([g,j[e]])}},call:function(e,g,f){var j=e.plugins[g];if(!j||!e.element[0].parentNode){return}for(var h=0;h0){return true}h[e]=1;g=(h[e]>0);h[e]=0;return g},isOverAxis:function(f,e,g){return(f>e)&&(f<(e+g))},isOver:function(j,f,i,h,e,g){return a.ui.isOverAxis(j,i,e)&&a.ui.isOverAxis(f,h,g)}})})(jQuery);/*! - * jQuery UI Widget 1.8.18 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Widget - */ -(function(b,d){if(b.cleanData){var c=b.cleanData;b.cleanData=function(f){for(var g=0,h;(h=f[g])!=null;g++){try{b(h).triggerHandler("remove")}catch(j){}}c(f)}}else{var a=b.fn.remove;b.fn.remove=function(e,f){return this.each(function(){if(!f){if(!e||b.filter(e,[this]).length){b("*",this).add([this]).each(function(){try{b(this).triggerHandler("remove")}catch(g){}})}}return a.call(b(this),e,f)})}}b.widget=function(f,h,e){var g=f.split(".")[0],j;f=f.split(".")[1];j=g+"-"+f;if(!e){e=h;h=b.Widget}b.expr[":"][j]=function(k){return !!b.data(k,f)};b[g]=b[g]||{};b[g][f]=function(k,l){if(arguments.length){this._createWidget(k,l)}};var i=new h();i.options=b.extend(true,{},i.options);b[g][f].prototype=b.extend(true,i,{namespace:g,widgetName:f,widgetEventPrefix:b[g][f].prototype.widgetEventPrefix||f,widgetBaseClass:j},e);b.widget.bridge(f,b[g][f])};b.widget.bridge=function(f,e){b.fn[f]=function(i){var g=typeof i==="string",h=Array.prototype.slice.call(arguments,1),j=this;i=!g&&h.length?b.extend.apply(null,[true,i].concat(h)):i;if(g&&i.charAt(0)==="_"){return j}if(g){this.each(function(){var k=b.data(this,f),l=k&&b.isFunction(k[i])?k[i].apply(k,h):k;if(l!==k&&l!==d){j=l;return false}})}else{this.each(function(){var k=b.data(this,f);if(k){k.option(i||{})._init()}else{b.data(this,f,new e(i,this))}})}return j}};b.Widget=function(e,f){if(arguments.length){this._createWidget(e,f)}};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(f,g){b.data(g,this.widgetName,this);this.element=b(g);this.options=b.extend(true,{},this.options,this._getCreateOptions(),f);var e=this;this.element.bind("remove."+this.widgetName,function(){e.destroy()});this._create();this._trigger("create");this._init()},_getCreateOptions:function(){return b.metadata&&b.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled ui-state-disabled")},widget:function(){return this.element},option:function(f,g){var e=f;if(arguments.length===0){return b.extend({},this.options)}if(typeof f==="string"){if(g===d){return this.options[f]}e={};e[f]=g}this._setOptions(e);return this},_setOptions:function(f){var e=this;b.each(f,function(g,h){e._setOption(g,h)});return this},_setOption:function(e,f){this.options[e]=f;if(e==="disabled"){this.widget()[f?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",f)}return this},enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(e,f,g){var j,i,h=this.options[e];g=g||{};f=b.Event(f);f.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase();f.target=this.element[0];i=f.originalEvent;if(i){for(j in i){if(!(j in f)){f[j]=i[j]}}}this.element.trigger(f,g);return !(b.isFunction(h)&&h.call(this.element[0],f,g)===false||f.isDefaultPrevented())}}})(jQuery);/*! - * jQuery UI Mouse 1.8.18 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Mouse - * - * Depends: - * jquery.ui.widget.js - */ -(function(b,c){var a=false;b(document).mouseup(function(d){a=false});b.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var d=this;this.element.bind("mousedown."+this.widgetName,function(e){return d._mouseDown(e)}).bind("click."+this.widgetName,function(e){if(true===b.data(e.target,d.widgetName+".preventClickEvent")){b.removeData(e.target,d.widgetName+".preventClickEvent");e.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName)},_mouseDown:function(f){if(a){return}(this._mouseStarted&&this._mouseUp(f));this._mouseDownEvent=f;var e=this,g=(f.which==1),d=(typeof this.options.cancel=="string"&&f.target.nodeName?b(f.target).closest(this.options.cancel).length:false);if(!g||d||!this._mouseCapture(f)){return true}this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){e.mouseDelayMet=true},this.options.delay)}if(this._mouseDistanceMet(f)&&this._mouseDelayMet(f)){this._mouseStarted=(this._mouseStart(f)!==false);if(!this._mouseStarted){f.preventDefault();return true}}if(true===b.data(f.target,this.widgetName+".preventClickEvent")){b.removeData(f.target,this.widgetName+".preventClickEvent")}this._mouseMoveDelegate=function(h){return e._mouseMove(h)};this._mouseUpDelegate=function(h){return e._mouseUp(h)};b(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);f.preventDefault();a=true;return true},_mouseMove:function(d){if(b.browser.msie&&!(document.documentMode>=9)&&!d.button){return this._mouseUp(d)}if(this._mouseStarted){this._mouseDrag(d);return d.preventDefault()}if(this._mouseDistanceMet(d)&&this._mouseDelayMet(d)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,d)!==false);(this._mouseStarted?this._mouseDrag(d):this._mouseUp(d))}return !this._mouseStarted},_mouseUp:function(d){b(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;if(d.target==this._mouseDownEvent.target){b.data(d.target,this.widgetName+".preventClickEvent",true)}this._mouseStop(d)}return false},_mouseDistanceMet:function(d){return(Math.max(Math.abs(this._mouseDownEvent.pageX-d.pageX),Math.abs(this._mouseDownEvent.pageY-d.pageY))>=this.options.distance)},_mouseDelayMet:function(d){return this.mouseDelayMet},_mouseStart:function(d){},_mouseDrag:function(d){},_mouseStop:function(d){},_mouseCapture:function(d){return true}})})(jQuery);(function(c,d){c.widget("ui.resizable",c.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,containment:false,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1000},_create:function(){var f=this,k=this.options;this.element.addClass("ui-resizable");c.extend(this,{_aspectRatio:!!(k.aspectRatio),aspectRatio:k.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:k.helper||k.ghost||k.animate?k.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){this.element.wrap(c('
    ').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=k.handles||(!c(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all"){this.handles="n,e,s,w,se,sw,ne,nw"}var l=this.handles.split(",");this.handles={};for(var g=0;g
    ');if(/sw|se|ne|nw/.test(j)){h.css({zIndex:++k.zIndex})}if("se"==j){h.addClass("ui-icon ui-icon-gripsmall-diagonal-se")}this.handles[j]=".ui-resizable-"+j;this.element.append(h)}}this._renderAxis=function(q){q=q||this.element;for(var n in this.handles){if(this.handles[n].constructor==String){this.handles[n]=c(this.handles[n],this.element).show()}if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var o=c(this.handles[n],this.element),p=0;p=/sw|ne|nw|se|n|s/.test(n)?o.outerHeight():o.outerWidth();var m=["padding",/ne|nw|n/.test(n)?"Top":/se|sw|s/.test(n)?"Bottom":/^e$/.test(n)?"Right":"Left"].join("");q.css(m,p);this._proportionallyResize()}if(!c(this.handles[n]).length){continue}}};this._renderAxis(this.element);this._handles=c(".ui-resizable-handle",this.element).disableSelection();this._handles.mouseover(function(){if(!f.resizing){if(this.className){var i=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)}f.axis=i&&i[1]?i[1]:"se"}});if(k.autoHide){this._handles.hide();c(this.element).addClass("ui-resizable-autohide").hover(function(){if(k.disabled){return}c(this).removeClass("ui-resizable-autohide");f._handles.show()},function(){if(k.disabled){return}if(!f.resizing){c(this).addClass("ui-resizable-autohide");f._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var e=function(g){c(g).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){e(this.element);var f=this.element;f.after(this.originalElement.css({position:f.css("position"),width:f.outerWidth(),height:f.outerHeight(),top:f.css("top"),left:f.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);e(this.originalElement);return this},_mouseCapture:function(f){var g=false;for(var e in this.handles){if(c(this.handles[e])[0]==f.target){g=true}}return !this.options.disabled&&g},_mouseStart:function(g){var j=this.options,f=this.element.position(),e=this.element;this.resizing=true;this.documentScroll={top:c(document).scrollTop(),left:c(document).scrollLeft()};if(e.is(".ui-draggable")||(/absolute/).test(e.css("position"))){e.css({position:"absolute",top:f.top,left:f.left})}this._renderProxy();var k=b(this.helper.css("left")),h=b(this.helper.css("top"));if(j.containment){k+=c(j.containment).scrollLeft()||0;h+=c(j.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:k,top:h};this.size=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalSize=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalPosition={left:k,top:h};this.sizeDiff={width:e.outerWidth()-e.width(),height:e.outerHeight()-e.height()};this.originalMousePosition={left:g.pageX,top:g.pageY};this.aspectRatio=(typeof j.aspectRatio=="number")?j.aspectRatio:((this.originalSize.width/this.originalSize.height)||1);var i=c(".ui-resizable-"+this.axis).css("cursor");c("body").css("cursor",i=="auto"?this.axis+"-resize":i);e.addClass("ui-resizable-resizing");this._propagate("start",g);return true},_mouseDrag:function(e){var h=this.helper,g=this.options,m={},q=this,j=this.originalMousePosition,n=this.axis;var r=(e.pageX-j.left)||0,p=(e.pageY-j.top)||0;var i=this._change[n];if(!i){return false}var l=i.apply(this,[e,r,p]),k=c.browser.msie&&c.browser.version<7,f=this.sizeDiff;this._updateVirtualBoundaries(e.shiftKey);if(this._aspectRatio||e.shiftKey){l=this._updateRatio(l,e)}l=this._respectSize(l,e);this._propagate("resize",e);h.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});if(!this._helper&&this._proportionallyResizeElements.length){this._proportionallyResize()}this._updateCache(l);this._trigger("resize",e,this.ui());return false},_mouseStop:function(h){this.resizing=false;var i=this.options,m=this;if(this._helper){var g=this._proportionallyResizeElements,e=g.length&&(/textarea/i).test(g[0].nodeName),f=e&&c.ui.hasScroll(g[0],"left")?0:m.sizeDiff.height,k=e?0:m.sizeDiff.width;var n={width:(m.helper.width()-k),height:(m.helper.height()-f)},j=(parseInt(m.element.css("left"),10)+(m.position.left-m.originalPosition.left))||null,l=(parseInt(m.element.css("top"),10)+(m.position.top-m.originalPosition.top))||null;if(!i.animate){this.element.css(c.extend(n,{top:l,left:j}))}m.helper.height(m.size.height);m.helper.width(m.size.width);if(this._helper&&!i.animate){this._proportionallyResize()}}c("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",h);if(this._helper){this.helper.remove()}return false},_updateVirtualBoundaries:function(g){var j=this.options,i,h,f,k,e;e={minWidth:a(j.minWidth)?j.minWidth:0,maxWidth:a(j.maxWidth)?j.maxWidth:Infinity,minHeight:a(j.minHeight)?j.minHeight:0,maxHeight:a(j.maxHeight)?j.maxHeight:Infinity};if(this._aspectRatio||g){i=e.minHeight*this.aspectRatio;f=e.minWidth/this.aspectRatio;h=e.maxHeight*this.aspectRatio;k=e.maxWidth/this.aspectRatio;if(i>e.minWidth){e.minWidth=i}if(f>e.minHeight){e.minHeight=f}if(hl.width),s=a(l.height)&&i.minHeight&&(i.minHeight>l.height);if(h){l.width=i.minWidth}if(s){l.height=i.minHeight}if(t){l.width=i.maxWidth}if(m){l.height=i.maxHeight}var f=this.originalPosition.left+this.originalSize.width,p=this.position.top+this.size.height;var k=/sw|nw|w/.test(q),e=/nw|ne|n/.test(q);if(h&&k){l.left=f-i.minWidth}if(t&&k){l.left=f-i.maxWidth}if(s&&e){l.top=p-i.minHeight}if(m&&e){l.top=p-i.maxHeight}var n=!l.width&&!l.height;if(n&&!l.left&&l.top){l.top=null}else{if(n&&!l.top&&l.left){l.left=null}}return l},_proportionallyResize:function(){var k=this.options;if(!this._proportionallyResizeElements.length){return}var g=this.helper||this.element;for(var f=0;f');var e=c.browser.msie&&c.browser.version<7,g=(e?1:0),h=(e?2:-1);this.helper.addClass(this._helper).css({width:this.element.outerWidth()+h,height:this.element.outerHeight()+h,position:"absolute",left:this.elementOffset.left-g+"px",top:this.elementOffset.top-g+"px",zIndex:++i.zIndex});this.helper.appendTo("body").disableSelection()}else{this.helper=this.element}},_change:{e:function(g,f,e){return{width:this.originalSize.width+f}},w:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{left:i.left+f,width:g.width-f}},n:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{top:i.top+e,height:g.height-e}},s:function(g,f,e){return{height:this.originalSize.height+e}},se:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},sw:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[g,f,e]))},ne:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},nw:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[g,f,e]))}},_propagate:function(f,e){c.ui.plugin.call(this,f,[e,this.ui()]);(f!="resize"&&this._trigger(f,e,this.ui()))},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}});c.extend(c.ui.resizable,{version:"1.8.18"});c.ui.plugin.add("resizable","alsoResize",{start:function(f,g){var e=c(this).data("resizable"),i=e.options;var h=function(j){c(j).each(function(){var k=c(this);k.data("resizable-alsoresize",{width:parseInt(k.width(),10),height:parseInt(k.height(),10),left:parseInt(k.css("left"),10),top:parseInt(k.css("top"),10)})})};if(typeof(i.alsoResize)=="object"&&!i.alsoResize.parentNode){if(i.alsoResize.length){i.alsoResize=i.alsoResize[0];h(i.alsoResize)}else{c.each(i.alsoResize,function(j){h(j)})}}else{h(i.alsoResize)}},resize:function(g,i){var f=c(this).data("resizable"),j=f.options,h=f.originalSize,l=f.originalPosition;var k={height:(f.size.height-h.height)||0,width:(f.size.width-h.width)||0,top:(f.position.top-l.top)||0,left:(f.position.left-l.left)||0},e=function(m,n){c(m).each(function(){var q=c(this),r=c(this).data("resizable-alsoresize"),p={},o=n&&n.length?n:q.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];c.each(o,function(s,u){var t=(r[u]||0)+(k[u]||0);if(t&&t>=0){p[u]=t||null}});q.css(p)})};if(typeof(j.alsoResize)=="object"&&!j.alsoResize.nodeType){c.each(j.alsoResize,function(m,n){e(m,n)})}else{e(j.alsoResize)}},stop:function(e,f){c(this).removeData("resizable-alsoresize")}});c.ui.plugin.add("resizable","animate",{stop:function(i,n){var p=c(this).data("resizable"),j=p.options;var h=p._proportionallyResizeElements,e=h.length&&(/textarea/i).test(h[0].nodeName),f=e&&c.ui.hasScroll(h[0],"left")?0:p.sizeDiff.height,l=e?0:p.sizeDiff.width;var g={width:(p.size.width-l),height:(p.size.height-f)},k=(parseInt(p.element.css("left"),10)+(p.position.left-p.originalPosition.left))||null,m=(parseInt(p.element.css("top"),10)+(p.position.top-p.originalPosition.top))||null;p.element.animate(c.extend(g,m&&k?{top:m,left:k}:{}),{duration:j.animateDuration,easing:j.animateEasing,step:function(){var o={width:parseInt(p.element.css("width"),10),height:parseInt(p.element.css("height"),10),top:parseInt(p.element.css("top"),10),left:parseInt(p.element.css("left"),10)};if(h&&h.length){c(h[0]).css({width:o.width,height:o.height})}p._updateCache(o);p._propagate("resize",i)}})}});c.ui.plugin.add("resizable","containment",{start:function(f,r){var t=c(this).data("resizable"),j=t.options,l=t.element;var g=j.containment,k=(g instanceof c)?g.get(0):(/parent/.test(g))?l.parent().get(0):g;if(!k){return}t.containerElement=c(k);if(/document/.test(g)||g==document){t.containerOffset={left:0,top:0};t.containerPosition={left:0,top:0};t.parentData={element:c(document),left:0,top:0,width:c(document).width(),height:c(document).height()||document.body.parentNode.scrollHeight}}else{var n=c(k),i=[];c(["Top","Right","Left","Bottom"]).each(function(p,o){i[p]=b(n.css("padding"+o))});t.containerOffset=n.offset();t.containerPosition=n.position();t.containerSize={height:(n.innerHeight()-i[3]),width:(n.innerWidth()-i[1])};var q=t.containerOffset,e=t.containerSize.height,m=t.containerSize.width,h=(c.ui.hasScroll(k,"left")?k.scrollWidth:m),s=(c.ui.hasScroll(k)?k.scrollHeight:e);t.parentData={element:k,left:q.left,top:q.top,width:h,height:s}}},resize:function(g,q){var t=c(this).data("resizable"),i=t.options,f=t.containerSize,p=t.containerOffset,m=t.size,n=t.position,r=t._aspectRatio||g.shiftKey,e={top:0,left:0},h=t.containerElement;if(h[0]!=document&&(/static/).test(h.css("position"))){e=p}if(n.left<(t._helper?p.left:0)){t.size.width=t.size.width+(t._helper?(t.position.left-p.left):(t.position.left-e.left));if(r){t.size.height=t.size.width/i.aspectRatio}t.position.left=i.helper?p.left:0}if(n.top<(t._helper?p.top:0)){t.size.height=t.size.height+(t._helper?(t.position.top-p.top):t.position.top);if(r){t.size.width=t.size.height*i.aspectRatio}t.position.top=t._helper?p.top:0}t.offset.left=t.parentData.left+t.position.left;t.offset.top=t.parentData.top+t.position.top;var l=Math.abs((t._helper?t.offset.left-e.left:(t.offset.left-e.left))+t.sizeDiff.width),s=Math.abs((t._helper?t.offset.top-e.top:(t.offset.top-p.top))+t.sizeDiff.height);var k=t.containerElement.get(0)==t.element.parent().get(0),j=/relative|absolute/.test(t.containerElement.css("position"));if(k&&j){l-=t.parentData.left}if(l+t.size.width>=t.parentData.width){t.size.width=t.parentData.width-l;if(r){t.size.height=t.size.width/t.aspectRatio}}if(s+t.size.height>=t.parentData.height){t.size.height=t.parentData.height-s;if(r){t.size.width=t.size.height*t.aspectRatio}}},stop:function(f,n){var q=c(this).data("resizable"),g=q.options,l=q.position,m=q.containerOffset,e=q.containerPosition,i=q.containerElement;var j=c(q.helper),r=j.offset(),p=j.outerWidth()-q.sizeDiff.width,k=j.outerHeight()-q.sizeDiff.height;if(q._helper&&!g.animate&&(/relative/).test(i.css("position"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}if(q._helper&&!g.animate&&(/static/).test(i.css("position"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}}});c.ui.plugin.add("resizable","ghost",{start:function(g,h){var e=c(this).data("resizable"),i=e.options,f=e.size;e.ghost=e.originalElement.clone();e.ghost.css({opacity:0.25,display:"block",position:"relative",height:f.height,width:f.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof i.ghost=="string"?i.ghost:"");e.ghost.appendTo(e.helper)},resize:function(f,g){var e=c(this).data("resizable"),h=e.options;if(e.ghost){e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})}},stop:function(f,g){var e=c(this).data("resizable"),h=e.options;if(e.ghost&&e.helper){e.helper.get(0).removeChild(e.ghost.get(0))}}});c.ui.plugin.add("resizable","grid",{resize:function(e,m){var p=c(this).data("resizable"),h=p.options,k=p.size,i=p.originalSize,j=p.originalPosition,n=p.axis,l=h._aspectRatio||e.shiftKey;h.grid=typeof h.grid=="number"?[h.grid,h.grid]:h.grid;var g=Math.round((k.width-i.width)/(h.grid[0]||1))*(h.grid[0]||1),f=Math.round((k.height-i.height)/(h.grid[1]||1))*(h.grid[1]||1);if(/^(se|s|e)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f}else{if(/^(ne)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f}else{if(/^(sw)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.left=j.left-g}else{p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f;p.position.left=j.left-g}}}}});var b=function(e){return parseInt(e,10)||0};var a=function(e){return !isNaN(parseInt(e,10))}})(jQuery);/*! - * jQuery hashchange event - v1.3 - 7/21/2010 - * http://benalman.com/projects/jquery-hashchange-plugin/ - * - * Copyright (c) 2010 "Cowboy" Ben Alman - * Dual licensed under the MIT and GPL licenses. - * http://benalman.com/about/license/ - */ -(function($,e,b){var c="hashchange",h=document,f,g=$.event.special,i=h.documentMode,d="on"+c in e&&(i===b||i>7);function a(j){j=j||location.href;return"#"+j.replace(/^[^#]*#?(.*)$/,"$1")}$.fn[c]=function(j){return j?this.bind(c,j):this.trigger(c)};$.fn[c].delay=50;g[c]=$.extend(g[c],{setup:function(){if(d){return false}$(f.start)},teardown:function(){if(d){return false}$(f.stop)}});f=(function(){var j={},p,m=a(),k=function(q){return q},l=k,o=k;j.start=function(){p||n()};j.stop=function(){p&&clearTimeout(p);p=b};function n(){var r=a(),q=o(m);if(r!==m){l(m=r,q);$(e).trigger(c)}else{if(q!==m){location.href=location.href.replace(/#.*/,"")+q}}p=setTimeout(n,$.fn[c].delay)}$.browser.msie&&!d&&(function(){var q,r;j.start=function(){if(!q){r=$.fn[c].src;r=r&&r+a();q=$('