// This may look like C code, but it is really -*- C++ -*-
// RTSS --- Railway Total System Simulator
// (c) TAKAGI Ryo (at Prof. SONE's Laboratory, the Univ. of Tokyo.)
// feedline.hh --- class feedline holding feeder line data
// $Id: feedline.hh,v 2.4 1994/12/27 12:03:47 rt Exp $

#include "globvar.hh"
#include "enumerat.hh"
#include "elecchar.hh"
#include "feed_y.hh"
#include "RS_Object.hh"

#ifndef ___FEEDLINE_HH
#define ___FEEDLINE_HH		// こうしておくと2度インクルードしても大丈夫！

#ifndef NODELIM
#define NODELIM 1e-3		// ブランチの最小長さを規定
#endif /* ! NODELIM */




// 饋電線データ
class feedline
  : public virtual RS_Object
{
  string name_sjis ;

  int nfline ;			// この饋電線の饋電線番号
  int ssc ;			// 饋電線に接続されている変電所数
  int car ;			// 　〃　　　　　　　〃　車両数
  feedpos * css ;		// 接続変電所データ
  int maxcss ;			// css メモリの最大数
  feeder_shape shape ;		// 饋電線の形
  double feedlength ;		// 饋電線の全長
  double frf ;			// 饋電定数
  feed_y fdx ;			// feed_y データ、ソート済み
  void impcal ( int , int , feedpos * , bran_node & , feed_y & ) ;
				// branch impedance の計算
public :

  void setNameSjis ( string const & x ) { name_sjis = x ; }
  feedline () ;			// empty constructor
  ~feedline () { delete css ; }	// destructor
  feedline ( feedline const & ) ;	// X(X&) 禁止
  feedline & operator= ( feedline const & ) ;	// 代入禁止

  void renewssc ( int ) ;	// ssc, car を変更する
  void clearcar () { car = 0 ; }	// 車両データ更新

  // 変数のセット
  void setvar ( double l , double ff , feeder_shape x = Long )
  { feedlength = l ; frf = ff ; shape = x ; }

  void setnfline ( int i ) { nfline = i ; }	// 饋電線番号の初期化

  double feederlength () const { return feedlength ; }
  feed_y & fdsort () { return fdx ; }
  feeder_shape feedshape () const { return shape ; }	// 変数参照用
  feedline & operator+= ( feedpos & ) ;	// 要素（列車分）を加える
  feedline & operator*= ( feedpos & ) ;	// 要素（変電所分）を加える
  feed_y & sortx () ;	// 距離ソート、ブランチを決定

  // Getting name string for display
  string const & getNameSjis () const { return name_sjis ; }
} ;


#endif /* ! ___FEEDLINE_HH */
