Utility library for MTS Socket Modem Arduino Shield devices from Multi-Tech Systems

Dependents:   mtsas mtsas thermostat_fan_demo--fan mtsas ... more

NOTE: MTS-Utils has moved to GitHub. This version will not be updated. For updates, go to the GitHub version.

Committer:
Mike Fiore
Date:
Mon May 19 10:26:34 2014 -0500
Revision:
2:7779ede60c3d
Child:
12:7818d55b35c6
add MTSText code and add test files for MTSLog and MTSText

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Mike Fiore 2:7779ede60c3d 1 #include "MTSText.h"
Mike Fiore 2:7779ede60c3d 2
Mike Fiore 2:7779ede60c3d 3 using namespace mts;
Mike Fiore 2:7779ede60c3d 4
Mike Fiore 2:7779ede60c3d 5 std::string Text::getLine(const std::string& source, const size_t& start, size_t& cursor) {
Mike Fiore 2:7779ede60c3d 6 char delimiters[2];
Mike Fiore 2:7779ede60c3d 7 delimiters[0] = '\n';
Mike Fiore 2:7779ede60c3d 8 delimiters[1] = '\r';
Mike Fiore 2:7779ede60c3d 9 size_t end = source.find_first_of(delimiters, start, 2);
Mike Fiore 2:7779ede60c3d 10 std::string line(source.substr(start, end - start));
Mike Fiore 2:7779ede60c3d 11 if (end < source.size()) {
Mike Fiore 2:7779ede60c3d 12 if (end < source.size() - 1)
Mike Fiore 2:7779ede60c3d 13 if ((source[end] == '\n' && source[end + 1] == '\r') || (source[end] == '\r' && source[end + 1] == '\n')) {
Mike Fiore 2:7779ede60c3d 14 //Advance an additional character in scenarios where lines end in \r\n or \n\r
Mike Fiore 2:7779ede60c3d 15 end++;
Mike Fiore 2:7779ede60c3d 16 }
Mike Fiore 2:7779ede60c3d 17 end++;
Mike Fiore 2:7779ede60c3d 18 }
Mike Fiore 2:7779ede60c3d 19 cursor = end;
Mike Fiore 2:7779ede60c3d 20 return line;
Mike Fiore 2:7779ede60c3d 21 }
Mike Fiore 2:7779ede60c3d 22
Mike Fiore 2:7779ede60c3d 23 std::vector<std::string> Text::split(const std::string& str, char delimiter, int limit) {
Mike Fiore 2:7779ede60c3d 24 return split(str, std::string(1, delimiter), limit);
Mike Fiore 2:7779ede60c3d 25 }
Mike Fiore 2:7779ede60c3d 26
Mike Fiore 2:7779ede60c3d 27 std::vector<std::string> Text::split(const std::string& str, const std::string& delimiter, int limit) {
Mike Fiore 2:7779ede60c3d 28 std::vector<std::string> result;
Mike Fiore 2:7779ede60c3d 29 if(str.size() == 0) {
Mike Fiore 2:7779ede60c3d 30 return result;
Mike Fiore 2:7779ede60c3d 31 }
Mike Fiore 2:7779ede60c3d 32 size_t start = 0;
Mike Fiore 2:7779ede60c3d 33 size_t end = str.find(delimiter, start);
Mike Fiore 2:7779ede60c3d 34 for (int i = 1; i < limit || (limit <= 0 && (end != std::string::npos)); ++i) {
Mike Fiore 2:7779ede60c3d 35 result.push_back(str.substr(start, end - start));
Mike Fiore 2:7779ede60c3d 36 start = end + delimiter.length();
Mike Fiore 2:7779ede60c3d 37 end = str.find(delimiter, start);
Mike Fiore 2:7779ede60c3d 38 }
Mike Fiore 2:7779ede60c3d 39 result.push_back(str.substr(start));
Mike Fiore 2:7779ede60c3d 40 return result;
Mike Fiore 2:7779ede60c3d 41 }
Mike Fiore 2:7779ede60c3d 42
Mike Fiore 2:7779ede60c3d 43 std::string Text::readString(char* index, int length)
Mike Fiore 2:7779ede60c3d 44 {
Mike Fiore 2:7779ede60c3d 45 std::string result = std::string(index, length);
Mike Fiore 2:7779ede60c3d 46 index += length;
Mike Fiore 2:7779ede60c3d 47 return result;
Mike Fiore 2:7779ede60c3d 48 }