#include "Feedback.h" #include "FileSystemUtilities.h" #include #include #include std::vector Lineup; LoudMouth* Speaker = 0; static void add(LoudMouth* MP) { std::vector::iterator i = std::find(Lineup.begin(),Lineup.end(),MP); if (i == Lineup.end()) Lineup.push_back(MP); } static void request(LoudMouth* MP) { if (!Speaker) Speaker = MP; } static void remove(LoudMouth* MP) { std::vector::iterator idx = std::find(Lineup.begin(),Lineup.end(),MP); Lineup.erase(idx); } LoudMouth::LoudMouth() : RequestWord(false), Finished(false) { } LoudMouth::~LoudMouth() { } void LoudMouth::whisper(const std::string& What) { add(this); if (Speaker == this) std::cout << What; else Speech += What; } void LoudMouth::whisperLn(const std::string& What) { whisper(What); whisper(eolTextSequence()); } void LoudMouth::say(const std::string& What) { RequestWord = true; add(this); request(this); Speech += What; if (Speaker == this) { std::cout << Speech; Speech = ""; } } void LoudMouth::sayLn(const std::string& What) { say(What); say(eolTextSequence()); } void LoudMouth::yieldFloor() { Finished = true; if (!Speaker || (Speaker == this)) { std::cout << Speech; Speech = ""; remove(this); Speaker = 0; for (unsigned int i=0; iFinished) { std::cout << Lineup[i]->Speech; remove(Lineup[i]); } else ++i; } for (unsigned int i=0; iRequestWord) { request(Lineup[i]); std::cout << Lineup[i]->Speech; Lineup[i]->Speech = ""; break; } } } else if (Speech == "") remove(this); }