11


#define _CRT_SECURE_NO_WARNINGS
#include 
#include <string>
#include 
#include 
#include <string>
#include 

class Page
{
public:
    std::string name;
};

class PageA : public Page
{
};

class PageB :public Page
{
};

enum VideoType
{
    IPM,
    Stitch
};

static std::mapbool>> map;
void OpenVideo(VideoType type, Page* page)
{
    if (page == nullptr) {
        return;
    }
    auto findValue = map.find(type);
    if (findValue != map.end())
    {
        if (map[type].size() > 0)
        {
            std::cout << "videType =" << type << "视频流已开启" << std::endl;
            map[type][page] = true;
            return;
        }
    }
    map[type][page] = true;
    std::cout << "videType =" << type << "开启视频流" << std::endl;
}

void CloseVideo(VideoType type, Page* page)
{
    if (page == nullptr) {
        return;
    }
    auto findValue = map.find(type);
    if (findValue != map.end())
    {
        std::mapbool> &pages = map[type];
        pages.erase(page);
        if (pages.size() == 0) {
            map.erase(type);
            std::cout << "videType =" << type << "关闭视频流" << std::endl;
        }
        else {
            std::cout << "videType =" << type << "暂且不能关闭视频流" << std::endl;
        }
    }
    else {
        std::cout << "videType =" << type << "未开启" << std::endl;
    }
}

void main()
{
    Page* pageA = new PageA();
    Page* pageB = new PageB();

    OpenVideo(VideoType::IPM, pageA);
    OpenVideo(VideoType::IPM, pageA);
    OpenVideo(VideoType::IPM, pageB);
    CloseVideo(VideoType::IPM, pageB);
    CloseVideo(VideoType::IPM, pageA);

    OpenVideo(VideoType::IPM, pageA);
    OpenVideo(VideoType::IPM, pageA);
    OpenVideo(VideoType::IPM, pageB);
    CloseVideo(VideoType::IPM, pageB);
    CloseVideo(VideoType::IPM, pageA);
    system("pause");
}