亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? entitydatabase.h

?? MUD游戲編程光盤代碼
?? H
字號(hào):
// MUD Programming
// Ron Penton
// (C)2003
// EntityDatabase.h - A generic class that will store Entity objects by their ID
//                    and will allow searching for those items.
// 
// 

#ifndef SIMPLEMUDENTITYDATABASE_H
#define SIMPLEMUDENTITYDATABASE_H


#include <string>
#include <map>
#include <vector>
#include <fstream>
#include <iterator>
#include "Entity.h"

using std::istream;
using std::ostream; 


namespace SimpleMUD
{


template< class datatype >
class EntityDatabase
{
public:

    typedef std::map<entityid, datatype> container;

    // --------------------------------------------------------------------
    //  The inner iterator class, used to iterate through the database.
    // --------------------------------------------------------------------
    class iterator : public container::iterator
    {
    public:

        // --------------------------------------------------------------------
        // NOTE: the constructors are needed as a result of VC6 sucking.
        // Have I mentioned that VC6 sucks yet?
        // --------------------------------------------------------------------
        iterator() {};  // default constructor
        iterator( const container::iterator& p_itr ) // copy constructor
        {
            container::iterator& itr = *this; // also needed because VC6 sucks
            itr = p_itr;
        }

        // --------------------------------------------------------------------
        //  "dereferences" the iterator to return a reference to the
        //  object that it points to.
        // --------------------------------------------------------------------
        inline datatype& operator*()
        {
            container::iterator& itr = *this; // also needed because VC6 sucks
            return itr->second;
        }

        // --------------------------------------------------------------------
        //  the "pointer-to-member" operator, which will allow you to use it on
        //  iterators like this: itr->Function();
        // --------------------------------------------------------------------
        inline datatype* operator->()
        {
            container::iterator& itr = *this; // also needed because VC6 sucks
            return &(itr->second);
        }
    };  // end iterator inner class


    // --------------------------------------------------------------------
    //  returns an iterator pointing to the first item
    // --------------------------------------------------------------------
    inline static iterator begin()
    {
        return iterator( m_map.begin() );
    }

    // --------------------------------------------------------------------
    //  returns the "invalid" iterator, the iterator that points one 
    //  past the end of the DB. Used for comparisons.
    // --------------------------------------------------------------------
    inline static iterator end()
    {
        return iterator( m_map.end() );
    }

    // --------------------------------------------------------------------
    //  finds entity based in ID
    // --------------------------------------------------------------------
    inline static iterator find( entityid p_id )
    {
        return iterator( m_map.find( p_id ) );
    }

    // --------------------------------------------------------------------
    //  finds entity matching name exactly
    // --------------------------------------------------------------------
    static iterator findfull( const std::string& p_name )
    {
        return std::find_if( begin(), end(), matchentityfull( p_name ) );
    }

    // --------------------------------------------------------------------
    //  finds entity matching name partially
    // --------------------------------------------------------------------
    static iterator find( const std::string& p_name )
    {
        return BasicLib::double_find_if( begin(), end(), 
            matchentityfull( p_name ),
            matchentity( p_name ) );
    }

    // --------------------------------------------------------------------
    //  gets an item based on ID.
    // --------------------------------------------------------------------
    inline static datatype& get( entityid p_id )
    {
        iterator itr = find( p_id );
        if( itr == end() )
            throw std::exception();

        return *itr;
    }


    inline static bool has( entityid p_id )
    {
        return ( m_map.find( p_id ) != m_map.end() );
    }

    inline static bool hasfull( std::string p_name )
    {
        return findfull( p_name ) != end();
    }

    inline static bool has( std::string p_name )
    {
        return find( p_name ) != end();
    }

    inline static size_t size() { return m_map.size(); }


