# -*- coding: utf-8 -*-

from helpers import trace


class Rules ( object ):

  ruleSet = [ 'minEnclosure_nImplant_active'
            , 'minEnclosure_pImplant_active'
            , 'minSpacing_nImplant_pImplant'
            , 'minSpacing_cut0'
            , 'minWidth_cut0'
            , 'minWidth_active'
            , 'minEnclosure_active_cut0'
            , 'transistorMinL'
            , 'transistorMinW'
            , 'minGateSpacing_poly'
            , 'minSpacing_poly_active'
            , 'minExtension_active_poly'
            , 'minExtension_poly_active'
            , 'minEnclosure_poly_cut0'
            , 'minSpacing_cut0_poly'
            , 'minWidth_cut0'
            , 'minSpacing_cut0_active'
            , 'minWidth_metal1'
            , 'minSpacing_metal1'
            , 'minEnclosure_metal1_cut0'
            , 'minEnclosure_metal1_cut1'
            , 'minWidth_cut1'
            , 'minSpacing_cut1'
            , 'minWidth_metal2'
            , 'minSpacing_metal2'
            , 'minEnclosure_metal2_cut1'
            , 'minEnclosure_metal2_cut2'
            , 'minWidth_cut2'
            , 'minSpacing_cut2'
            , 'minWidth_cut1'
            , 'minSpacing_cut1'
            , 'minWidth_metal3'
            , 'minSpacing_metal3'
            , 'minEnclosure_metal3_cut2'
            ]

  def __init__ ( self, dtr ):
    trace( 100, '\tRules.__init__()\n' )
    self.dtr   = dtr

    for rule in Rules.ruleSet: self.addAttr(rule)
    return

  def addAttr ( self, attribute ):
    if self.__dict__.has_key(attribute): return

   #print 'Rules.addAttr(): %s' % attribute
    value = None
    words = attribute.split( '_' )
    if len(words) == 1 and words[0].endswith('Cap'): value = self.dtr.getUnitRule( words[0] ).getValue()
    if len(words) < 4:                               value = self.dtr.getPhysicalRule( *tuple(words) ).getValue()
    if not value is None:
      self.__dict__[attribute] = value

    return