Add internal strings
This commit is contained in:
		
							parent
							
								
									905bafd26d
								
							
						
					
					
						commit
						c7390993dc
					
				| @ -91,6 +91,7 @@ endif() | |||||||
| 
 | 
 | ||||||
| set(MYNTEYE_SRCS | set(MYNTEYE_SRCS | ||||||
|   ${UVC_SRC} |   ${UVC_SRC} | ||||||
|  |   src/internal/strings.cc | ||||||
|   src/internal/types.cc |   src/internal/types.cc | ||||||
|   src/public/types.cc |   src/public/types.cc | ||||||
|   src/device/context.cc |   src/device/context.cc | ||||||
|  | |||||||
| @ -15,10 +15,15 @@ Context::Context() : context_(uvc::create_context()) { | |||||||
|     auto vid = uvc::get_vendor_id(*device); |     auto vid = uvc::get_vendor_id(*device); | ||||||
|     auto pid = uvc::get_product_id(*device); |     auto pid = uvc::get_product_id(*device); | ||||||
|     // auto video_name = uvc::get_video_name(*device);
 |     // auto video_name = uvc::get_video_name(*device);
 | ||||||
|     LOG(INFO) << "name: " << name << ", vid: 0x" << std::hex << vid |     LOG(INFO) << "UVC device detected, name: " << name << ", vid: 0x" | ||||||
|               << ", pid: 0x" << std::hex << pid; |               << std::hex << vid << ", pid: 0x" << std::hex << pid; | ||||||
|     if (vid == MYNTEYE_VID) { |     if (vid == MYNTEYE_VID) { | ||||||
|       devices_.push_back(Device::Create(name, device)); |       auto d = Device::Create(name, device); | ||||||
|  |       if (d) { | ||||||
|  |         devices_.push_back(d); | ||||||
|  |       } else { | ||||||
|  |         LOG(ERROR) << "Device is not supported by MYNT EYE."; | ||||||
|  |       } | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  | |||||||
| @ -2,6 +2,7 @@ | |||||||
| 
 | 
 | ||||||
| #include <glog/logging.h> | #include <glog/logging.h> | ||||||
| 
 | 
 | ||||||
|  | #include "internal/strings.h" | ||||||
| #include "uvc/uvc.h" | #include "uvc/uvc.h" | ||||||
| 
 | 
 | ||||||
| MYNTEYE_BEGIN_NAMESPACE | MYNTEYE_BEGIN_NAMESPACE | ||||||
| @ -16,6 +17,10 @@ Device::~Device() { | |||||||
| 
 | 
 | ||||||
| std::shared_ptr<Device> Device::Create( | std::shared_ptr<Device> Device::Create( | ||||||
|     const std::string &name, std::shared_ptr<uvc::device> device) { |     const std::string &name, std::shared_ptr<uvc::device> device) { | ||||||
|  |   if (name == "MYNTEYE") { | ||||||
|  |   } else if (strings::starts_with(name, "MYNT-EYE-")) { | ||||||
|  |     // TODO(JohnZhao): Create different device by name, such as MYNT-EYE-S1000
 | ||||||
|  |   } | ||||||
|   return nullptr; |   return nullptr; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | |||||||
							
								
								
									
										92
									
								
								src/internal/strings.cc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										92
									
								
								src/internal/strings.cc
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,92 @@ | |||||||
|  | #include "internal/strings.h" | ||||||
|  | 
 | ||||||
|  | #include <algorithm> | ||||||
|  | #include <cctype> | ||||||
|  | #include <exception> | ||||||
|  | #include <locale> | ||||||
|  | 
 | ||||||
|  | MYNTEYE_BEGIN_NAMESPACE | ||||||
|  | 
 | ||||||
|  | namespace strings { | ||||||
|  | 
 | ||||||
|  | namespace { | ||||||
|  | 
 | ||||||
|  | // The most elegant way to iterate the words of a string
 | ||||||
|  | //   https://stackoverflow.com/questions/236129/the-most-elegant-way-to-iterate-the-words-of-a-string
 | ||||||
|  | 
 | ||||||
|  | template <class ContainerT> | ||||||
|  | void tokenize( | ||||||
|  |     const std::string &str, ContainerT &tokens,  // NOLINT
 | ||||||
|  |     const std::string &delimiters = " ", bool trimEmpty = false) { | ||||||
|  |   std::string::size_type pos, lastPos = 0, length = str.length(); | ||||||
|  | 
 | ||||||
|  |   using value_type = typename ContainerT::value_type; | ||||||
|  |   using size_type = typename ContainerT::size_type; | ||||||
|  | 
 | ||||||
|  |   while (lastPos < length + 1) { | ||||||
|  |     pos = str.find_first_of(delimiters, lastPos); | ||||||
|  |     if (pos == std::string::npos) { | ||||||
|  |       pos = length; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     if (pos != lastPos || !trimEmpty) { | ||||||
|  |       tokens.push_back( | ||||||
|  |           value_type(str.data() + lastPos, (size_type)pos - lastPos)); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     lastPos = pos + 1; | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | }  // namespace
 | ||||||
|  | 
 | ||||||
|  | int hex2int(const std::string &text) { | ||||||
|  |   try { | ||||||
|  |     return std::stoi(text, nullptr, 16); | ||||||
|  |   } catch (const std::exception &e) { | ||||||
|  |     throw new strings_error("strings conversion error"); | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | bool starts_with(const std::string &text, const std::string &prefix) { | ||||||
|  |   return text.compare(0, prefix.length(), prefix) == 0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | std::vector<std::string> split( | ||||||
|  |     const std::string &text, const std::string &delimiters) { | ||||||
|  |   std::vector<std::string> tokens; | ||||||
|  |   tokenize(text, tokens, delimiters); | ||||||
|  |   return tokens; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // What's the best way to trim std::string?
 | ||||||
|  | //   https://stackoverflow.com/questions/216823/whats-the-best-way-to-trim-stdstring
 | ||||||
|  | 
 | ||||||
|  | void ltrim(std::string &s) {  // NOLINT
 | ||||||
|  |   s.erase(s.begin(), std::find_if(s.begin(), s.end(), [](int ch) { | ||||||
|  |             return !std::isspace(ch); | ||||||
|  |           })); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void rtrim(std::string &s) {  // NOLINT
 | ||||||
|  |   s.erase( | ||||||
|  |       std::find_if( | ||||||
|  |           s.rbegin(), s.rend(), [](int ch) { return !std::isspace(ch); }) | ||||||
|  |           .base(), | ||||||
|  |       s.end()); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void trim(std::string &s) {  // NOLINT
 | ||||||
|  |   ltrim(s); | ||||||
|  |   rtrim(s); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | std::string trim_copy(const std::string &text) { | ||||||
|  |   std::string s = text; | ||||||
|  |   trim(s); | ||||||
|  |   return s; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | }  // namespace strings
 | ||||||
|  | 
 | ||||||
|  | MYNTEYE_END_NAMESPACE | ||||||
							
								
								
									
										41
									
								
								src/internal/strings.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								src/internal/strings.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,41 @@ | |||||||
|  | #ifndef MYNTEYE_INTERNAL_STRINGS_H_  // NOLINT
 | ||||||
|  | #define MYNTEYE_INTERNAL_STRINGS_H_ | ||||||
|  | #pragma once | ||||||
|  | 
 | ||||||
|  | #include <stdexcept> | ||||||
|  | #include <string> | ||||||
|  | #include <utility> | ||||||
|  | #include <vector> | ||||||
|  | 
 | ||||||
|  | #include "mynteye/mynteye.h" | ||||||
|  | 
 | ||||||
|  | MYNTEYE_BEGIN_NAMESPACE | ||||||
|  | 
 | ||||||
|  | class strings_error : public std::runtime_error { | ||||||
|  |  public: | ||||||
|  |   explicit strings_error(const std::string &what_arg) noexcept | ||||||
|  |       : std::runtime_error(std::move(what_arg)) {} | ||||||
|  |   explicit strings_error(const char *what_arg) noexcept | ||||||
|  |       : std::runtime_error(std::move(what_arg)) {} | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | namespace strings { | ||||||
|  | 
 | ||||||
|  | int hex2int(const std::string &text); | ||||||
|  | 
 | ||||||
|  | bool starts_with(const std::string &text, const std::string &prefix); | ||||||
|  | 
 | ||||||
|  | std::vector<std::string> split( | ||||||
|  |     const std::string &text, const std::string &delimiters); | ||||||
|  | 
 | ||||||
|  | void ltrim(std::string &s);  // NOLINT
 | ||||||
|  | void rtrim(std::string &s);  // NOLINT
 | ||||||
|  | void trim(std::string &s);   // NOLINT
 | ||||||
|  | 
 | ||||||
|  | std::string trim_copy(const std::string &text); | ||||||
|  | 
 | ||||||
|  | }  // namespace strings
 | ||||||
|  | 
 | ||||||
|  | MYNTEYE_END_NAMESPACE | ||||||
|  | 
 | ||||||
|  | #endif  // MYNTEYE_INTERNAL_STRINGS_H_ NOLINT
 | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user