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

3G开发

开发平台:

Visual C++

  1. //
  2. //  File = dice.cpp
  3. //
  4. #include <stdlib.h>
  5. #include <fstream>
  6. #include "dice.h"
  7. #include "uni_rand.h"
  8. #include "parmfile.h"
  9. #include "model_graph.h"
  10. extern ParmFile *ParmInput;
  11. #ifdef _DEBUG
  12.   extern ofstream *DebugFile;
  13. #endif
  14. #define MODULUS 2147483647
  15. #define SIXTH_MODULUS 357913941.1667
  16. //======================================================
  17. DiceRoller::DiceRoller( char* instance_name,
  18.                       PracSimModel* outer_model,
  19.                       Signal<byte_t>* out_sig )
  20.           :PracSimModel(  instance_name,
  21.                           outer_model)
  22. {
  23.   MODEL_NAME(DiceRoller);
  24.   OPEN_PARM_BLOCK;
  25.   GET_LONG_PARM(Initial_Seed);
  26.   Seed = Initial_Seed;
  27.   GET_INT_PARM(Faces_Per_Die);
  28.   Out_Sig = out_sig;
  29.   MAKE_OUTPUT(Out_Sig);
  30. }
  31. //===========================================
  32. DiceRoller::~DiceRoller( void ){ };
  33. //========================================
  34. void DiceRoller::Initialize(void)
  35. {
  36.   #ifdef _DEBUG
  37.     *DebugFile << "Now in DiceRoller::Initialize()" << endl;
  38.   #endif
  39.   Block_Size = Out_Sig->GetBlockSize();
  40. };
  41. //========================================
  42. int DiceRoller::Execute()
  43. {
  44.   int is;
  45.   byte_t *symbs_out;
  46.   byte_t face_val, old_face_val;
  47.   long seed;
  48.   //--------------------------------
  49.   //  Get pointer for output buffer
  50.   symbs_out = GET_OUTPUT_PTR(Out_Sig);
  51.   seed = Seed;
  52.   old_face_val = Old_Face_Val;
  53.   for (is=0; is<Block_Size; is++)
  54.     {
  55.     //*symbs_out = RandomLong(&seed)>>shift_val;
  56.     //*symbs_out = 1+ (RandomLong(&seed)%Faces_Per_Die);
  57.     face_val = old_face_val;
  58.     //while((face_val==old_face_val) || ((face_val+old_face_val) == 7))
  59.     //{
  60.       face_val = 1+ byte_t(RandomLong(&seed)/SIXTH_MODULUS);
  61.     //}
  62.     old_face_val = face_val;
  63.     *symbs_out = face_val;
  64.     symbs_out++;
  65.     }
  66.    Old_Face_Val = old_face_val;
  67.   Seed = seed;
  68.   Out_Sig->SetValidBlockSize(Block_Size);
  69.   return(_MES_AOK);
  70. }