arduino_ci 0.1.5 → 0.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/cpp/arduino/Arduino.h +0 -77
- data/cpp/arduino/ArduinoDefines.h +2 -0
- data/cpp/arduino/PinHistory.h +1 -1
- data/cpp/arduino/Print.h +23 -22
- data/cpp/arduino/SoftwareSerial.h +5 -2
- data/cpp/arduino/WString.h +117 -121
- data/cpp/arduino/WString.h.orig +172 -0
- data/cpp/arduino/avr/pgmspace.h +45 -45
- data/cpp/arduino/avr/pgmspace.h.orig +95 -0
- data/cpp/arduino/ci/Queue.h +2 -2
- data/cpp/unittest/ArduinoUnitTests.h +2 -2
- data/cpp/unittest/Compare.h +557 -78
- data/exe/arduino_ci_remote.rb +27 -7
- data/lib/arduino_ci/arduino_cmd.rb +19 -18
- data/lib/arduino_ci/arduino_cmd_linux.rb +9 -2
- data/lib/arduino_ci/arduino_cmd_linux_builder.rb +9 -4
- data/lib/arduino_ci/arduino_cmd_osx.rb +9 -2
- data/lib/arduino_ci/ci_config.rb +2 -0
- data/lib/arduino_ci/cpp_library.rb +12 -15
- data/lib/arduino_ci/cpp_library.rb.orig +215 -0
- data/lib/arduino_ci/display_manager.rb +12 -8
- data/lib/arduino_ci/host.rb +7 -2
- data/lib/arduino_ci/version.rb +1 -1
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 81bed39a97b584fc45ff028f60c9eeb50e24e929123e3af0ca9e6db48ffc5d1a
|
4
|
+
data.tar.gz: 4ee99e35584eaa5db713d80149b1ce7bead47f8e3ac74d1016e82fdb11f1b1c0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 64286125ad20ef12fda79a938d29f44d20751db0716144149a660afb350da73f08ef0b1d0494b1d472cac6d50d2cbdc48ce1e4697736f509fbc036adbb724ac1
|
7
|
+
data.tar.gz: 40620b0806a64191b00c84bdf86f546dd131a5cafdda8cc6da23e9cbd64235f88fa2b7aa9d580d5c05cb47da3f93dd0961f86a18dff344d68de7b7f428a673be
|
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
[](https://rubygems.org/gems/arduino_ci)
|
2
2
|
[](https://travis-ci.org/ifreecarve/arduino_ci)
|
3
|
-
[](http://www.rubydoc.info/gems/arduino_ci/0.1.
|
3
|
+
[](http://www.rubydoc.info/gems/arduino_ci/0.1.6)
|
4
4
|
|
5
5
|
# ArduinoCI Ruby gem (`arduino_ci`)
|
6
6
|
|
data/cpp/arduino/Arduino.h
CHANGED
@@ -59,14 +59,6 @@ typedef unsigned int word;
|
|
59
59
|
|
60
60
|
|
61
61
|
|
62
|
-
/*
|
63
|
-
unsigned long pulseIn(uint8_t pin, uint8_t state, unsigned long timeout);
|
64
|
-
unsigned long pulseInLong(uint8_t pin, uint8_t state, unsigned long timeout);
|
65
|
-
|
66
|
-
void shiftOut(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder, uint8_t val);
|
67
|
-
uint8_t shiftIn(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder);
|
68
|
-
|
69
|
-
*/
|
70
62
|
|
71
63
|
// Get the bit location within the hardware port of the given virtual pin.
|
72
64
|
// This comes from the pins_*.c file for the active board configuration.
|
@@ -74,40 +66,6 @@ uint8_t shiftIn(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder);
|
|
74
66
|
#define analogInPinToBit(P) (P)
|
75
67
|
#define digitalPinToInterrupt(P) (P)
|
76
68
|
|
77
|
-
/*
|
78
|
-
// On the ATmega1280, the addresses of some of the port registers are
|
79
|
-
// greater than 255, so we can't store them in uint8_t's.
|
80
|
-
extern const uint16_t PROGMEM port_to_mode_PGM[];
|
81
|
-
extern const uint16_t PROGMEM port_to_input_PGM[];
|
82
|
-
extern const uint16_t PROGMEM port_to_output_PGM[];
|
83
|
-
|
84
|
-
extern const uint8_t PROGMEM digital_pin_to_port_PGM[];
|
85
|
-
// extern const uint8_t PROGMEM digital_pin_to_bit_PGM[];
|
86
|
-
extern const uint8_t PROGMEM digital_pin_to_bit_mask_PGM[];
|
87
|
-
extern const uint8_t PROGMEM digital_pin_to_timer_PGM[];
|
88
|
-
|
89
|
-
// Get the bit location within the hardware port of the given virtual pin.
|
90
|
-
// This comes from the pins_*.c file for the active board configuration.
|
91
|
-
//
|
92
|
-
// These perform slightly better as macros compared to inline functions
|
93
|
-
//
|
94
|
-
#define digitalPinToPort(P) ( pgm_read_byte( digital_pin_to_port_PGM + (P) ) )
|
95
|
-
#define digitalPinToBitMask(P) ( pgm_read_byte( digital_pin_to_bit_mask_PGM + (P) ) )
|
96
|
-
#define digitalPinToTimer(P) ( pgm_read_byte( digital_pin_to_timer_PGM + (P) ) )
|
97
|
-
#define analogInPinToBit(P) (P)
|
98
|
-
#define portOutputRegister(P) ( (volatile uint8_t *)( pgm_read_word( port_to_output_PGM + (P))) )
|
99
|
-
#define portInputRegister(P) ( (volatile uint8_t *)( pgm_read_word( port_to_input_PGM + (P))) )
|
100
|
-
#define portModeRegister(P) ( (volatile uint8_t *)( pgm_read_word( port_to_mode_PGM + (P))) )
|
101
|
-
|
102
|
-
*/
|
103
|
-
|
104
|
-
|
105
|
-
/* TODO
|
106
|
-
#include "WString.h"
|
107
|
-
#include "HardwareSerial.h"
|
108
|
-
#include "USBAPI.h"
|
109
|
-
*/
|
110
|
-
|
111
69
|
// uint16_t makeWord(uint16_t w);
|
112
70
|
// uint16_t makeWord(byte h, byte l);
|
113
71
|
inline unsigned int makeWord(unsigned int w) { return w; }
|
@@ -115,41 +73,6 @@ inline unsigned int makeWord(unsigned char h, unsigned char l) { return (h << 8)
|
|
115
73
|
|
116
74
|
#define word(...) makeWord(__VA_ARGS__)
|
117
75
|
|
118
|
-
unsigned long pulseIn(uint8_t pin, uint8_t state, unsigned long timeout = 1000000L);
|
119
|
-
unsigned long pulseInLong(uint8_t pin, uint8_t state, unsigned long timeout = 1000000L);
|
120
|
-
|
121
|
-
void tone(uint8_t _pin, unsigned int frequency, unsigned long duration = 0);
|
122
|
-
void noTone(uint8_t _pin);
|
123
|
-
|
124
|
-
|
125
|
-
// BIG TODO ON THIS ONE
|
126
|
-
// $ find . | grep pins_
|
127
|
-
// ./arduino-1.8.5/hardware/arduino/avr/variants/circuitplay32u4/pins_arduino.h
|
128
|
-
// ./arduino-1.8.5/hardware/arduino/avr/variants/eightanaloginputs/pins_arduino.h
|
129
|
-
// ./arduino-1.8.5/hardware/arduino/avr/variants/ethernet/pins_arduino.h
|
130
|
-
// ./arduino-1.8.5/hardware/arduino/avr/variants/gemma/pins_arduino.h
|
131
|
-
// ./arduino-1.8.5/hardware/arduino/avr/variants/leonardo/pins_arduino.h
|
132
|
-
// ./arduino-1.8.5/hardware/arduino/avr/variants/mega/pins_arduino.h
|
133
|
-
// ./arduino-1.8.5/hardware/arduino/avr/variants/micro/pins_arduino.h
|
134
|
-
// ./arduino-1.8.5/hardware/arduino/avr/variants/robot_control/pins_arduino.h
|
135
|
-
// ./arduino-1.8.5/hardware/arduino/avr/variants/robot_motor/pins_arduino.h
|
136
|
-
// ./arduino-1.8.5/hardware/arduino/avr/variants/standard/pins_arduino.h
|
137
|
-
// ./arduino-1.8.5/hardware/arduino/avr/variants/yun/pins_arduino.h
|
138
|
-
// #include "pins_arduino.h"
|
139
|
-
|
140
76
|
|
141
77
|
|
142
|
-
/*
|
143
|
-
|
144
|
-
|
145
|
-
// Communication
|
146
|
-
serial
|
147
|
-
stream
|
148
|
-
|
149
|
-
// USB
|
150
|
-
Keyboard
|
151
|
-
Mouse
|
152
|
-
|
153
|
-
*/
|
154
|
-
|
155
78
|
|
data/cpp/arduino/PinHistory.h
CHANGED
@@ -86,7 +86,7 @@ class PinHistory : public ObservableDataStream {
|
|
86
86
|
// this sets the value of the pin authoritatively
|
87
87
|
// so if there was a queue, dump it.
|
88
88
|
// the actual "set" operation doesn't happen until the next read
|
89
|
-
|
89
|
+
T operator=(const T& i) {
|
90
90
|
qIn.clear();
|
91
91
|
qOut.push(i);
|
92
92
|
advertiseBit(qOut.back()); // not valid for all possible types but whatever
|
data/cpp/arduino/Print.h
CHANGED
@@ -32,7 +32,6 @@ class Print
|
|
32
32
|
virtual size_t write(uint8_t) = 0;
|
33
33
|
size_t write(const char *str) { return str == NULL ? 0 : write((const uint8_t *)str, String(str).length()); }
|
34
34
|
|
35
|
-
size_t write(const __FlashStringHelper *str) { return write((const char *)str); }
|
36
35
|
|
37
36
|
virtual size_t write(const uint8_t *buffer, size_t size) {
|
38
37
|
size_t n;
|
@@ -41,28 +40,30 @@ class Print
|
|
41
40
|
}
|
42
41
|
size_t write(const char *buffer, size_t size) { return write((const uint8_t *)buffer, size); }
|
43
42
|
|
44
|
-
size_t print(const String &s)
|
45
|
-
size_t print(const
|
46
|
-
size_t print(char
|
47
|
-
size_t print(
|
48
|
-
size_t print(
|
49
|
-
size_t print(
|
50
|
-
size_t print(
|
51
|
-
size_t print(
|
52
|
-
size_t print(
|
53
|
-
size_t print(
|
43
|
+
size_t print(const String &s) { return write(s.c_str(), s.length()); }
|
44
|
+
size_t print(const __FlashStringHelper *str) { return print(reinterpret_cast<PGM_P>(str)); }
|
45
|
+
size_t print(const char* str) { return print(String(str)); }
|
46
|
+
size_t print(char c) { return print(String(c)); }
|
47
|
+
size_t print(unsigned char b, int base) { return print(String(b, base)); }
|
48
|
+
size_t print(int n, int base) { return print(String(n, base)); }
|
49
|
+
size_t print(unsigned int n, int base) { return print(String(n, base)); }
|
50
|
+
size_t print(long n, int base) { return print(String(n, base)); }
|
51
|
+
size_t print(unsigned long n, int base) { return print(String(n, base)); }
|
52
|
+
size_t print(double n, int digits) { return print(String(n, digits)); }
|
53
|
+
size_t print(const Printable& x) { return x.printTo(*this); }
|
54
54
|
|
55
|
-
size_t println(void)
|
56
|
-
size_t println(const String &s)
|
57
|
-
size_t println(const
|
58
|
-
size_t println(char c)
|
59
|
-
size_t println(
|
60
|
-
size_t println(
|
61
|
-
size_t println(
|
62
|
-
size_t println(
|
63
|
-
size_t println(
|
64
|
-
size_t println(
|
65
|
-
size_t println(
|
55
|
+
size_t println(void) { return print("\r\n"); }
|
56
|
+
size_t println(const String &s) { return print(s) + println(); }
|
57
|
+
size_t println(const __FlashStringHelper *str) { return println(reinterpret_cast<PGM_P>(str)); }
|
58
|
+
size_t println(const char* c) { return println(String(c)); }
|
59
|
+
size_t println(char c) { return println(String(c)); }
|
60
|
+
size_t println(unsigned char b, int base) { return println(String(b, base)); }
|
61
|
+
size_t println(int num, int base) { return println(String(num, base)); }
|
62
|
+
size_t println(unsigned int num, int base) { return println(String(num, base)); }
|
63
|
+
size_t println(long num, int base) { return println(String(num, base)); }
|
64
|
+
size_t println(unsigned long num, int base) { return println(String(num, base)); }
|
65
|
+
size_t println(double num, int digits) { return println(String(num, digits)); }
|
66
|
+
size_t println(const Printable& x) { return print(x) + println(); }
|
66
67
|
|
67
68
|
virtual void flush() { }
|
68
69
|
|
@@ -10,16 +10,19 @@ class SoftwareSerial : public Stream
|
|
10
10
|
private:
|
11
11
|
int mPinIn;
|
12
12
|
int mPinOut;
|
13
|
-
bool mInverse;
|
14
13
|
bool mIsListening;
|
15
14
|
GodmodeState* mState;
|
16
15
|
unsigned long mOffset; // bits to offset stream
|
17
16
|
bool bigEndian;
|
18
17
|
|
19
18
|
public:
|
20
|
-
|
19
|
+
// @TODO this is public for now to avoid a compiler warning
|
20
|
+
bool mInvertLogic; // @TODO not sure how to implement yet
|
21
|
+
|
22
|
+
SoftwareSerial(uint8_t receivePin, uint8_t transmitPin, bool invertLogic = false) {
|
21
23
|
mPinIn = receivePin;
|
22
24
|
mPinOut = transmitPin;
|
25
|
+
mIsListening = invertLogic;
|
23
26
|
mIsListening = false;
|
24
27
|
mOffset = 0; // godmode starts with 1 bit in the queue
|
25
28
|
mState = GODMODE();
|
data/cpp/arduino/WString.h
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
#pragma once
|
2
2
|
|
3
3
|
#include <stdlib.h>
|
4
|
-
#include <string>
|
4
|
+
#include <string.h>
|
5
5
|
#include <algorithm>
|
6
6
|
#include <iostream>
|
7
7
|
#include "AvrMath.h"
|
@@ -9,24 +9,16 @@
|
|
9
9
|
|
10
10
|
typedef std::string string;
|
11
11
|
|
12
|
-
//typedef const char __FlashStringHelper;
|
13
12
|
class __FlashStringHelper;
|
14
13
|
#define F(string_literal) (reinterpret_cast<const __FlashStringHelper *>(PSTR(string_literal)))
|
15
14
|
|
16
15
|
// Compatibility with string class
|
17
16
|
class String: public string
|
18
17
|
{
|
19
|
-
public:
|
20
|
-
|
21
|
-
// allow "string s; if (s) {}"
|
22
|
-
// http://www.artima.com/cppsource/safebool.html
|
23
|
-
typedef void (String::*TTDNSCstring)() const;
|
24
|
-
void ttdnsc() const {}
|
25
|
-
operator TTDNSCstring() const { return &String::ttdnsc; }
|
26
|
-
|
27
18
|
private:
|
28
|
-
static const char*
|
29
|
-
|
19
|
+
static const char *digit(int val)
|
20
|
+
{
|
21
|
+
static const char *bank = "0123456789ABCDEF";
|
30
22
|
return bank + val;
|
31
23
|
}
|
32
24
|
|
@@ -44,122 +36,126 @@ class String: public string
|
|
44
36
|
|
45
37
|
static string dtoas(double val, int decimalPlaces) {
|
46
38
|
double r = 0.5 * pow(0.1, decimalPlaces); // make sure that integer truncation will properly round
|
47
|
-
if (::isnan(val)) return "nan";
|
48
|
-
if (::isinf(val)) return "inf";
|
39
|
+
if (std::isnan(val)) return "nan";
|
40
|
+
if (std::isinf(val)) return "inf";
|
49
41
|
val += val > 0 ? r : -r;
|
50
42
|
if (val > 4294967040.0) return "ovf";
|
51
43
|
if (val <-4294967040.0) return "ovf";
|
52
44
|
return mytoas(val, 10) + "." + mytoa(abs(val - (long)val) * pow(10, decimalPlaces), 10);
|
53
45
|
}
|
54
46
|
|
55
|
-
public:
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
String
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
unsigned char endsWith(const String &suffix) const { return rfind(suffix) == length() - suffix.length(); }
|
118
|
-
|
119
|
-
char charAt(unsigned int index) const { return operator[](index); }
|
120
|
-
void setCharAt(unsigned int index, char c) { (*this)[index] = c; }
|
121
|
-
|
122
|
-
void getBytes(unsigned char *buf, unsigned int bufsize, unsigned int index=0) const { copy((char*)buf, bufsize, index); }
|
123
|
-
void toCharArray(char *buf, unsigned int bufsize, unsigned int index=0) const
|
124
|
-
{ getBytes((unsigned char *)buf, bufsize, index); }
|
125
|
-
|
126
|
-
int indexOf( char ch ) const { return find(ch); }
|
127
|
-
int indexOf( char ch, unsigned int fromIndex ) const { return find(ch, fromIndex); }
|
128
|
-
int indexOf( const String &str ) const { return find(str); }
|
129
|
-
int indexOf( const String &str, unsigned int fromIndex ) const { return find(str, fromIndex); }
|
130
|
-
int lastIndexOf( char ch ) const { return rfind(ch); }
|
131
|
-
int lastIndexOf( char ch, unsigned int fromIndex ) const { return rfind(ch, fromIndex); }
|
132
|
-
int lastIndexOf( const String &str ) const { return rfind(str); }
|
133
|
-
int lastIndexOf( const String &str, unsigned int fromIndex ) const { return rfind(str, fromIndex); }
|
134
|
-
String substring( unsigned int beginIndex ) const { return String(substr(beginIndex)); }
|
135
|
-
String substring( unsigned int beginIndex, unsigned int endIndex ) const { return String(substr(beginIndex, endIndex)); }
|
136
|
-
|
137
|
-
void replace(const String& target, const String& repl) {
|
138
|
-
int i = 0;
|
139
|
-
while ((i = find(target, i)) != npos) {
|
140
|
-
assign(substr(0, i) + repl + substr(i + target.length()));
|
141
|
-
i += repl.length();
|
47
|
+
public:
|
48
|
+
~String(void) {}
|
49
|
+
String(const __FlashStringHelper *str): string((const char *)str) {}
|
50
|
+
String(const char *cstr = ""): string(cstr) {}
|
51
|
+
String(const string &str): string(str) {}
|
52
|
+
String(const String &str): string(str) {}
|
53
|
+
explicit String(char c): string(1, c) {}
|
54
|
+
|
55
|
+
explicit String(unsigned char val, unsigned char base=10): string(mytoa(val, base)) {}
|
56
|
+
explicit String(int val, unsigned char base=10): string(mytoas(val, base)) {}
|
57
|
+
explicit String(unsigned int val , unsigned char base=10): string(mytoa(val, base)) {}
|
58
|
+
explicit String(long val, unsigned char base=10): string(mytoas(val, base)) {}
|
59
|
+
explicit String(unsigned long val, unsigned char base=10): string(mytoa(val, base)) {}
|
60
|
+
|
61
|
+
explicit String(float val, unsigned char decimalPlaces=2): string(dtoas(val, decimalPlaces)) {}
|
62
|
+
explicit String(double val, unsigned char decimalPlaces=2): string(dtoas(val, decimalPlaces)) {}
|
63
|
+
|
64
|
+
operator bool() const {
|
65
|
+
return true;
|
66
|
+
}
|
67
|
+
|
68
|
+
String & operator = (const String &rhs) { assign(rhs); return *this; }
|
69
|
+
String & operator = (const string &rhs) { assign(rhs); return *this; }
|
70
|
+
String & operator = (const char *cstr) { assign(cstr); return *this; }
|
71
|
+
String & operator = (const char c) { assign(1, c); return *this; }
|
72
|
+
|
73
|
+
unsigned char concat(const __FlashStringHelper *str) { append((const char *)str); return 1; }
|
74
|
+
unsigned char concat(const String &str) { append(str); return 1; }
|
75
|
+
unsigned char concat(const char *cstr) { append(cstr); return 1; }
|
76
|
+
unsigned char concat(char c) { append(1, c); return 1; }
|
77
|
+
unsigned char concat(unsigned char c) { append(1, c); return 1; }
|
78
|
+
unsigned char concat(int num) { append(String(num)); return 1; }
|
79
|
+
unsigned char concat(unsigned int num) { append(String(num)); return 1; }
|
80
|
+
unsigned char concat(long num) { append(String(num)); return 1; }
|
81
|
+
unsigned char concat(unsigned long num) { append(String(num)); return 1; }
|
82
|
+
unsigned char concat(float num) { append(String(num)); return 1; }
|
83
|
+
unsigned char concat(double num) { append(String(num)); return 1; }
|
84
|
+
|
85
|
+
String & operator += (const __FlashStringHelper *rhs) { concat(rhs); return *this; }
|
86
|
+
String & operator += (const String &rhs) { concat(rhs); return *this; }
|
87
|
+
String & operator += (const char *cstr) { concat(cstr); return *this; }
|
88
|
+
String & operator += (char c) { concat(c); return *this; }
|
89
|
+
String & operator += (unsigned char num) { concat(num); return *this; }
|
90
|
+
String & operator += (int num) { concat(num); return *this; }
|
91
|
+
String & operator += (unsigned int num) { concat(num); return *this; }
|
92
|
+
String & operator += (long num) { concat(num); return *this; }
|
93
|
+
String & operator += (unsigned long num) { concat(num); return *this; }
|
94
|
+
String & operator += (float num) { concat(num); return *this; }
|
95
|
+
String & operator += (double num) { concat(num); return *this; }
|
96
|
+
|
97
|
+
|
98
|
+
int compareTo(const String &s) const { return compare(s); }
|
99
|
+
unsigned char equals(const String &s) const { return compareTo(s) == 0; }
|
100
|
+
unsigned char equals(const char *cstr) const { return compareTo(String(cstr)) == 0; }
|
101
|
+
unsigned char equal(const String &s) const { return equals(s); }
|
102
|
+
unsigned char equal(const char *cstr) const { return equals(cstr); }
|
103
|
+
unsigned char equalsIgnoreCase(const String &s) const {
|
104
|
+
String a = String(*this);
|
105
|
+
String b = String(s);
|
106
|
+
a.toUpperCase();
|
107
|
+
b.toUpperCase();
|
108
|
+
return a.compare(b) == 0;
|
142
109
|
}
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
110
|
+
|
111
|
+
unsigned char startsWith(const String &prefix) const { return find(prefix) == 0; }
|
112
|
+
unsigned char startsWith(const String &prefix, unsigned int offset) const { return find(prefix, offset) == offset; }
|
113
|
+
unsigned char endsWith(const String &suffix) const { return rfind(suffix) == length() - suffix.length(); }
|
114
|
+
|
115
|
+
char charAt(unsigned int index) const { return operator[](index); }
|
116
|
+
void setCharAt(unsigned int index, char c) { (*this)[index] = c; }
|
117
|
+
|
118
|
+
void getBytes(unsigned char *buf, unsigned int bufsize, unsigned int index=0) const { copy((char*)buf, bufsize, index); }
|
119
|
+
void toCharArray(char *buf, unsigned int bufsize, unsigned int index=0) const
|
120
|
+
{ getBytes((unsigned char *)buf, bufsize, index); }
|
121
|
+
|
122
|
+
int indexOf( char ch ) const { return find(ch); }
|
123
|
+
int indexOf( char ch, unsigned int fromIndex ) const { return find(ch, fromIndex); }
|
124
|
+
int indexOf( const String &str ) const { return find(str); }
|
125
|
+
int indexOf( const String &str, unsigned int fromIndex ) const { return find(str, fromIndex); }
|
126
|
+
int lastIndexOf( char ch ) const { return rfind(ch); }
|
127
|
+
int lastIndexOf( char ch, unsigned int fromIndex ) const { return rfind(ch, fromIndex); }
|
128
|
+
int lastIndexOf( const String &str ) const { return rfind(str); }
|
129
|
+
int lastIndexOf( const String &str, unsigned int fromIndex ) const { return rfind(str, fromIndex); }
|
130
|
+
String substring( unsigned int beginIndex ) const { return String(substr(beginIndex)); }
|
131
|
+
String substring( unsigned int beginIndex, unsigned int endIndex ) const { return String(substr(beginIndex, endIndex)); }
|
132
|
+
|
133
|
+
void replace(const String& target, const String& repl) {
|
134
|
+
int i = 0;
|
135
|
+
while ((i = find(target, i)) != npos) {
|
136
|
+
assign(substr(0, i) + repl + substr(i + target.length()));
|
137
|
+
i += repl.length();
|
138
|
+
}
|
139
|
+
}
|
140
|
+
void replace(char target, char repl) {
|
141
|
+
replace(String(target), String(repl));
|
142
|
+
}
|
143
|
+
void remove(unsigned int index) { assign(substr(0, index)); }
|
144
|
+
void remove(unsigned int index, unsigned int count) { assign(substr(0, index) + substr(min(length(), index + count), count)); }
|
145
|
+
void toLowerCase(void) { std::transform(begin(), end(), begin(), ::tolower); }
|
146
|
+
void toUpperCase(void) { std::transform(begin(), end(), begin(), ::toupper); }
|
147
|
+
|
148
|
+
void trim(void) {
|
149
|
+
int b;
|
150
|
+
int e;
|
151
|
+
for (b = 0; b < length() && isSpace(charAt(b)); ++b);
|
152
|
+
for (e = length() - 1; e > b && isSpace(charAt(e)); --e);
|
153
|
+
assign(substr(b, e - b + 1));
|
154
|
+
}
|
155
|
+
|
156
|
+
long toInt(void) const { return std::stol(*this); }
|
157
|
+
float toFloat(void) const { return std::stof(*this); }
|
158
|
+
double toDouble(void) const { return std::stod(*this); }
|
163
159
|
|
164
160
|
};
|
165
161
|
|