    static entityid FindOpenID()
    {
        if( m_map.size() == 0 )
            return 1;

        if( m_map.size() == m_map.rend()->first )
            return m_map.size() + 1;

        entityid openid = 0;
        entityid previous = 0;
        std::map<entityid,datatype>::iterator itr = m_map.begin();

        while( !openid )
        {
            if( itr->first != previous + 1 )
                openid = previous + 1;
            else
                previous = itr->first;
            ++itr;
        }

        return openid;
    }

protected:
    static std::map<entityid, datatype> m_map;

};  // end class EntityDatabase



template< typename datatype >
class EntityDatabaseVector
{
public:

    // internal iterator
    typedef std::vector<datatype>::iterator iterator;

    inline static iterator begin()  { return m_vector.begin() + 1; }
    inline static iterator end()    { return m_vector.end(); }
    inline static size_t size()     { return m_vector.size() - 1; }

    // --------------------------------------------------------------------
    //  gets an enemy based on ID.
    // --------------------------------------------------------------------
    inline static datatype& get( entityid p_id )
    {
        if( p_id >= m_vector.size() || p_id == 0 )
            throw std::exception();
        return m_vector[p_id];
    }


protected:
    static std::vector<datatype> m_vector;

};  // end class EntityDatabaseVector




}   // end namespace SimpleMUD

