//
// Copyright © 2017-2018 Intel Corporation.
//
// This software and the related documents are Intel copyrighted materials,
// and your use of them is governed by the express license under which they
// were provided to you (End User License Agreement for the Intel(R) Software
// Development Products (Version October 2018). Unless the License provides
// otherwise, you may not use, modify, copy, publish, distribute, disclose or
// transmit this software or the related documents without Intel's prior
// written permission.
//
// This software and the related documents are provided as is, with no
// express or implied warranties, other than those that are expressly
// stated in the License.
//

#ifndef HDDL_SERVICE_HDDLVM_H
#define HDDL_SERVICE_HDDLVM_H

#include <map>
#include <string>
namespace hddl {
struct GroupDeviceParams {
    std::string groupTag;
    uint32_t deviceNum;
    int subclass;
    std::map<std::string, uint32_t> graphTagMap;
    uint32_t streamDeviceNum;
    uint32_t bypassDeviceNum;
    uint32_t sgadDeviceNum;
    bool useSgadByDefault;
    int deviceScheduleInterval;
    int maxGraphPerDevice;
    int maxCycleSwitchOut;
    int maxTaskNumberSwitchOut;
};

class HddlClient;
class HDDL_EXPORT_API HddlVm {
public:
    HddlVm(const char* name);
    HddlVm(std::string& string);
    ~HddlVm();

    HddlStatusCode groupDevice(const GroupDeviceParams& params);
    HddlStatusCode ungroupDevice(const std::string& groupTag);
private:
    HddlClient* m_client;
};


} // namespace hddl

#endif //HDDL_SERVICE_HDDLVM_H
