青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Cpper
C/C++高級(jí)工程師 Android高級(jí)軟件工程師 IT集成工程師 音頻工程師 熟悉c,c++,java,c#,py,js,asp等多種語(yǔ)言 程序猿
文件系統(tǒng)的功能:
1.資源包裹
2.提供資源載入速度
3.資源加密

在蓋莫游戲引擎中
文件系統(tǒng)由讀文件,寫(xiě)文件,XML序列化對(duì)象,ConfigFile構(gòu)成
文件系統(tǒng)的接口如下:
1.讀文件
////////////////////////////////////////////////////////////
/// 定義讀2進(jìn)制文件抽象基類
////////////////////////////////////////////////////////////
class GAPI ReadFile: public Object
{
public:
    
////////////////////////////////////////////////////////
    
/// 讀文件構(gòu)造函數(shù),析構(gòu)函數(shù)
    
////////////////////////////////////////////////////////
    ReadFile();
    
virtual ~ReadFile();

    
////////////////////////////////////////////////////////
    
///讀取文件數(shù)據(jù)
    
////////////////////////////////////////////////////////
    virtual uint Read(void* buf,uint size,uint number = 1=0;

    
////////////////////////////////////////////////////////
    
///獲取文件長(zhǎng)度
    
////////////////////////////////////////////////////////
    virtual uint64 GetSize()const=0;

    
////////////////////////////////////////////////////////
    
///文件定位
    
////////////////////////////////////////////////////////
    virtual bool Seek(long offset,FILE_SEEK_MODE mode = FILE_SEEK_MODE_CURRENT) = 0;

    
////////////////////////////////////////////////////////
    
///獲取當(dāng)前游標(biāo)位置
    
////////////////////////////////////////////////////////
    virtual uint64 Tell()const = 0;

    
////////////////////////////////////////////////////////
    
/// 獲取文件名
    
////////////////////////////////////////////////////////
    virtual engine_string GetFileName()const = 0;

    
////////////////////////////////////////////////////////
    
///合法性檢查
    
////////////////////////////////////////////////////////
    virtual bool IsValid()const = 0;
private:
    DECLARE_OBJECT(ReadFile)
};

2.WriteFile
////////////////////////////////////////////////////////////
/// 定義讀2進(jìn)制文件抽象基類
////////////////////////////////////////////////////////////
class GAPI WriteFile : public Object
{
public:
    
////////////////////////////////////////////////////////
    
/// 寫(xiě)文件構(gòu)造函數(shù),析構(gòu)函數(shù)
    
////////////////////////////////////////////////////////
    WriteFile();
    
virtual ~WriteFile();

    
////////////////////////////////////////////////////////
    
///寫(xiě)數(shù)據(jù)
    
////////////////////////////////////////////////////////
    virtual uint Write(const void* buf,uint size,uint number = 1= 0;

    
////////////////////////////////////////////////////////
    
///文件定位
    
////////////////////////////////////////////////////////
    virtual bool Seek(long position,FILE_SEEK_MODE mode = FILE_SEEK_MODE_CURRENT) = 0;

    
////////////////////////////////////////////////////////
    
///獲取當(dāng)前游標(biāo)位置
    
////////////////////////////////////////////////////////
    virtual uint64 Tell()const = 0;

    
////////////////////////////////////////////////////////
    
/// 獲取文件名
    
////////////////////////////////////////////////////////
    virtual engine_string GetFileName()const = 0;

    
////////////////////////////////////////////////////////
    
///合法性檢查
    
////////////////////////////////////////////////////////
    virtual bool IsValid()const = 0;
private:
    DECLARE_OBJECT(WriteFile)
};
3.ConfigFile.
////////////////////////////////////////////////////////////
/// 定義解析ini文件對(duì)象
////////////////////////////////////////////////////////////
class GAPI ConfigFile
{
public:
    
////////////////////////////////////////////////////////
    
/// 定義搜索的前置條件
    
////////////////////////////////////////////////////////
    template<class Pair>
    
class StrPairEq : public std::binary_function<Pair,std::string,bool>
    {
    
public:
        
bool operator()(const Pair& lhs,const std::string& rhs)const;
    };

