Skip to content

Commit a3a6f0b

Browse files
committed
Add StringExtras and KeyState class
1 parent a4bfc7f commit a3a6f0b

File tree

9 files changed

+225
-5
lines changed

9 files changed

+225
-5
lines changed

README.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,11 @@ make -j`nproc`
1111

1212
## Classes
1313
- **CPU** - Get CPU informations.
14-
- **Double** - Less, Greater, Equal, Between, Round, Split.
14+
- **DoubleExtras** - Less, Greater, Equal, Between, Round, Split.
1515
- **Exec** - Run command and return stdout or mixed (stdout and stderr) and result code.
16+
- **KeyState** - Check for caps lock state.
1617
- **Serial** - Serial communication class.
18+
- **StringExtras** - LeftTrim, RightTrim, Trim.
1719
- **Timing** - Measering time, cpu and real time.
1820

1921
## Template classes

examples/double/main.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
#include <iostream>
3333

3434
/* modern.cpp.core header */
35-
#include <Double.h>
35+
#include <DoubleExtras.h>
3636

3737
int main() {
3838

source/CMakeLists.txt

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,12 +34,16 @@ add_library(${PROJECT_NAME}
3434
../README.md
3535
CPU.cpp
3636
CPU.h
37-
Double.cpp
38-
Double.h
37+
DoubleExtras.cpp
38+
DoubleExtras.h
3939
Exec.cpp
4040
Exec.h
41+
KeyState.cpp
42+
KeyState.h
4143
Serial.cpp
4244
Serial.h
45+
StringExtras.cpp
46+
StringExtras.h
4347
Timing.cpp
4448
Timing.h
4549
templates/CSVWriter.h
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
#include <vector>
3737

3838
/* local header */
39-
#include "Double.h"
39+
#include "DoubleExtras.h"
4040

4141
namespace vx {
4242

File renamed without changes.

source/KeyState.cpp

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
/*
2+
* Copyright (c) 2020 Florian Becker <[email protected]> (VX APPS).
3+
* All rights reserved.
4+
*
5+
* Redistribution and use in source and binary forms, with or without
6+
* modification, are permitted provided that the following conditions are met:
7+
*
8+
* 1. Redistributions of source code must retain the above copyright notice, this
9+
* list of conditions and the following disclaimer.
10+
*
11+
* 2. Redistributions in binary form must reproduce the above copyright notice,
12+
* this list of conditions and the following disclaimer in the documentation
13+
* and/or other materials provided with the distribution.
14+
*
15+
* 3. Neither the name of the copyright holder nor the names of its
16+
* contributors may be used to endorse or promote products derived from
17+
* this software without specific prior written permission.
18+
*
19+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20+
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21+
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22+
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
23+
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24+
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
25+
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
26+
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
27+
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28+
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29+
*/
30+
31+
#ifdef _WIN32
32+
#include <Windows.h>
33+
#elif defined(__APPLE__)
34+
#include <Carbon/Carbon.h>
35+
#endif
36+
37+
/* local header */
38+
#include "KeyState.h"
39+
40+
namespace vx {
41+
42+
bool KeyState::isCapsLockActive() {
43+
44+
bool isActive = false;
45+
46+
#ifdef _WIN32
47+
if ( GetKeyState( VK_CAPITAL ) & 0x0001 ) {
48+
49+
isActive = true;
50+
}
51+
#elif __APPLE__
52+
53+
#if 1
54+
/* Variant 1 Carbon.framework */
55+
KeyMap keyMap;
56+
GetKeys( keyMap );
57+
58+
int index = kVK_CapsLock >> 5;
59+
int shift = kVK_CapsLock & 31;
60+
61+
isActive = ( ( keyMap[ index ].bigEndianValue >> shift ) & 1 ) != 0;
62+
#else
63+
/* Variant 2 CoreGraphics.framework */
64+
isActive = CGEventSourceKeyState( kCGEventSourceStateHIDSystemState, kVK_CapsLock );
65+
#endif
66+
67+
#endif
68+
return isActive;
69+
}
70+
}

source/KeyState.h

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
/*
2+
* Copyright (c) 2020 Florian Becker <[email protected]> (VX APPS).
3+
* All rights reserved.
4+
*
5+
* Redistribution and use in source and binary forms, with or without
6+
* modification, are permitted provided that the following conditions are met:
7+
*
8+
* 1. Redistributions of source code must retain the above copyright notice, this
9+
* list of conditions and the following disclaimer.
10+
*
11+
* 2. Redistributions in binary form must reproduce the above copyright notice,
12+
* this list of conditions and the following disclaimer in the documentation
13+
* and/or other materials provided with the distribution.
14+
*
15+
* 3. Neither the name of the copyright holder nor the names of its
16+
* contributors may be used to endorse or promote products derived from
17+
* this software without specific prior written permission.
18+
*
19+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20+
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21+
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22+
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
23+
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24+
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
25+
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
26+
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
27+
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28+
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29+
*/
30+
31+
#pragma once
32+
33+
namespace vx {
34+
35+
class KeyState {
36+
37+
public:
38+
static bool isCapsLockActive();
39+
};
40+
}

source/StringExtras.cpp

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
/*
2+
* Copyright (c) 2020 Florian Becker <[email protected]> (VX APPS).
3+
* All rights reserved.
4+
*
5+
* Redistribution and use in source and binary forms, with or without
6+
* modification, are permitted provided that the following conditions are met:
7+
*
8+
* 1. Redistributions of source code must retain the above copyright notice, this
9+
* list of conditions and the following disclaimer.
10+
*
11+
* 2. Redistributions in binary form must reproduce the above copyright notice,
12+
* this list of conditions and the following disclaimer in the documentation
13+
* and/or other materials provided with the distribution.
14+
*
15+
* 3. Neither the name of the copyright holder nor the names of its
16+
* contributors may be used to endorse or promote products derived from
17+
* this software without specific prior written permission.
18+
*
19+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20+
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21+
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22+
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
23+
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24+
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
25+
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
26+
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
27+
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28+
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29+
*/
30+
31+
/* local header */
32+
#include "StringExtras.h"
33+
34+
namespace vx {
35+
36+
constexpr auto trimmed = " \t\n\r\f\v";
37+
38+
std::string &stringRightTrim( std::string &_string,
39+
const std::string &_trim ) {
40+
41+
_string.erase( _string.find_last_not_of( _trim.empty() ? trimmed : _trim ) + 1 );
42+
return _string;
43+
}
44+
45+
std::string &stringLeftTrim( std::string &_string,
46+
const std::string &_trim ) {
47+
48+
_string.erase( 0, _string.find_first_not_of( _trim.empty() ? trimmed : _trim ) );
49+
return _string;
50+
}
51+
52+
std::string &stringTrim( std::string &_string,
53+
const std::string &_trim ) {
54+
55+
return stringLeftTrim( stringRightTrim( _string, _trim.empty() ? trimmed : _trim ), _trim.empty() ? trimmed : _trim );
56+
}
57+
}

source/StringExtras.h

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
/*
2+
* Copyright (c) 2020 Florian Becker <[email protected]> (VX APPS).
3+
* All rights reserved.
4+
*
5+
* Redistribution and use in source and binary forms, with or without
6+
* modification, are permitted provided that the following conditions are met:
7+
*
8+
* 1. Redistributions of source code must retain the above copyright notice, this
9+
* list of conditions and the following disclaimer.
10+
*
11+
* 2. Redistributions in binary form must reproduce the above copyright notice,
12+
* this list of conditions and the following disclaimer in the documentation
13+
* and/or other materials provided with the distribution.
14+
*
15+
* 3. Neither the name of the copyright holder nor the names of its
16+
* contributors may be used to endorse or promote products derived from
17+
* this software without specific prior written permission.
18+
*
19+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20+
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21+
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22+
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
23+
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24+
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
25+
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
26+
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
27+
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28+
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29+
*/
30+
31+
/* stl header */
32+
#include <string>
33+
34+
namespace vx {
35+
36+
// trim from end of string (right)
37+
std::string &stringRightTrim( std::string &_string,
38+
const std::string &_trim = {} );
39+
40+
// trim from beginning of string (left)
41+
std::string &stringLeftTrim( std::string &_string,
42+
const std::string &_trim = {} );
43+
44+
// trim from both ends of string (right then left)
45+
std::string &stringTrim( std::string &_string,
46+
const std::string &_trim = {} );
47+
}

0 commit comments

Comments
 (0)