/* * Copyright (c) 2017 TOYOTA MOTOR CORPORATION * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef ALLOCATE_LIST_HPP #define ALLOCATE_LIST_HPP #include #include #include #include //#include #include "windowmanager-client.hpp" namespace wm { /* using std::experimental::nullopt; using std::experimental::optional; */ typedef enum Task{ TASK_ALLOCATE, TASK_RELEASE }ResourceTask; struct WMTrigger { std::string appid; std::string role; std::string area; Task task; }; struct WMAction { std::string appid; std::string role; std::string area; bool end_draw_finished; }; struct WMRequest { WMRequest(); explicit WMRequest(std::string appid, std::string role, std::string area, ResourceTask task); virtual ~WMRequest(); WMRequest(const WMRequest &obj); unsigned seq_num; struct WMTrigger trigger; std::vector sync_draw_req; }; class AppList { public: AppList(); virtual ~AppList(); AppList(const AppList &obj) = delete; // Client Database Interface void addClient(const std::string &appid, const std::string &role); void removeClient(const std::string &appid); bool contains(const std::string &appid); int countClient(); std::shared_ptr lookUpClient(const std::string &appid); // Request Interface unsigned currentSequenceNumber(); unsigned getSequenceNumber(const std::string &appid); unsigned addAllocateRequest(WMRequest req); /* TODO: consider, which is better WMClient or std::string appid? if appid is key to manage resources, it is better to select std::string otherwise WMClient is better, IMO */ bool requestFinished(); bool setAction(unsigned request_seq, const std::string &appid, const std::string &role, const std::string &area); bool setEndDrawFinished(unsigned request_seq, const std::string &appid, const std::string &role); bool endDrawFullfilled(unsigned request_seq); void removeRequest(unsigned request_seq); void next(); bool haveRequest(); struct WMTrigger getRequest(unsigned request_seq); const std::vector& getActions(unsigned request_seq); void client_dump(); void req_dump(); private: std::vector req_list; std::unordered_map> client_list; unsigned current_seq; }; } #endif // ALLOCATE_LIST_HPP