Für Vorlesungen, bitte die Webseite verwenden. https://flavigny.de/lecture
Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

65 rindas
1.7KB

  1. Analyzer::Analyzer (int m)
  2. {
  3. n = m; // Merke Groesse, Eingang n
  4. a = new Wire*[n]; // n Zeiger auf Wires
  5. for (int i=0; i<n; i=i+1) a[i] = 0; // nix angeschlossen
  6. b = c = 0; // nix angeschlossen
  7. w.ConnectInput(*this,0); // Ich -> Draht
  8. w.ConnectOutput(*this,n); // Draht->Ich
  9. actionFlag=true; // nix aktiviert
  10. Sim.StoreCircuitEvent(*this); // Starte Auswertung
  11. }
  12. Analyzer::~Analyzer()
  13. {
  14. delete[] a;
  15. }
  16. void Analyzer::ChangeInput (State s, int pin)
  17. {
  18. // Sorge dafuer, dass Gatter neu berechnet wird, wenn
  19. // alle Zustaende der Eingaenge (Draehte) festliegen
  20. if (!actionFlag)
  21. {
  22. Sim.StoreCircuitEvent(*this);
  23. actionFlag=true;
  24. }
  25. }
  26. void Analyzer::Action ()
  27. {
  28. // Lese Eingangssignale
  29. std::cout.width(10);
  30. std::cout << Sim.GetTime();
  31. for (int i=n-1; i>=0; i=i-1)
  32. if (a[i]!=0)
  33. {
  34. if (a[i]->GetState()==low) std::cout << " 0";
  35. if (a[i]->GetState()==high) std::cout << " 1";
  36. if (a[i]->GetState()==unknown) std::cout << " U";
  37. }
  38. else std::cout << " ";
  39. std::cout << std::endl;
  40. // Selbstaktivierung im naechsten Zeitschritt
  41. if (c->GetState()==unknown) c->ChangeState(Sim.GetTime()+1,high);
  42. if (c->GetState()==low) c->ChangeState(Sim.GetTime()+1,high);
  43. if (c->GetState()==high) c->ChangeState(Sim.GetTime()+1,low);
  44. // erlaube neue Auswertung
  45. actionFlag=false;
  46. }
  47. void Analyzer::ConnectInput (Wire& w, int pin)
  48. {
  49. // Wird von Connect-Funktion des Drahtes aufgerufen
  50. if (pin>=0 && pin<n) a[pin] = &w;
  51. if (pin==n) b = &w;
  52. }
  53. void Analyzer::ConnectOutput (Wire& w, int pin)
  54. {
  55. // Wird von Connect-Funktion des Drahtes aufgerufen
  56. c = &w;
  57. }