    typedef std::pair
<std::string,std::string> Variable;
    typedef std::list
< Variable > Section;
    typedef std::pair
< std::string, Section > NamedSection;
    typedef std::list
< NamedSection > Layout;

public:
    
////////////////////////////////////////////////////////
    
/// 構(gòu)造函數(shù)和析構(gòu)函數(shù)
    
////////////////////////////////////////////////////////
    ConfigFile();
    ConfigFile(
const std::string& filename);
    
~ConfigFile();
public:
    
////////////////////////////////////////////////////////
    
/// 打開(kāi)指定文件
    
////////////////////////////////////////////////////////
    bool Open(const std::string& filename);

    
////////////////////////////////////////////////////////
    
/// 把配置文件數(shù)據(jù)寫(xiě)入磁盤(pán)
    
////////////////////////////////////////////////////////
    void Flush();

    
////////////////////////////////////////////////////////
    
/// 關(guān)閉配置文件
    
////////////////////////////////////////////////////////
    void Close();

    
////////////////////////////////////////////////////////
    
/// 寫(xiě)(讀)數(shù)據(jù)的函數(shù)(不可使用于UDT數(shù)據(jù))
    
////////////////////////////////////////////////////////
    template<class VarType>
    
void SetVariable(const std::string& sec,const std::string& var,VarType value)
    {
        std::
string sec_brac(BracketString(sec));
        Layout::iterator sec_iter;
        Section::iterator var_iter;
        std::ostringstream ss;
        
//! 寫(xiě)數(shù)據(jù)到字符串
        ss << value;

        
//! 檢索段
        sec_iter = std::find_if(layout.begin(),layout.end(),std::bind2nd(StrPairEq<NamedSection>(),sec_brac));

        
//! 如果段不存在則增加之
        if(sec_iter == layout.end())
        {
            layout.push_back(NamedSection(sec_brac, Section()));
            sec_iter 
= std::find_if(layout.begin(),layout.end(),std::bind2nd(StrPairEq<NamedSection>(),sec_brac));
        }

        
//! 變量檢索
        var_iter = std::find_if(sec_iter->second.begin(),sec_iter->second.end(),std::bind2nd(StrPairEq<Variable>(), var) );

        
//! 寫(xiě)數(shù)據(jù)
        if(var_iter == sec_iter->second.end())
        {
            sec_iter
->second.push_back(Variable(var, ss.str()));
        }
        
else
        {
            var_iter
->second = ss.str();
        }
    }

