// 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"

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

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

// 饋電線データ
class feedline {
    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:

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

    void renewssc(int);	// ssc, car を変更する
    inline void clearcar() {car = 0;}	// 車両データ更新
    inline void setvar(double l, double ff, feeder_shape x = Long) {
	// 変数のセット
	feedlength = l; frf = ff; shape = x;
    }

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

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

#endif /* ! ___FEEDLINE_HH */
