dsmcc_storage.h

来自「数字电视中间件小型库」· C头文件 代码 · 共 80 行

H
80
字号
#ifndef DSMCC_STORAGE_H#define DSMCC_STORAGE_H

#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h>
#include <qmap.h>
#include <qstring.h>
#include "dsmcc.h"
#include "dsmcc_biop.h"
#include "mythdbcon.h"

namespace DSM_CC {
    // Parent class for storage policies
    class Storage {

        // Derived classes must implement these operations
        protected:
            virtual bool StoreObject(uint32_t download_id, uint16_t module_id, uint8_t module_version, const BIOP::ServiceGateway& srg) = 0;
            virtual bool StoreObject(uint32_t download_id, uint16_t module_id, uint8_t module_version, const BIOP::DirectoryMessage& dm) = 0;
            virtual bool StoreObject(uint32_t download_id, uint16_t module_id, uint8_t module_version, const BIOP::FileMessage& fm) = 0;

        // These will be typically used by all derived classes inside the StoreObject()
        // definitions, and so are provided here for convenience
        protected:
            // virtual because CarouselTracker ultimately derives from this
            virtual ~Storage() {};
            QString PlacementKey(uint32_t download_id, uint16_t module_id, const BIOP::MessageHeader& header);
            QString PlacementKey(uint32_t download_id, uint16_t module_id, uint32_t object_key, uint8_t object_key_length);

    };

    class FilesystemStorage : private Storage {
        public:
            FilesystemStorage() : rootpath(""), rootvalid(false) {}

            bool StoreObject(uint32_t download_id, uint16_t module_id, uint8_t module_version, const BIOP::ServiceGateway& srg);
            bool StoreObject(uint32_t download_id, uint16_t module_id, uint8_t module_version, const BIOP::DirectoryMessage& dm);
            bool StoreObject(uint32_t download_id, uint16_t module_id, uint8_t module_version, const BIOP::FileMessage& fm);

            void SetStorageRoot(QString newroot);
            QString GetStorageRoot();

        private:
            QMap<QString, QString> placement_map;
            QString rootpath;
            bool    rootvalid;
    };

    class MythDatabaseStorage : private Storage {
        public:
            bool StoreObject(uint32_t download_id, uint16_t module_id, uint8_t module_version, const BIOP::ServiceGateway& srg);
            bool StoreObject(uint32_t download_id, uint16_t module_id, uint8_t module_version, const BIOP::DirectoryMessage& dm);
            bool StoreObject(uint32_t download_id, uint16_t module_id, uint8_t module_version, const BIOP::FileMessage& fm);

        private:
            typedef struct {
                uint32_t parent;
                QString name;
            } object_info_record;

            QMap<QString, object_info_record> object_info;
            static uint32_t         next_insert_id;

            // This actually finds out what the next_insert_id is, in addition to returning it
            uint32_t GetNextInsertId ();

            // For convenience, to concatenate all those byte vectors into strings
            template<class FwdIter> QString MakeString(FwdIter iter, uint32_t length) {
                QString retval = "";
                for(uint32_t done = 0; done < length; ++done, ++iter) {
                    retval += *iter;
                }
                return retval;
            }
    };
}

#endif // DSMCC_STORAGE

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?