    template
<class VarType>
    VarType GetVariable(
const std::string& sec,const std::string& var,VarType defval)const
    {
        std::
string sec_brac(BracketString(sec));
        std::stringstream ss;
        VarType ret(defval);
        Layout::const_iterator sec_iter;
        Section::const_iterator var_iter;
        sec_iter 
= std::find_if(layout.begin(),layout.end(),std::bind2nd(StrPairEq<NamedSection>(),sec_brac));
        
if(sec_iter != layout.end())
        {
            var_iter 
= std::find_if(sec_iter->second.begin(),sec_iter->second.end(),std::bind2nd(StrPairEq<Variable>(),var));
            
if(var_iter != sec_iter->second.end())
            {
                ss.str(var_iter
->second);
                ss 
>> ret;
            }
        }
        
return ret;
    }

    
////////////////////////////////////////////////////////
    
/// 獲取配置文件有多少個(gè)塊
    
////////////////////////////////////////////////////////
    uint GetSectionNumber(){return layout.size();}

    
////////////////////////////////////////////////////////
    
/// 檢索是否存在給定塊(塊,鍵)
    
////////////////////////////////////////////////////////
    bool HasSectionName(const std::string &section)
    {
        Layout::iterator sec_iter;
        sec_iter 
= std::find_if(layout.begin(),layout.end(),std::bind2nd(StrPairEq<NamedSection>(),section));
        
return (sec_iter != layout.end());
    }
    
bool HasKeyName(const std::string &section,const std::string &key)
    {
        
if(HasSectionName(section) == false)
            
return false;
        Layout::iterator sec_iter;
        sec_iter 
= std::find_if(layout.begin(),layout.end(),std::bind2nd(StrPairEq<NamedSection>(),section));
        Section::iterator var_iter 
= std::find_if(sec_iter->second.begin(),sec_iter->second.end(),std::bind2nd(StrPairEq<Variable>(),key));
        
return (var_iter != sec_iter->second.end());
    }
private:
    
static std::string CleanString(const std::string& str);
    
static std::string BracketString(const std::string& str);
private:
    Layout      layout;
    std::
string filename;
};

template
<class Pair>
bool ConfigFile::StrPairEq<Pair>::operator()(const Pair& lhs, const std::string& rhs)const
{
    
return ConfigFile::CleanString(lhs.first) == ConfigFile::CleanString(rhs);
}
4.FIleSYstem's Core
////////////////////////////////////////////////////////
/// 定義引擎文件系統(tǒng)
////////////////////////////////////////////////////////
class GAPI FileSystem
{
public:
    
////////////////////////////////////////////////////
    
/// 獲取工作目錄
    
////////////////////////////////////////////////////
    engine_string GetWorkDir()const;

    
////////////////////////////////////////////////////
    
/// 獲取用戶目錄
    
////////////////////////////////////////////////////
    engine_string GetUserDir()const;
public:
    
////////////////////////////////////////////////////
    
/// 注冊(cè),反注冊(cè)資源包文件
    
////////////////////////////////////////////////////
    bool RegisterPackage(const engine_string& package);
    
bool UnRegisterPackage(const engine_string& package);
    
////////////////////////////////////////////////////
    
/// 獲取文件系統(tǒng)注冊(cè)資源包列表
    
////////////////////////////////////////////////////
    void GetPackageList(std::vector<engine_string> &packages);
public:
    
////////////////////////////////////////////////////
    
/// 檢測(cè)給定目錄是否為文件目錄
    
////////////////////////////////////////////////////
    bool IsDirectory(const engine_string& dir);

    
////////////////////////////////////////////////////
    
/// 生成新的硬盤(pán)目錄
    
////////////////////////////////////////////////////
    bool CreateDirectory(const engine_string& dir);

    
////////////////////////////////////////////////////
    
/// 刪除一個(gè)文件或者一個(gè)目錄(如果是目錄必須確保它是空的)
    
////////////////////////////////////////////////////
    bool DeleteFile(const engine_string& file);

    
////////////////////////////////////////////////////
    
/// 檢測(cè)給定文件是否存在
    
////////////////////////////////////////////////////
    bool IsExist(const engine_string &filename);

    
////////////////////////////////////////////////////
    
/// 獲取給定文件夾下的文件列表(返回1為硬盤(pán)文件列表,0為資源包文件列表)
    
////////////////////////////////////////////////////
    short GetFileList(const engine_string& dir,std::vector<engine_string> &filelist);

    
////////////////////////////////////////////////////
    
/// 獲取給定文件后綴(比如main.cpp返回.cpp)
    
////////////////////////////////////////////////////
    engine_string GetFileExtension(const engine_string &file)const;

    
////////////////////////////////////////////////////////
    
///文件的創(chuàng)建
    
////////////////////////////////////////////////////////
    RefPtr<WriteFile> GetWrite(const engine_string& filename);

    
////////////////////////////////////////////////////////
    
///文件的打開(kāi)
    
////////////////////////////////////////////////////////
    RefPtr<ReadFile> GetRead(const engine_string& filename);
private:
    FileSystemImpl  
*impl;
    DEFINE_SINGLETON(FileSystem);
};

可以看出文件系統(tǒng)提供的功能有
獲取用戶目錄
獲取當(dāng)前程序目錄
設(shè)置資源包
獲取給定目錄下文件列表(資源包文件,硬盤(pán)文件)
以及打開(kāi)給定文件等
簡(jiǎn)單的測(cè)試?yán)尤缦?
    core::ConfigFile config;
    config.Open(
"gaimosoft.ini");
    config.SetVariable
<int>(std::string("block"),std::string("size"),1024);
    config.SetVariable
<double>(std::string("block"),std::string("rand"),0.32);
    config.SetVariable
<std::string>(std::string("name"),std::string("name"),std::string("gaimosoft"));
    
double rand = config.GetVariable(std::string("block"),std::string("rand"),-1.0f);
    std::
string name = config.GetVariable(std::string("name"),std::string("name"),std::string("mysoft"));
    std::cout
<<name<<std::endl;
    name 
= config.GetVariable(std::string("name"),std::string("address"),std::string("mysoft"));
    std::cout
<<name<<std::endl;
    config.Close();

