/* ************************************************************************** */
/* ************************************************************************** */
/* ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT!               */
/* ************************************************************************** */
/* ************************************************************************** */
/* Copyright 2013, Cadence Design Systems                                     */
/*                                                                            */
/* This  file  is  part  of  the  Cadence  LEF/DEF  Open   Source             */
/* Distribution,  Product Version 5.8.                                        */
/*                                                                            */
/* Licensed under the Apache License, Version 2.0 (the "License");            */
/*    you may not use this file except in compliance with the License.        */
/*    You may obtain a copy of the License at                                 */
/*                                                                            */
/*        http://www.apache.org/licenses/LICENSE-2.0                          */
/*                                                                            */
/*    Unless required by applicable law or agreed to in writing, software     */
/*    distributed under the License is distributed on an "AS IS" BASIS,       */
/*    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or         */
/*    implied. See the License for the specific language governing            */
/*    permissions and limitations under the License.                          */
/*                                                                            */
/* For updates, support, or to become part of the LEF/DEF Community,          */
/* check www.openeda.org for details.                                         */
/*                                                                            */
/*  $Author: dell $                                                                  */
/*  $Revision: #1 $                                                                */
/*  $Date: 2017/06/06 $                                                                    */
/*  $State:  $                                                                */
/* ************************************************************************** */
/* ************************************************************************** */


#ifndef CDEFINET_H
#define CDEFINET_H

#include <stdio.h>
#include "defiTypedefs.h"

/* Return codes for defiNet::viaOrient 
    DEF_ORIENT_N  0
    DEF_ORIENT_W  1
    DEF_ORIENT_S  2
    DEF_ORIENT_E  3
    DEF_ORIENT_FN 4
    DEF_ORIENT_FW 5
    DEF_ORIENT_FS 6
    DEF_ORIENT_FE 7
*/

EXTERN const char* defiWire_wireType (const defiWire* obj);
EXTERN const char* defiWire_wireShieldNetName (const defiWire* obj);
EXTERN int defiWire_numPaths (const defiWire* obj);

EXTERN const defiPath* defiWire_path (const defiWire* obj, int  index);

  /* WMD -- the following will be removed by the next release                 */

  /* NEW: a net can have more than 1 wire                                     */

  /* Debug printing                                                           */
EXTERN void defiSubnet_print (const defiSubnet* obj, FILE*  f);

EXTERN const char* defiSubnet_name (const defiSubnet* obj);
EXTERN int defiSubnet_numConnections (const defiSubnet* obj);
EXTERN const char* defiSubnet_instance (const defiSubnet* obj, int  index);
EXTERN const char* defiSubnet_pin (const defiSubnet* obj, int  index);
EXTERN int defiSubnet_pinIsSynthesized (const defiSubnet* obj, int  index);
EXTERN int defiSubnet_pinIsMustJoin (const defiSubnet* obj, int  index);

  /* WMD -- the following will be removed by the next release                 */
EXTERN int defiSubnet_isFixed (const defiSubnet* obj);
EXTERN int defiSubnet_isRouted (const defiSubnet* obj);
EXTERN int defiSubnet_isCover (const defiSubnet* obj);

EXTERN int defiSubnet_hasNonDefaultRule (const defiSubnet* obj);

  /* WMD -- the following will be removed by the next release                 */
EXTERN int defiSubnet_numPaths (const defiSubnet* obj);
EXTERN const defiPath* defiSubnet_path (const defiSubnet* obj, int  index);

EXTERN const char* defiSubnet_nonDefaultRule (const defiSubnet* obj);

EXTERN int defiSubnet_numWires (const defiSubnet* obj);
EXTERN const defiWire* defiSubnet_wire (const defiSubnet* obj, int  index);

  /* WMD -- the following will be removed by the next release                 */

EXTERN int defiVpin_xl (const defiVpin* obj);
EXTERN int defiVpin_yl (const defiVpin* obj);
EXTERN int defiVpin_xh (const defiVpin* obj);
EXTERN int defiVpin_yh (const defiVpin* obj);
EXTERN char defiVpin_status (const defiVpin* obj);
EXTERN int defiVpin_orient (const defiVpin* obj);
EXTERN const char* defiVpin_orientStr (const defiVpin* obj);
EXTERN int defiVpin_xLoc (const defiVpin* obj);
EXTERN int defiVpin_yLoc (const defiVpin* obj);
EXTERN const char* defiVpin_name (const defiVpin* obj);
EXTERN const char* defiVpin_layer (const defiVpin* obj);

