source: nscp/include/charEx.h @ c4f6204

0.4.00.4.10.4.2stable
Last change on this file since c4f6204 was c4f6204, checked in by Michael Medin <michael@…>, 8 years ago
  • Fixed NSClientListener return codes for basic commands
  • Extracted arrayBuffer code into new files under /include
  • Minor tweaks in the API (fixed minor issues) + Added some basic "tests" to a few commands (getToken, and arrayBuffer related)
  • Property mode set to 100644
File size: 1.9 KB
Line 
1#pragma once
2#include <assert.h>
3
4namespace charEx {
5        /**
6         * Function to split a char buffer into a list<string>
7         * @param buffer A char buffer to iterate over.
8         * @param split The char to split by
9         * @return a list with strings
10         */
11        inline std::list<std::string> split(const char* buffer, char split) {
12                std::list<std::string> ret;
13                const char *start = buffer;
14                for (const char *p = buffer;*p!='\0';p++) {
15                        if (*p==split) {
16                                std::string str(start, p-start);
17                                ret.push_back(str);
18                                start = p+1;
19                        }
20                }
21                ret.push_back(std::string(start));
22                return ret;
23        }
24
25
26
27        typedef std::pair<std::string,char*> token;
28        inline token getToken(char *buffer, char split) {
29                assert(buffer != NULL);
30                char *p = strchr(buffer, split);
31                if (!p)
32                        return token(buffer, NULL);
33                if (!p[1])
34                        return token(std::string(buffer, p-buffer), NULL);
35                p++;
36                return token(std::string(buffer, p-buffer-1), p);
37        }
38#ifdef _DEBUG
39        inline void test_getToken(char* in1, char in2, std::string out1, char * out2) {
40                token t = getToken(in1, in2);
41                std::cout << "charEx::test_getToken(" << in1 << ", " << in2 << ") : ";
42                if (t.first == out1)  {
43                        if ((t.second == NULL) && (out2 == NULL))
44                                std::cout << "Succeeded" << std::endl;
45                        else if (t.second == NULL)
46                                std::cout << "Failed [NULL=" << out2 << "]" << std::endl;
47                        else if (out2 == NULL)
48                                std::cout << "Failed [" << t.second << "=NULL]" << std::endl;
49                        else if (strcmp(t.second, out2) == 0)
50                                std::cout << "Succeeded" << std::endl;
51                        else
52                                std::cout << "Failed" << std::endl;
53                } else
54                        std::cout << "Failed [" << out1 << "=" << t.first << "]" << std::endl;
55        }
56        inline void run_test_getToken() {
57                test_getToken("", '&', "", NULL);
58                test_getToken("&", '&', "", NULL);
59                test_getToken("&&", '&', "", "&");
60                test_getToken("foo", '&', "foo", NULL);
61                test_getToken("foo&", '&', "foo", NULL);
62                test_getToken("foo&bar", '&', "foo", "bar");
63                test_getToken("foo&bar&test", '&', "foo", "bar&test");
64        }
65#endif
66
67};
Note: See TracBrowser for help on using the repository browser.