#endif

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久99国产精品成人| 国产不卡视频在线播放| 精品一区二区三区久久久| 成人综合婷婷国产精品久久| 欧美日韩国产美| 亚洲欧洲国产专区| 国产毛片精品视频| 91麻豆精品国产91久久久资源速度| 国产欧美一区二区在线观看| 美女脱光内衣内裤视频久久影院| 91老师片黄在线观看| 久久婷婷国产综合国色天香| 偷窥国产亚洲免费视频| 99re6这里只有精品视频在线观看| 精品国产制服丝袜高跟| 日本成人中文字幕在线视频| 欧美天堂一区二区三区| 亚洲乱码国产乱码精品精的特点 | 国产在线一区观看| 91精品国产品国语在线不卡| 亚洲一区免费在线观看| 91天堂素人约啪| 国产精品美日韩| 丁香婷婷综合网| 国产欧美一区二区三区网站| 国产一区二区三区久久久| 日韩美一区二区三区| 蜜臀久久99精品久久久久宅男 | 国产午夜精品福利| 免费看欧美女人艹b| 这里只有精品99re| 日本亚洲视频在线| 欧美成人乱码一区二区三区| 伦理电影国产精品| 久久综合网色—综合色88| 国产在线精品一区在线观看麻豆| 日韩久久久精品| 激情丁香综合五月| 国产日韩综合av| 成人午夜电影小说| 国产精品久99| 日本丰满少妇一区二区三区| 艳妇臀荡乳欲伦亚洲一区| 欧美亚洲综合久久| 日本强好片久久久久久aaa| 欧美成人女星排名| 丁香婷婷综合色啪| 亚洲视频在线观看三级| 在线欧美日韩精品| 秋霞电影网一区二区| 精品美女在线观看| 不卡电影免费在线播放一区| 一区二区三区四区不卡视频| 欧美日韩在线综合| 狠狠色丁香婷婷综合久久片| 一色屋精品亚洲香蕉网站| 欧洲国产伦久久久久久久| 免费观看成人鲁鲁鲁鲁鲁视频| 欧美精品一区二区精品网| 成人精品鲁一区一区二区| 亚洲一区二区三区四区在线| 欧美精品 日韩| 国产精品一区久久久久| 亚洲乱码国产乱码精品精98午夜| 欧美另类变人与禽xxxxx| 激情综合网最新| 亚洲另类在线一区| 精品入口麻豆88视频| jizzjizzjizz欧美| 免费观看在线色综合| 亚洲日本在线a| 欧美sm极限捆绑bd| 91极品美女在线| 国产乱码精品一区二区三区五月婷| 亚洲人成伊人成综合网小说| 日韩三级视频中文字幕| 色婷婷久久久久swag精品| 精品在线免费观看| 亚洲自拍偷拍九九九| 欧美激情一区二区三区全黄| 欧美精品黑人性xxxx| 99re这里只有精品首页| 精品一区二区在线播放| 亚洲自拍偷拍图区| 亚洲欧洲精品一区二区三区| 精品福利一区二区三区| 欧美日韩一级二级| 色综合久久久久久久久久久| 国产精品白丝jk白祙喷水网站| 香蕉av福利精品导航| 国产精品成人午夜| 久久久久亚洲综合| 日韩一卡二卡三卡四卡| 91久久精品一区二区二区| 成人免费观看视频| 国产剧情一区二区三区| 美腿丝袜一区二区三区| 亚洲国产综合色| 亚洲午夜精品久久久久久久久| 国产精品卡一卡二卡三| 久久久久久久久久电影| 精品国精品自拍自在线| 日韩欧美成人一区| 日韩欧美久久一区| 日韩欧美不卡一区| 精品卡一卡二卡三卡四在线| 日韩视频在线观看一区二区| 欧美一区二区三区免费大片 | 一本色道久久加勒比精品 | 国产一区二区看久久| 精品一区二区三区视频| 美国三级日本三级久久99| 午夜精品久久久久久久99水蜜桃| 亚洲综合999| 五月天激情小说综合| 午夜久久久久久久久| 亚洲成人动漫在线免费观看| 亚洲一卡二卡三卡四卡无卡久久| 一区二区三区免费| 亚洲国产成人tv| 日韩精品一二三四| 日本怡春院一区二区| 毛片av中文字幕一区二区| 天天综合天天做天天综合| 日韩中文字幕麻豆| 久久99国内精品| 久久激情综合网| 91视频www| 成人av在线影院| 色综合色狠狠综合色| 色综合久久综合| 亚洲午夜影视影院在线观看| 欧美日韩一二区| 91免费观看在线| 成人激情校园春色| 国产乱码字幕精品高清av | 日韩视频一区二区在线观看| 在线亚洲+欧美+日本专区| 国产成a人亚洲精品| 久久精品噜噜噜成人88aⅴ| 一区二区免费在线播放| 国产精品乱人伦| 久久精品欧美日韩| 精品乱人伦小说| 欧美va日韩va| 精品国产一区二区三区不卡| 8x8x8国产精品| 欧美老年两性高潮| 欧美二区乱c少妇| 欧美美女直播网站| 欧美少妇bbb| 欧美日韩免费在线视频| 色88888久久久久久影院野外| 色综合中文综合网| 综合久久国产九一剧情麻豆| 国产日韩三级在线| 国产精品乱人伦中文| 日韩一区日韩二区| 亚洲色图19p| 亚洲国产日日夜夜| 日韩高清中文字幕一区| 蜜臀久久久久久久| 国产综合色视频| 播五月开心婷婷综合| 在线免费视频一区二区| 欧美男人的天堂一二区| 精品国产乱码久久久久久闺蜜| 欧美成人精品1314www| 国产午夜精品一区二区三区四区| 久久久99免费| 综合婷婷亚洲小说| 亚洲大片一区二区三区| 免费观看91视频大全| 国产99精品视频| 在线观看视频91| 日韩欧美在线不卡| 国产拍揄自揄精品视频麻豆| 亚洲精品网站在线观看| 婷婷久久综合九色国产成人| 国产自产2019最新不卡| 91免费在线看| 精品国产一区二区在线观看| 亚洲欧洲三级电影| 性做久久久久久免费观看欧美| 国产一区二区三区在线观看免费| 99视频有精品| 日韩欧美视频在线| 亚洲丝袜自拍清纯另类| 日本亚洲最大的色成网站www| 国产精品2024| 欧美在线999| 中文在线一区二区| 青青青爽久久午夜综合久久午夜| 岛国精品一区二区| 日韩一区二区三区视频在线| 国产精品成人在线观看| 久久国产日韩欧美精品| 在线日韩国产精品| 国产精品看片你懂得| 精品一区二区三区免费观看|