json lib added
This commit is contained in:
		
							parent
							
								
									da8ac53f7d
								
							
						
					
					
						commit
						56b4b3a84b
					
				
					 7 changed files with 339 additions and 0 deletions
				
			
		
							
								
								
									
										124
									
								
								src/Types.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										124
									
								
								src/Types.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,124 @@ | |||
| /*
 | ||||
|  * Types.h | ||||
|  * | ||||
|  *  Created on: 11.09.2015 | ||||
|  *      Author: jdi | ||||
|  */ | ||||
| 
 | ||||
| #ifndef TYPES_H_ | ||||
| #define TYPES_H_ | ||||
| 
 | ||||
| #include <initializer_list> | ||||
| #include <algorithm> | ||||
| #include <iostream> | ||||
| #include <iomanip> | ||||
| #include <vector> | ||||
| #include <array> | ||||
| 
 | ||||
| #include "bytes.h" | ||||
| #include "datasets.h" | ||||
| 
 | ||||
| class macAddr: public std::array<byte, 6> { | ||||
| public: | ||||
| 	friend std::ostream& operator<<(std::ostream& out, const macAddr& arr) { | ||||
| 		out << std::hex << std::setw(2) << std::setfill('0') | ||||
| 				<< (unsigned) arr[0]; | ||||
| 		for (unsigned i = 1; i < 6; i++) { | ||||
| 			out << ":" << std::setw(2) << std::setfill('0') | ||||
| 					<< (unsigned) arr[i]; | ||||
| 		} | ||||
| 		return out; | ||||
| 	} | ||||
| 
 | ||||
| 	macAddr() { | ||||
| 		*this= {0,0,0,0,0,0}; | ||||
| 	} | ||||
| 
 | ||||
| 	macAddr(std::initializer_list<byte> s) { | ||||
| 		int i = 0; | ||||
|         for (byte b : s) { | ||||
|         	if(i<6) (*this)[i++]=b; | ||||
|         	else break; | ||||
|         } | ||||
| 	} | ||||
| 
 | ||||
| 	macAddr(bytes bts) { | ||||
| 		int i = 0; | ||||
|         for (byte b : bts) { | ||||
|         	if(i<6) (*this)[i++]=b; | ||||
|         	else break; | ||||
|         } | ||||
| 	} | ||||
| }; | ||||
| 
 | ||||
| /*
 | ||||
| class mac_addr : public std::array<unsigned char, 6> { | ||||
| public: | ||||
| 	typedef std::array<unsigned char, 6> super; | ||||
| 
 | ||||
| 	using super::super; | ||||
| 
 | ||||
| 	mac_addr{00, 00, 00, 000}; | ||||
| }; | ||||
| */ | ||||
| 
 | ||||
| 
 | ||||
| class ipAddr: public std::array<byte, 4> { | ||||
| public: | ||||
| 
 | ||||
| 	ipAddr() { | ||||
| 		*this= {0,0,0,0,0,0}; | ||||
| 	} | ||||
| 
 | ||||
| 	ipAddr(std::initializer_list<byte> s) { | ||||
| 		int i = 0; | ||||
|         for (byte  b : s) { | ||||
|         	if(i<4) (*this)[i++]=b; | ||||
|         	else break; | ||||
|         } | ||||
| 	} | ||||
| 
 | ||||
| 	ipAddr(bytes bts) { | ||||
| 		int i = 0; | ||||
|         for (byte b : bts) { | ||||
|         	if(i<4) (*this)[i++]=b; | ||||
|         	else break; | ||||
|         } | ||||
| 	} | ||||
| 
 | ||||
| 	friend std::ostream& operator<<(std::ostream& out, ipAddr& arr) { | ||||
| 		out << std::dec << (unsigned) arr[0]; | ||||
| 		for (unsigned i = 1; i < 4; i++) { | ||||
| 			out << "." << (unsigned) arr[i]; | ||||
| 		} | ||||
| 		return out; | ||||
| 	} | ||||
| }; | ||||
| 
 | ||||
| template<typename T> | ||||
| std::vector<T> operator+(const std::vector<T> &A, const std::vector<T> &B) { | ||||
| 	std::vector<T> AB; | ||||
| 	AB.reserve(A.size() + B.size());                // preallocate memory
 | ||||
| 	AB.insert(AB.end(), A.begin(), A.end());        // add A;
 | ||||
| 	AB.insert(AB.end(), B.begin(), B.end());        // add B;
 | ||||
| 	return AB; | ||||
| } | ||||
| 
 | ||||
| template<typename T> | ||||
| std::vector<T> &operator+=(std::vector<T> &A, const std::vector<T> &B) { | ||||
| 	A.reserve(A.size() + B.size()); | ||||
| 	A.insert(A.end(), B.begin(), B.end()); | ||||
| 	return A; | ||||
| } | ||||
| 
 | ||||
