EventSequence
2021/9/8 6:37:24
本文主要是介绍EventSequence,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
#include <iostream> #include <string> #include <fstream> #include <sstream> #include <map> #include <set> #include <vector> #include <list> #include <memory> #include <streambuf> #include <deque> #include "CJsonObject/CJsonObject.hpp" using namespace std; typedef map<string,string> Event; struct EventsContainer{ const Event PopEvent() { if( events.empty()) { cout << "Empty Event queue" << endl; return Event(); } Event tmp = events.front(); events.pop_front(); return tmp; } void AddEvent(const string& evenname, const map<string,string>& param) { AddEvent(param); } void AddEvent(const Event& event) { events.push_back(event); } deque<Event> events; }; class EventSequence{ public: EventSequence() { } const Event GetEvent(){ return container->PopEvent(); } void SetEventsContainer(shared_ptr<EventsContainer> ptr) { container = ptr; } private: shared_ptr<EventsContainer> container; }; class EventsInitializer{ public: shared_ptr<EventSequence> operator()(const std::string& file) { shared_ptr<EventSequence> esptr = make_shared<EventSequence>(); shared_ptr<EventsContainer> ecptr = make_shared<EventsContainer>(); esptr->SetEventsContainer(ecptr); container = ecptr; ReadJsonFile(file); return esptr; } void ReadJsonFile( const string& file) { ifstream f (file.c_str()); if( f.is_open()) { jsonstr = string(istreambuf_iterator<char>(f), istreambuf_iterator<char>()); json = make_shared<neb::CJsonObject>(jsonstr); cout << "JSON error msg -->" << json->GetErrMsg() << endl; Parse(); return; } cout << "ERROR---->File Not ok, Plase Check File....." << endl; } virtual void Parse() { for( int i = 0; i < (*json)["events"].GetArraySize(); ++i) { map<string,string> tmp; while(true) { string key; string value; (*json)["events"][i].GetKey(key); if ( key.empty() ) break; (*json)["events"][i].Get(key, value); tmp[key] = value; } container->AddEvent(tmp["event"], tmp); } cout << "Json Parsing Ok...." << endl; } private: string jsonstr; shared_ptr<neb::CJsonObject> json; shared_ptr<EventsContainer> container; }; class CallObject{ public: virtual void operator()(const Event& event) { string ename = (event.find("event")== event.end())?"":(event.find("event"))->second; cout << "event:" << ename << endl; for( map<string,string>::const_iterator itr = event.begin(); itr != event.end(); ++itr ) { cout << "+->" <<itr->first << ":" << itr->second << endl; } } }; class ActionControler{ public: ActionControler(shared_ptr<EventSequence> ptr) { SetEventSequence(ptr); } void SetEventSequence(shared_ptr<EventSequence> ptr) { sequence = ptr; } void run(CallObject& call) { char tmp; while( cin.get(tmp)) { switch( tmp ) { case '\n': call(sequence->GetEvent()); break; default: break; } } } private: std::shared_ptr<EventSequence> sequence; }; int main(int argc, char** argv) { shared_ptr<EventSequence> eventsequence = EventsInitializer()(argv[1]); ActionControler ac(eventsequence); CallObject callme; ac.run(callme); return -1; }
这篇关于EventSequence的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-01UniApp 中组件的生命周期是多少-icode9专业技术文章分享
- 2024-11-01如何使用Svg Sprite Icon简化网页图标管理
- 2024-10-31Excel数据导出课程:新手从入门到精通的实用教程
- 2024-10-31Excel数据导入课程:新手入门指南
- 2024-10-31RBAC的权限课程:新手入门教程
- 2024-10-31Svg Sprite Icon课程:新手入门必备指南
- 2024-10-31怎么配置 L2TP 允许多用户连接-icode9专业技术文章分享
- 2024-10-31怎么在FreeBSD上 安装 OpenResty-icode9专业技术文章分享
- 2024-10-31运行 modprobe l2tp_ppp 时收到“module not found”消息提醒是什么-icode9专业技术文章分享
- 2024-10-31FreeBSD的下载命令有哪些-icode9专业技术文章分享