//==========================================================================
//  OTHERMOD.H -   Definitions & Declarations for
//                 Discrete System Simulation in OMNeT++
//
//  Simulated system: TUB Northern&Southern FDDI Rings
//
//  Author: Gabor.Lencse@hit.bme.hu
//==========================================================================

//--------------------------------------------------------------*
//  Copyright (C) 1996,97 Gabor Lencse,
//  Technical University of Budapest, Dept. of Telecommunications,
//  Stoczek u.2, H-1111 Budapest, Hungary.
//
//  This file is distributed WITHOUT ANY WARRANTY. See the file
//  `license' for details on this and other legal matters.
//--------------------------------------------------------------*/

#ifndef __OTHERMOD_H
#define __OTHERMOD_H

#include <omnetpp.h>

struct histogram_plus_address
  {
  cLongHistogram length;
  int dest;
  };

class FDDI_Generator : public cSimpleModule
  {
  protected:
    int RingID;
    FILE *f;
    int my_station_id;
    double LoadMultiplier;

  public:
  FDDI_Generator(const char *namestr, cModule *parentmod):
    cSimpleModule(namestr, parentmod, GENERATOR_HEAPSIZE) { f = 0; }
  ~FDDI_Generator() { if ( f ) fclose(f); }
  virtual void activity();
  protected:
  virtual void InitStatistics() = 0;
  virtual bool RetrieveDestLength(cMessage *, int &, int &)=0;
  // ^ returns false at the end of trace file, (if load is taken directly from
  // there. Otherwise it must return true !!!
  virtual char * FileNameEnding() = 0;
  };

class FDDI_GeneratorFromTraceFile : public FDDI_Generator
  {
  char * line;

  public:
  FDDI_GeneratorFromTraceFile(const char *namestr, cModule *parentmod) :
    FDDI_Generator(namestr, parentmod) { line=0; }
  ~FDDI_GeneratorFromTraceFile() { if ( line ) delete [] line; }
  protected:
  virtual void InitStatistics();
  virtual bool RetrieveDestLength(cMessage *, int &, int &);
  virtual char * FileNameEnding() { return ".trc"; }
  };

class FDDI_GeneratorHistogram2x1D : public FDDI_Generator
  {
  public:
  FDDI_GeneratorHistogram2x1D(const char *namestr, cModule *parentmod):
    FDDI_Generator(namestr, parentmod) { }
  protected:
  virtual void InitStatistics();
  virtual bool RetrieveDestLength(cMessage *, int &, int &);
  virtual char * FileNameEnding() { return ".hst"; }
  };

class FDDI_GeneratorPiSquare2x1D : public FDDI_Generator
  {
  public:
  FDDI_GeneratorPiSquare2x1D(const char *namestr, cModule *parentmod):
    FDDI_Generator(namestr, parentmod) { }
  protected:
  virtual void InitStatistics();
  virtual bool RetrieveDestLength(cMessage *, int &, int &);
  virtual char * FileNameEnding() { return ".psq"; }
  };

class FDDI_GeneratorKSplit2x1D : public FDDI_Generator
  {
  public:
  FDDI_GeneratorKSplit2x1D(const char *namestr, cModule *parentmod):
    FDDI_Generator(namestr, parentmod) { }
  protected:
  virtual void InitStatistics();
  virtual bool RetrieveDestLength(cMessage *, int &, int &);
  virtual char * FileNameEnding() { return ".ksp"; }
  };

class FDDI_GeneratorKSplit2D : public FDDI_Generator
  {
  public:
  FDDI_GeneratorKSplit2D(const char *namestr, cModule *parentmod):
    FDDI_Generator(namestr, parentmod) { }
  protected:
  virtual void InitStatistics();
  virtual bool RetrieveDestLength(cMessage *, int &, int &);
  virtual char * FileNameEnding() { return ".k2d"; }
  };

class FDDI_Address_Generator : public cSimpleModule
  {
  protected:
    int RingID;
    FILE *f;
    int my_station_id;
    //double LoadMultiplier;
    cBag length_histograms;

  public:
  FDDI_Address_Generator(const char *namestr, cModule *parentmod):
    cSimpleModule(namestr, parentmod, GENERATOR_HEAPSIZE) { f = 0; }
  ~FDDI_Address_Generator() { if ( f ) fclose(f); }
  virtual void activity();
  virtual void InitStatistics();
  virtual int RetrieveNewAddress(int);
  virtual char * FileNameEnding() { return ".hst"; }
  };

class FDDI_Generator4Ring : public cSimpleModule
  {
  Module_Class_Members(FDDI_Generator4Ring,cSimpleModule,GENERATOR_HEAPSIZE)
  virtual void activity();
  };

class FDDI_Generator4Sniffer : public cSimpleModule
  {
  Module_Class_Members(FDDI_Generator4Sniffer,cSimpleModule,GENERATOR_HEAPSIZE)
  virtual void activity();
  };

class Stat : public cSimpleModule
  {
  Module_Class_Members(Stat,cSimpleModule,STAT_HEAPSIZE)
  virtual void activity();
  };

class FDDI_Sink : public cSimpleModule
  {
  Module_Class_Members(FDDI_Sink,cSimpleModule,SINK_HEAPSIZE)
  virtual void activity();
  };

class FDDI_Monitor : public cSimpleModule
  {
  Module_Class_Members(FDDI_Monitor,cSimpleModule,MONITOR_HEAPSIZE)
  virtual void activity();
  };

class LoadControl : public cSimpleModule
  {
  public:
  Module_Class_Members(LoadControl,cSimpleModule,LOADCONTROL_HEAPSIZE)
  virtual void activity();
  };

#endif


syntax highlighted by Code2HTML, v. 0.9.1