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…
Reference in a new issue