| struct Options { | ||||
| 	unsigned flags = 0x00; | ||||
| 	std::string user; | ||||
| 	std::string password; | ||||
| 	std::string interface; | ||||
| 	std::string file; | ||||
| 	int debug_level=0; | ||||
| 	long timeout; | ||||
| }; | ||||
| 
 | ||||
| #endif /* TYPES_H_ */ | ||||
							
								
								
									
										28
									
								
								src/bytes.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								src/bytes.cpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,28 @@ | |||
| /*
 | ||||
|  * Bytes.cpp | ||||
|  * | ||||
|  *  Created on: 02.10.2015 | ||||
|  *      Author: jdi | ||||
|  */ | ||||
| 
 | ||||
| #include "bytes.h" | ||||
| 
 | ||||
| bytes::bytes(std::string d) { | ||||
| 	vector(); | ||||
| 	std::string delimiter = ":"; | ||||
| 	std::string token; | ||||
| 	size_t pos = 0; | ||||
| 	int hex; | ||||
| 	byte b; | ||||
| 	resize(0); | ||||
| 	while ((pos = d.find(delimiter)) != std::string::npos) { | ||||
| 		token = d.substr(0, pos); | ||||
| 		sscanf(token.c_str(), "%x", &hex); | ||||
| 		d.erase(0, pos + delimiter.length()); | ||||
| 		b = hex & 0xFF; | ||||
| 		push_back(b); | ||||
| 	} | ||||
| 	sscanf(d.c_str(), "%x", &hex); | ||||
| 	b = hex & 0xFF; | ||||
| 	push_back(b); | ||||
| } | ||||
							
								
								
									
										86
									
								
								src/bytes.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										86
									
								
								src/bytes.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,86 @@ | |||
| /*
 | ||||
|  * Bytes.h | ||||
|  * | ||||
|  *  Created on: 02.10.2015 | ||||
|  *      Author: jdi | ||||
|  */ | ||||
| 
 | ||||
| #ifndef BYTES_H_ | ||||
| #define BYTES_H_ | ||||
| 
 | ||||
| #include <initializer_list> | ||||
| #include <functional> | ||||
| #include <iostream> | ||||
| #include <iomanip> | ||||
| #include <string> | ||||
| #include <vector> | ||||
| #include <map> | ||||
| 
 | ||||
| typedef unsigned char byte; | ||||
| 
 | ||||
| class bytes: public std::vector<unsigned char> { | ||||
| 	typedef std::vector<unsigned char> vector; | ||||
| public: | ||||
| 	using vector::operator[]; | ||||
| 	bytes() { | ||||
| 	} | ||||
| 	bytes(int n) : | ||||
| 			vector(n) { | ||||
| 	} | ||||
| 
 | ||||
| 	bytes(std::string); | ||||
| 
 | ||||
| 	bytes(std::initializer_list<uint8_t> s) | ||||
| 	{ | ||||
| 		for (uint8_t b : s) { | ||||
| 			this->push_back(b); | ||||
|     } | ||||
| 	} | ||||
| 
 | ||||
| 	bytes(const vector &B) { | ||||
| 		this->reserve(B.size()); | ||||
| 		this->insert(this->begin(), B.begin(), B.end()); | ||||
| 	} | ||||
| 
 | ||||
| 	bytes readHex(std::string s){ | ||||
| 		return bytes(s); | ||||
| 	} | ||||
| 
 | ||||
| 	bytes operator=(const vector &B) { | ||||
| 		this->reserve(B.size()); | ||||
| 		this->insert(this->begin(), B.begin(), B.end()); | ||||
| 		return *this; | ||||
| 	} | ||||
| 
 | ||||
| 	bytes &operator+=(const bytes &B) { | ||||
| 		this->reserve(this->size() + B.size()); | ||||
| 		this->insert(this->end(), B.begin(), B.end()); | ||||
| 		return *this; | ||||
| 	} | ||||
| 
 | ||||
| 	bytes operator+(const bytes &B) { | ||||
| 		bytes AB; | ||||
| 		AB.reserve(this->size() + B.size()); | ||||
| 		AB.insert(AB.end(), this->begin(), this->end()); | ||||
| 		AB.insert(AB.end(), B.begin(), B.end()); | ||||
| 		return AB; | ||||
| 	} | ||||
| 
 | ||||
| 	friend std::ostream& operator<<(std::ostream& out, const bytes& arr) { | ||||
| 		if (arr.size() > 0) { | ||||
| 			out << std::hex << std::setw(2) << std::setfill('0') | ||||
| 					<< (unsigned) arr[0]; | ||||
| 		} | ||||
| 		for (unsigned i = 1; i < arr.size(); i++) { | ||||
| 			out << ":" << std::setw(2) << std::setfill('0') << (unsigned) arr[i]; | ||||
| 		} | ||||
| 		return out; | ||||
| 	} | ||||
| 
 | ||||
| 	operator std::string() { | ||||
| 		std::string s(this->begin(),this->end()); | ||||
| 		return s; | ||||
| 	} | ||||
| }; | ||||
| 
 | ||||