    std::cout
<<GLOBAL_FILESYSTEM_PTR->RegisterPackage("font1.zip")<<endl;
    core::RefPtr
<core::ReadFile> file = GLOBAL_FILESYSTEM_PTR->GetRead("main.o");
    
if(file)
        std::cout
<<"file size is:"<<file->GetSize()<<std::endl;
    
else
        std::cout
<<"not find file"<<std::endl;
    file
->Drop();
    std::cout
<<GLOBAL_FILESYSTEM_PTR->DeleteFile("1.font")<<std::endl;
我一直在努力ing.
posted on 2010-08-21 16:26 ccsdu2009 閱讀(1621) 評(píng)論(2)  編輯 收藏 引用 所屬分類: Game引擎
Comments
 
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            免费一区视频| 亚洲欧洲综合另类| 欧美有码视频| 欧美一区二区在线| 欧美一区视频| 久久精品国产清高在天天线| 久久精品人人做人人综合| 久久另类ts人妖一区二区| 久久亚洲捆绑美女| 欧美黄色免费| 亚洲剧情一区二区| 亚洲一二区在线| 久久9热精品视频| 美女精品在线观看| 欧美日本精品| 国产欧美一区二区三区在线看蜜臀| 国产欧美日韩亚洲精品| 影音先锋成人资源站| 日韩视频免费观看高清在线视频 | 日韩小视频在线观看专区| 99精品欧美一区二区三区| 亚洲一区影院| 久久日韩粉嫩一区二区三区| 欧美激情免费观看| 一区二区三区欧美激情| 亚洲欧美日本国产有色| 香蕉久久夜色精品| 美女久久一区| 亚洲精品一区二| 亚洲一区www| 久久久在线视频| 欧美日韩一区二区视频在线 | 亚洲视频在线看| 久久超碰97人人做人人爱| 美女网站在线免费欧美精品| 欧美色图五月天| 红桃视频欧美| 亚洲午夜激情免费视频| 久久视频在线视频| 日韩午夜在线电影| 久久国产欧美精品| 欧美日韩在线看| 国外视频精品毛片| 亚洲网站视频| 久久嫩草精品久久久精品一| 亚洲区欧美区| 欧美专区在线| 欧美日韩在线视频观看| 国自产拍偷拍福利精品免费一| 一本大道久久a久久综合婷婷| 久久国产视频网站| 亚洲欧洲在线一区| 欧美专区福利在线| 国产精品二区三区四区| 91久久精品国产91性色| 久久精品免视看| 亚洲精品一区二区三区蜜桃久| 久久国产精品久久久久久久久久 | 老**午夜毛片一区二区三区| av成人天堂| 免费亚洲网站| 国产在线观看一区| 亚洲欧美成人网| 亚洲欧洲日韩在线| 久久久久久尹人网香蕉| 国产精品一卡二| 这里是久久伊人| 欧美高清一区| 久久国产欧美| 国产日韩亚洲欧美综合| 亚洲一区二区三区四区在线观看 | 亚洲精品一区二区三区蜜桃久| 久久乐国产精品| 国产亚洲美州欧州综合国| 亚洲欧美激情诱惑| 日韩五码在线| 欧美日本中文字幕| 亚洲日本中文字幕| 免费永久网站黄欧美| 久久精品91久久久久久再现| 国产精品一卡| 欧美一乱一性一交一视频| 一区二区三区日韩欧美精品| 欧美日韩1080p| 亚洲伦理精品| 亚洲国产日韩精品| 免费看av成人| 亚洲日本欧美| 亚洲国产裸拍裸体视频在线观看乱了| 久久久久久久国产| 影音先锋日韩精品| 免费人成精品欧美精品| 久久精品1区| 在线播放国产一区中文字幕剧情欧美 | 亚洲精品午夜| 欧美日韩色婷婷| 亚洲午夜电影网| 一区二区三区色| 国产精品久久久久国产a级| 亚洲一区二区三区四区在线观看| 99国产精品久久久久久久久久 | 久久免费视频观看| 久久精品亚洲一区二区| 在线精品观看| 欧美激情一区二区三区在线视频观看 | 欧美成人精品一区二区三区| 最新高清无码专区| 亚洲精品国精品久久99热| 欧美区日韩区| 亚洲——在线| 午夜精品久久久久久久久久久久 | 久热成人在线视频| 亚洲人成在线观看一区二区 | 欧美mv日韩mv国产网站| 免费欧美在线视频| 夜夜精品视频一区二区| 一本色道**综合亚洲精品蜜桃冫| 国产精品第三页| 久久久久久久久蜜桃| 久久综合国产精品台湾中文娱乐网| 亚洲第一色在线| 亚洲美女中文字幕| 国产精品一二三| 免费不卡视频| 欧美精品123区| 先锋资源久久| 看片网站欧美日韩| 亚洲视频在线一区| 性久久久久久久久久久久| 亚洲第一网站| 一道本一区二区| 国内精品久久久久影院色| 欧美国产亚洲另类动漫| 欧美色图天堂网| 久久亚洲捆绑美女| 欧美日韩免费高清一区色橹橹| 欧美怡红院视频一区二区三区| 久久综合五月| 亚洲一级免费视频| 久久久久久成人| 亚洲午夜国产成人av电影男同| 欧美一区二区视频观看视频| 亚洲区免费影片| 午夜精品视频网站| 亚洲麻豆国产自偷在线| 午夜精品久久久久久久99樱桃 | 欧美激情视频一区二区三区在线播放 | 裸体素人女欧美日韩| 亚洲欧美精品在线| 久久综合久久综合久久综合| 亚洲欧美日韩精品一区二区| 久久这里只有精品视频首页| 亚洲综合清纯丝袜自拍| 免费视频一区二区三区在线观看| 午夜久久久久久久久久一区二区| 免费观看久久久4p| 久久se精品一区二区| 欧美日韩国产不卡在线看| 久久综合色88| 国产精品视频你懂的| 亚洲国产日韩欧美综合久久| 国产在线观看91精品一区| 99re成人精品视频| 亚洲激情一区二区| 午夜亚洲性色视频| 亚洲五月婷婷| 欧美护士18xxxxhd| 久久―日本道色综合久久| 国产精品久久久久一区| 91久久精品国产91性色| 激情丁香综合| 午夜精品国产更新| 亚洲一区免费在线观看| 欧美国产另类| 欧美成人午夜剧场免费观看| 国产亚洲精品aa午夜观看| 一区二区三区视频观看| 一本久道久久综合婷婷鲸鱼| 欧美成人免费播放| 美女亚洲精品| 国内一区二区三区| 亚欧成人精品| 欧美一级欧美一级在线播放| 欧美日韩日日骚| 日韩视频一区二区三区在线播放免费观看| 欧美日韩一区二区国产| 亚洲人体1000| 亚洲伦理在线观看| 欧美不卡在线视频| 欧美第一黄色网| 在线欧美视频| 久久综合婷婷| 欧美国产一区二区在线观看| 在线观看日韩av| 久久精品理论片| 巨乳诱惑日韩免费av| 樱桃成人精品视频在线播放| 久久久99国产精品免费| 久热成人在线视频| 曰韩精品一区二区|