psmodel.cpp
上传用户:jtjnyq9001
上传日期:2014-11-21
资源大小:3974k
文件大小:3k
源码类别:

3G开发

开发平台:

Visual C++

  1. //
  2. //  File = psmodel.cpp
  3. //
  4. #include <stdlib.h>
  5. #include <fstream>
  6. #include <string.h>
  7. #include "parmfile.h"
  8. #include "psmodel.h"
  9. #include "syst_graph.h"
  10. #include "model_graph.h"
  11. extern ParmFile ParmInput;
  12. extern ofstream *DebugFile;
  13. extern PracSimModel *PrevModelConstr;
  14. extern SystemGraph CommSystemGraph;
  15. extern int EnclaveNumber;
  16. extern PracSimModel *CommSystem;
  17. //======================================================
  18. PracSimModel::PracSimModel( char* instance_name,
  19.                             PracSimModel* outer_model)
  20. {
  21.    //---------------------------------------------------
  22.    //  Closeout the CMSG for previous model instance
  23.    //  and merge it with the Active System Graph
  24.    Nest_Depth = 1 + outer_model->GetNestDepth();
  25.    if( (PrevModelConstr !=NULL) && (Nest_Depth==1))
  26.    {
  27. #ifdef _DEBUG
  28.       *DebugFile << "model " << instance_name 
  29.          << " is calling CloseoutModelGraph" 
  30.          << endl;
  31. #endif
  32.       PrevModelConstr->CloseoutModelGraph(1);
  33.    }
  34.    if(Nest_Depth == 1) {
  35.       PrevModelConstr = this;
  36.    }
  37.    //--------------------------------------------
  38.    // done with previous instance, now work on
  39.    // the current instance
  40.    MODEL_NAME(unknown);
  41.    Instance_Name = new char[strlen(instance_name)+2];
  42.    strcpy(Instance_Name, instance_name);
  43.    Input_Sigs = NULL;
  44.    //-----------------------------
  45.    //  Register model
  46.    if(Nest_Depth == 1){
  47.       CommSystemGraph.RegisterModel(this);
  48.    }
  49.    //------------------------
  50.    //  create CMSG
  51.    if(Nest_Depth == 1){
  52.       Curr_Mod_Graph = new ModelGraph(this);
  53.    }
  54. }
  55. //======================================================
  56. // special constructor for the CommSystem pseudomodel
  57. //------------------------------------------------------
  58. PracSimModel::PracSimModel(int sys_key,char* model_name)
  59. {
  60.    //-------------------------------------------
  61.    // for special case of CommSystem, model name 
  62.    // and instance name are the same
  63.    Model_Name = new char[strlen(model_name)+2];
  64.    strcpy(Model_Name, model_name);
  65.    Instance_Name = new char[strlen(model_name)+2];
  66.    strcpy(Instance_Name, model_name);
  67.    //  Output_Sigs = NULL;
  68.    Input_Sigs = NULL;
  69.    Nest_Depth = 0;
  70. }
  71. //======================================================
  72. PracSimModel::~PracSimModel()
  73. {
  74. };
  75. //======================================================
  76. void PracSimModel::CloseoutModelGraph(int key)
  77. {
  78.    Curr_Mod_Graph->Closeout( this );
  79.    *DebugFile << "In CloseoutModelGraph ("
  80.               << GetModelName() << "), key = " << key 
  81.               <<", Nest_Depth = " << Nest_Depth << endl;
  82.    if(Nest_Depth == 1){
  83.       CommSystemGraph.MergeCurrModelGraph(
  84.                                     Curr_Mod_Graph);
  85.       CommSystemGraph.DumpSDGraph();
  86.    }
  87. }
  88. //======================================================
  89. const char* PracSimModel::GetModelName(void)
  90. {
  91.    return(Model_Name);
  92. }
  93. //======================================================
  94. const char* PracSimModel::GetInstanceName(void)
  95. {
  96.    return(Instance_Name);
  97. }
  98. //======================================================
  99. int PracSimModel::GetNestDepth(void)
  100. {
  101.   return(Nest_Depth);
  102. }