| #endif /* BYTES_H_ */ | ||||
							
								
								
									
										8
									
								
								src/datasets.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								src/datasets.cpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,8 @@ | |||
| /*
 | ||||
|  * Datasets.cpp | ||||
|  * | ||||
|  *  Created on: 02.10.2015 | ||||
|  *      Author: jdi | ||||
|  */ | ||||
| 
 | ||||
| #include "datasets.h" | ||||
							
								
								
									
										31
									
								
								src/datasets.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								src/datasets.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,31 @@ | |||
| /*
 | ||||
|  * Datasets.h | ||||
|  * | ||||
|  *  Created on: 02.10.2015 | ||||
|  *      Author: jdi | ||||
|  */ | ||||
| 
 | ||||
| #ifndef DATASETS_H_ | ||||
| #define DATASETS_H_ | ||||
| 
 | ||||
| #include <map> | ||||
| #include "bytes.h" | ||||
| 
 | ||||
| struct dataset { | ||||
| 	short type; | ||||
| 	short len; | ||||
| 	bytes value; | ||||
| }; | ||||
| 
 | ||||
| class datasets : public std::map<short, dataset> { | ||||
| public: | ||||
| 	datasets(){}; | ||||
| 	datasets(std::initializer_list<dataset> s) | ||||
| 	{ | ||||
| 		for (dataset b : s) { | ||||
| 			(*this)[b.type]=b; | ||||
| 		} | ||||
|     } | ||||
| }; | ||||
| 
 | ||||
| #endif /* DATASETS_H_ */ | ||||
							
								
								
									
										31
									
								
								src/lookupTable.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								src/lookupTable.cpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,31 @@ | |||
| /*
 | ||||
|  * lookupTable.h | ||||
|  * | ||||
|  *  Created on: 11.10.2015 | ||||
|  *      Author: jdi | ||||
|  */ | ||||
| 
 | ||||
| #include "lookupTable.h" | ||||
| 
 | ||||
| lookupTable::lookupTable(std::initializer_list<set> l) { | ||||
| 	int i = 0; | ||||
| 	this->data.resize(l.size()); | ||||
| 	for (set s : l) { | ||||
| 		this->data[i] = s; | ||||
| 		this->left[s.type] = &this->data[i]; | ||||
| 		this->right[s.name] = &this->data[i]; | ||||
| 		i++; | ||||
| 	} | ||||
| } | ||||
| const short& lookupTable::operator[](std::string s) { | ||||
| 	return this->right[s]->type; | ||||
| } | ||||
| const std::string& lookupTable::operator[](short n) { | ||||
| 	return this->left[n]->name; | ||||
| } | ||||
| bool lookupTable::exists(std::string s) { | ||||
| 	return !(right.find(s) == right.end()); | ||||
| } | ||||
| bool lookupTable::exists(short n) { | ||||
| 	return !(left.find(n) == left.end()); | ||||
| } | ||||
							
								
								
									
										31
									
								
								src/lookupTable.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								src/lookupTable.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,31 @@ | |||
| /*
 | ||||
|  * lookupTable.h | ||||
|  * | ||||
|  *  Created on: 11.10.2015 | ||||
|  *      Author: jdi | ||||
|  */ | ||||
| 
 | ||||
| #ifndef LOOKUPTABLE_H_ | ||||
| #define LOOKUPTABLE_H_ | ||||
| 
 | ||||
| #include <map> | ||||
| #include <vector> | ||||
| 
 | ||||
| class lookupTable { | ||||
| public: | ||||
| 	struct set { | ||||
| 		short type; | ||||
| 		std::string name; | ||||
| 	}; | ||||
| 	lookupTable(std::initializer_list<set> l); | ||||
| 	const short& operator[](std::string s); | ||||
| 	const std::string& operator[](short n); | ||||
| 	bool exists(std::string s); | ||||
| 	bool exists(short n); | ||||
| private: | ||||
| 	std::vector<set> data; | ||||
| 	std::map<short, set*> left; | ||||
| 	std::map<std::string, set*> right; | ||||
| }; | ||||
| 
 | ||||
| #endif /* LOOKUPTABLE_H_ */ | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue