source: lsf/trunk/fuentes/src/utils.cpp @ 88

Last change on this file since 88 was 88, checked in by jrpelegrina, 5 years ago

First relase to xenial

File size: 1.8 KB
Line 
1
2#include <lsf-1.0/utils.hpp>
3#include <string>
4#include <vector>
5
6#include <regex.h>
7
8
9using namespace net::lliurex::utils;
10using namespace std;
11
12
13vector<string> str::Split(string s,char split)
14{
15        vector<string>stack;
16        string tmp;
17        bool start=false;
18               
19        for(int n=0;n<s.length();n++)
20        {
21                if(s[n]==split)
22                {
23                        if(start==true)
24                        {
25                                stack.push_back(tmp);
26                                tmp="";
27                                start=false;
28                        }
29                }
30                else
31                {
32                        start=true;
33                        tmp=tmp+s[n];
34                }
35        }
36       
37        return stack;
38}
39
40string str::Strip(string s)
41{
42       
43       
44        int start=0;
45        int end=s.length();
46       
47        for(int n=0;n<s.length();n++)
48        {
49                if(s[n]!=' ' && s[n]!='\n' && s[n]!='\t')
50                {
51                        start=n;
52                        break;
53                }
54        }
55       
56        for(int n=s.length()-1;n>=0;n--)
57        {
58                if(s[n]!=' ' && s[n]!='\n' && s[n]!='\t')
59                {
60                        end=n;
61                        break;
62                }
63        }
64       
65        return s.substr(start,end-1);
66}
67
68string str::Replace(string s,string match,string replace)
69{
70        int m=0;
71               
72        vector<int> pairs;
73       
74        for(int n=0;n<s.length();n++)
75        {
76                if(s[n]==match[m])m++;
77                        else m=0;
78                       
79                if(m==match.length())
80                        {
81                                int p;
82                                p=n-m;
83                                p=p | (m<<16);
84                                pairs.push_back(p);
85                        }
86        }
87       
88        for(int n=0;n<pairs.size();n++)
89        {
90                int pos = 0x0000FFFF & pairs[n];
91                int len = (0xFFFF0000 & pairs[n])>>16;
92                s.replace(pos+1,len,replace);
93        }
94       
95        return s;
96}
97
98bool parse::Match(string s,string pattern)
99{
100        int    status;
101    regex_t    re;
102
103    if (regcomp(&re, pattern.c_str(), REG_EXTENDED|REG_NOSUB) != 0)
104    {
105                /* throw exception, maybe? */
106                return false; 
107    }
108   
109    status = regexec(&re, s.c_str(), (size_t) 0, NULL, 0);
110    regfree(&re);
111    if (status != 0) {
112        return false;     
113    }
114    return true;
115}
116
117bool parse::IsInteger(string s)
118{
119        return parse::Match(s,"^[-+]?[0-9]+$");
120}
121
122bool parse::IsFloat(string s)
123{
124        /* there is room for improvement */
125        return parse::Match(s,"^[-+]?[0-9]+\\.[0-9]+$");
126}
Note: See TracBrowser for help on using the repository browser.