• <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)  編輯 收藏 引用
            精品少妇人妻av无码久久| 国产精品久久久久蜜芽| 新狼窝色AV性久久久久久| 欧美亚洲国产精品久久久久| 三级三级久久三级久久| 老色鬼久久亚洲AV综合| 国产精品99久久久久久人| 精品久久久久久久久久中文字幕 | 欧美精品国产综合久久| 伊人久久综合热线大杳蕉下载| 久久这里只有精品久久| 日韩精品无码久久一区二区三| 久久亚洲欧洲国产综合| 亚洲精品无码久久久影院相关影片| 99久久婷婷国产综合亚洲| 激情五月综合综合久久69| 久久精品国产色蜜蜜麻豆| 亚洲国产精品无码久久久不卡| 久久久国产精华液| 精品久久久久久无码专区不卡| 久久精品国产国产精品四凭| 亚洲第一极品精品无码久久| 狠狠精品久久久无码中文字幕| 久久久久亚洲av无码专区喷水| 国产精品gz久久久| 思思久久99热只有频精品66| 99久久精品免费看国产| 99久久精品国产一区二区三区| 久久人人爽人人爽人人片AV不| 久久人人爽人人爽人人片AV麻豆| 97精品依人久久久大香线蕉97| 天天爽天天爽天天片a久久网| 久久人妻AV中文字幕| 国产高潮国产高潮久久久| 亚洲AV伊人久久青青草原| 国产亚洲精午夜久久久久久| 欧美一区二区精品久久| 精品久久久久久中文字幕| 久久久久女人精品毛片| 无码久久精品国产亚洲Av影片 | 77777亚洲午夜久久多喷|