/* Pre 5.4                                                                    */

EXTERN const char* defiShield_shieldName (const defiShield* obj);
EXTERN int defiShield_numPaths (const defiShield* obj);

EXTERN const defiPath* defiShield_path (const defiShield* obj, int  index);

/* Struct holds the data for one component.                                   */

  /* Routines used by YACC to set the fields in the net.                      */

  /* WMD -- the following will be removed by the next release                 */

  /* NEW: a net can have more than 1 wire                                     */

  /* 5.6                                                                      */

  /* For OA to modify the netName, id & pinName                               */

  /* Routines to return the value of net data.                                */
EXTERN const char* defiNet_name (const defiNet* obj);
EXTERN int defiNet_weight (const defiNet* obj);
EXTERN int defiNet_numProps (const defiNet* obj);
EXTERN const char* defiNet_propName (const defiNet* obj, int  index);
EXTERN const char* defiNet_propValue (const defiNet* obj, int  index);
EXTERN double defiNet_propNumber (const defiNet* obj, int  index);
EXTERN const char defiNet_propType (const defiNet* obj, int  index);
EXTERN int defiNet_propIsNumber (const defiNet* obj, int  index);
EXTERN int defiNet_propIsString (const defiNet* obj, int  index);
EXTERN int defiNet_numConnections (const defiNet* obj);
EXTERN const char* defiNet_instance (const defiNet* obj, int  index);
EXTERN const char* defiNet_pin (const defiNet* obj, int  index);
EXTERN int defiNet_pinIsMustJoin (const defiNet* obj, int  index);
EXTERN int defiNet_pinIsSynthesized (const defiNet* obj, int  index);
EXTERN int defiNet_numSubnets (const defiNet* obj);

EXTERN const defiSubnet* defiNet_subnet (const defiNet* obj, int  index);

  /* WMD -- the following will be removed by the next release                 */
EXTERN int defiNet_isFixed (const defiNet* obj);
EXTERN int defiNet_isRouted (const defiNet* obj);
EXTERN int defiNet_isCover (const defiNet* obj);

  /* The following routines are for wiring */
EXTERN int defiNet_numWires (const defiNet* obj);

EXTERN const defiWire* defiNet_wire (const defiNet* obj, int  index);

  /* Routines to get the information about Virtual Pins. */
EXTERN int defiNet_numVpins (const defiNet* obj);

EXTERN const defiVpin* defiNet_vpin (const defiNet* obj, int  index);

EXTERN int defiNet_hasProps (const defiNet* obj);
EXTERN int defiNet_hasWeight (const defiNet* obj);
EXTERN int defiNet_hasSubnets (const defiNet* obj);
EXTERN int defiNet_hasSource (const defiNet* obj);
EXTERN int defiNet_hasFixedbump (const defiNet* obj);
EXTERN int defiNet_hasFrequency (const defiNet* obj);
EXTERN int defiNet_hasPattern (const defiNet* obj);
EXTERN int defiNet_hasOriginal (const defiNet* obj);
EXTERN int defiNet_hasCap (const defiNet* obj);
EXTERN int defiNet_hasUse (const defiNet* obj);
EXTERN int defiNet_hasStyle (const defiNet* obj);
EXTERN int defiNet_hasNonDefaultRule (const defiNet* obj);
EXTERN int defiNet_hasVoltage (const defiNet* obj);
EXTERN int defiNet_hasSpacingRules (const defiNet* obj);
EXTERN int defiNet_hasWidthRules (const defiNet* obj);
EXTERN int defiNet_hasXTalk (const defiNet* obj);

EXTERN int defiNet_numSpacingRules (const defiNet* obj);
EXTERN void defiNet_spacingRule (const defiNet* obj, int  index, char**  layer, double*  dist, double*  left, double*  right);
EXTERN int defiNet_numWidthRules (const defiNet* obj);
EXTERN void defiNet_widthRule (const defiNet* obj, int  index, char**  layer, double*  dist);
EXTERN double defiNet_voltage (const defiNet* obj);

EXTERN int defiNet_XTalk (const defiNet* obj);
EXTERN const char* defiNet_source (const defiNet* obj);
EXTERN double defiNet_frequency (const defiNet* obj);
EXTERN const char* defiNet_original (const defiNet* obj);
EXTERN const char* defiNet_pattern (const defiNet* obj);
EXTERN double defiNet_cap (const defiNet* obj);
EXTERN const char* defiNet_use (const defiNet* obj);
EXTERN int defiNet_style (const defiNet* obj);
EXTERN const char* defiNet_nonDefaultRule (const defiNet* obj);

  /* WMD -- the following will be removed by the next release                 */
EXTERN int defiNet_numPaths (const defiNet* obj);

EXTERN const defiPath* defiNet_path (const defiNet* obj, int  index);

EXTERN int defiNet_numShields (const defiNet* obj);

EXTERN const defiShield* defiNet_shield (const defiNet* obj, int  index);

EXTERN int defiNet_numShieldNets (const defiNet* obj);
EXTERN const char* defiNet_shieldNet (const defiNet* obj, int  index);
EXTERN int defiNet_numNoShields (const defiNet* obj);

EXTERN const defiShield* defiNet_noShield (const defiNet* obj, int  index);

  /* 5.6                                                                      */
EXTERN int defiNet_numPolygons (const defiNet* obj);
EXTERN const char* defiNet_polygonName (const defiNet* obj, int  index);
EXTERN struct defiPoints defiNet_getPolygon (const defiNet* obj, int  index);
EXTERN int defiNet_polyMask (const defiNet* obj, int  index);
EXTERN const char* defiNet_polyRouteStatus (const defiNet* obj, int  index);
EXTERN const char* defiNet_polyRouteStatusShieldName (const defiNet* obj, int  index);
EXTERN const char* defiNet_polyShapeType (const defiNet* obj, int  index);

EXTERN int defiNet_numRectangles (const defiNet* obj);
EXTERN const char* defiNet_rectName (const defiNet* obj, int  index);
EXTERN int defiNet_xl (const defiNet* obj, int  index);
EXTERN int defiNet_yl (const defiNet* obj, int  index);
EXTERN int defiNet_xh (const defiNet* obj, int  index);
EXTERN int defiNet_yh (const defiNet* obj, int  index);
EXTERN int defiNet_rectMask (const defiNet* obj, int  index);
EXTERN const char* defiNet_rectRouteStatus (const defiNet* obj, int  index);
EXTERN const char* defiNet_rectRouteStatusShieldName (const defiNet* obj, int  index);
EXTERN const char* defiNet_rectShapeType (const defiNet* obj, int  index);

  /* 5.8                                                                      */
EXTERN int defiNet_numViaSpecs (const defiNet* obj);
EXTERN struct defiPoints defiNet_getViaPts (const defiNet* obj, int  index);
EXTERN const char* defiNet_viaName (const defiNet* obj, int  index);
EXTERN const int defiNet_viaOrient (const defiNet* obj, int  index);
EXTERN const char* defiNet_viaOrientStr (const defiNet* obj, int  index);
EXTERN const int defiNet_topMaskNum (const defiNet* obj, int  index);
EXTERN const int defiNet_cutMaskNum (const defiNet* obj, int  index);
EXTERN const int defiNet_bottomMaskNum (const defiNet* obj, int  index);
EXTERN const char* defiNet_viaRouteStatus (const defiNet* obj, int  index);
EXTERN const char* defiNet_viaRouteStatusShieldName (const defiNet* obj, int  index);
EXTERN const char* defiNet_viaShapeType (const defiNet* obj, int  index);

  /* Debug printing                                                           */
EXTERN void defiNet_print (const defiNet* obj, FILE*  f);

  /* The method freeWire() is added is user select to have a callback         */
  /* per wire within a net This is an internal method and is not public       */

  /* Clear the rectangles & polygons data if partial path callback is set     */

  /* WMD -- the following will be removed by the nex release                  */

  /* WMD -- the following will be removed by the nex release                  */

#endif
