• <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>

            Javen-Studio 咖啡小屋

            http://javenstudio.org - C++ Java 分布式 搜索引擎
            Naven's Research Laboratory - Thinking of Life, Imagination of Future

              C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
              24 隨筆 :: 57 文章 :: 170 評論 :: 4 Trackbacks
            //author Naven 2003 for both Win32 and Unix os

            class MyProperties {
            public:
                MyProperties();
                MyProperties(istream 
            &is); 
                MyProperties(
            const string &filename); 

                
            void load(const string &filename);
                unsigned 
            long size(); 
                string filename();
                string get(
            const string &name, const string &default_value); 
                
            void remove(const string &name); 
                
            void set(const string &name, const string &value); 
                
            void add(const string &name, const string &value); 
                string getName(
            const int &i);
                string getValue(
            const int &i);

                
            void save();
                
            void save(string &filename); 

            private:
                
            void init(istream &is); 

            private:
                string _file; 
                vector _vals, _elms; 
                unsigned 
            long _size; 

            }


            MyProperties::MyProperties()
            {
                _size 
            = 0;
            }


            MyProperties::MyProperties(istream 
            &is) 
            {
                _size 
            = 0;
                init(is); 
            }


            MyProperties::MyProperties(
            const string &filename) 
            {
                load(filename); 
            }


            void
            MyProperties::load(
            const string &filename) 
            {
                _elms.clear(); _vals.clear(); 
                _size 
            = 0
                
            if(filename.empty()) 
                    
            return
                ifstream is(filename.c_str()); 
                _file 
            = filename; 

                init(is); 
            }


            void 
            MyProperties::init(istream 
            &is) 
            {
                
            if(!is) return;
                
            char ln[LINE_SIZE+1], *pval; 
                _elms.clear(); _vals.clear(); 
                _size 
            = 0
                
            while(is.getline(ln, LINE_SIZE)) 
                    trimleft(ln); 
                    
            if(ln[0!= '#' && (pval = strchr(ln, '=')) != NULL) {
                        pval[
            0= 0; pval++
                        trimright(ln); trim(pval); 
                        
            if(ln[0!= 0 && pval[0!= 0
                            _elms.push_back(ln); 
                            _vals.push_back(pval);
                            _size 
            ++
                        }

                    }

                }

            }


            unsigned 
            long 
            MyProperties::size() 
            {
                
            return _size;
            }


            string
            MyProperties::filename()
            {
                
            return _file; 
            }


            string 
            MyProperties::getName(
            const int &i)
            {
                
            if(i >=0 && i<_elms.size()) 
                    
            return _elms[i];
                
            return "";
            }


            string 
            MyProperties::getValue(
            const int &i)
            {
                
            if(i >=0 && i<_vals.size()) 
                    
            return _vals[i];
                
            return "";
            }


            string
            MyProperties::get(
            const string &name, const string &default_value=""
            {
                
            if(name.empty()) 
                    
            return default_value; 
                vector::const_iterator elm_iter 
            = _elms.begin(), elm_end = _elms.end();
                vector::const_iterator val_iter 
            = _vals.begin(), val_end = _elms.end();
                
            while(elm_iter != elm_end && val_iter != val_end) {
                    
            if((*elm_iter) == name) 
                        
            return *val_iter; 
                    elm_iter 
            ++
                    val_iter 
            ++
                }

                
            return default_value; 
            }


            void
            MyProperties::remove(
            const string &name) 
            {
                
            if(name.empty()) return;
                vector::iterator elm_iter 
            = _elms.begin(), elm_end = _elms.end();
                vector::iterator val_iter 
            = _vals.begin(), val_end = _elms.end();
                
            while(elm_iter != elm_end && val_iter != val_end) {
                    
            if((*elm_iter) == name) {
                        _elms.erase(elm_iter); 
                        _vals.erase(val_iter); 
                        _size 
            --;
                    }
             
                    elm_iter 
            ++
                    val_iter 
            ++
                }

            }


            void
            MyProperties::set(
            const string &name, const string &value) 
            {
                
            if(name.empty()) return;
                vector::iterator elm_iter 
            = _elms.begin(), elm_end = _elms.end();
                vector::iterator val_iter 
            = _vals.begin(), val_end = _elms.end();
                
            while(elm_iter != elm_end && val_iter != val_end) {
                    
            if((*elm_iter) == name) 
                        
            *val_iter = value; 
                    elm_iter 
            ++
                    val_iter 
            ++
                }

            }


            void 
            MyProperties::add(
            const string &name, const string &value) 
            {
                
            if(name.empty()) return
                _elms.push_back(name); _vals.push_back(value); 
                _size 
            ++
            }


            void 
            MyProperties::save(string 
            &filename)
            {
                
            if(filename.empty()) 
                    
            return;
                ifstream is(filename.c_str()); 
                
            if(!is) return
                
                
            char ln[LINE_SIZE+1], *pval; 
                ostrstream sbuf; string str, str2; bool exist_flag;
                vector vec; 

                
            while(is.getline(ln, LINE_SIZE)) 
                    str 
            = ln; trimleft(ln); exist_flag = false;
                    
            if(ln[0!= '#' && (pval = strchr(ln, '=')) != NULL) {
                        pval[
            0= 0; trimright(ln); 
                        
            if(ln[0!= 0 && !(str2=get(ln)).empty()) {
                            sbuf 
            << ln << "=" << str2 << endl;
                            vec.push_back(ln); 
                            exist_flag 
            = true
                        }

                    }

                    
            if(exist_flag == false
                        sbuf 
            << str << endl; 
                }


                vector::iterator elm_iter 
            = _elms.begin(), elm_end = _elms.end();
                vector::iterator val_iter 
            = _vals.begin(), val_end = _elms.end();
                vector::iterator vec_iter, vec_end 
            = vec.end();
                
            while(elm_iter != elm_end && val_iter != val_end) {
                    vec_iter 
            = vec.begin(); exist_flag = false;
                    
            while(vec_iter != vec_end) {
                        
            if((*vec_iter) == (*elm_iter)) {
                            exist_flag 
            = truebreak
                        }
             
                        vec_iter 
            ++
                    }
             
                    
            if(exist_flag == false
                        sbuf 
            << *elm_iter << "=" << *val_iter << endl; 
                    elm_iter 
            ++; val_iter ++
                }
             
                sbuf 
            << ends;
                
                ofstream os(filename.c_str()); 
                
            if(os) os << sbuf.str();
            }


            void 
            MyProperties::save()
            {
                save(_file);
            }


            /* trim the space and tab at left */
            char*
            trimleft( 
            char *s )
            {
                register 
            int i=0int sl=0;
                
            char *sc =0;

                
            if( s == NULL || s[0== 0 ) return NULL;
                sl 
            = strlen( s );

                
            /* trim space and tab char at the left */
                
            for( i=0; i s )
                
            {
                    sl 
            = strlen(sc);
                    
            for( i=0; i=0; i-- )
                
            {
                    
            /* 32 is space, 9 is tab */
                    
            if( s[i] == 32 || s[i] == 9 )
                        s[i] 
            = 0;
                    
            else
                        
            break;
                }

                
            return s;
            }


            /* trim space and tab at left and right */
            char*
            trim( 
            char *s )
            {
                
            if( s == NULL || s[0== 0 ) return NULL;

                trimright( s );
                trimleft( s );

                
            return s;
            }


            posted on 2005-10-03 11:45 Javen-Studio 閱讀(374) 評論(0)  編輯 收藏 引用
            人人狠狠综合88综合久久| 欧美一区二区精品久久| 精品综合久久久久久88小说| 亚洲AV无码一区东京热久久| 亚洲成av人片不卡无码久久| 性做久久久久久久久久久| 久久国产成人| 一本色综合久久| 日产精品久久久久久久| 久久午夜福利无码1000合集| 99精品久久久久久久婷婷| 色综合久久夜色精品国产| 7777精品伊人久久久大香线蕉| 久久毛片一区二区| 亚洲精品午夜国产VA久久成人 | 麻豆AV一区二区三区久久| 久久久噜噜噜久久中文字幕色伊伊| 9191精品国产免费久久 | 1000部精品久久久久久久久| 久久久久无码精品国产| 国产精品久久久亚洲| 国产成人久久精品麻豆一区| 久久影院午夜理论片无码| 久久综合鬼色88久久精品综合自在自线噜噜 | 久久亚洲国产精品123区| 久久一区二区三区免费| 国产精品久久久久久久久软件| 久久人人爽人人澡人人高潮AV| 热久久国产欧美一区二区精品| 亚洲乱码中文字幕久久孕妇黑人 | 香港aa三级久久三级老师2021国产三级精品三级在 | 97精品久久天干天天天按摩| 久久精品国产91久久麻豆自制| 亚洲国产成人久久综合碰碰动漫3d | 久久久久久久久久久久中文字幕| 天堂久久天堂AV色综合| 国产亚洲色婷婷久久99精品91 | 久久久精品午夜免费不卡| 人妻系列无码专区久久五月天| 日韩精品久久久久久免费| 久久夜色撩人精品国产小说|