#include <iostream>
|
|
#include <algorithm>
|
|
#include <string.h>
|
|
|
|
class Binary {
|
|
public:
|
|
unsigned char *bin;
|
|
size_t size;
|
|
bool allocated;
|
|
|
|
Binary() : bin(NULL), size(0), allocated(false) { }
|
|
Binary(const char *data) {
|
|
bin = (unsigned char *) data;
|
|
size = strlen(data);
|
|
allocated = false;
|
|
}
|
|
|
|
Binary(const Binary &b) {
|
|
bin = b.bin;
|
|
size = b.size;
|
|
allocated = false;
|
|
}
|
|
|
|
~Binary() {
|
|
if (allocated) {
|
|
delete bin;
|
|
}
|
|
}
|
|
|
|
operator std::string() {
|
|
return (const char *) bin;
|
|
}
|
|
|
|
friend std::ostream & operator<<(std::ostream & str, Binary const &b) {
|
|
return str << b.bin;
|
|
}
|
|
|
|
bool operator<(const Binary &b) {
|
|
if(size < b.size) {
|
|
return true;
|
|
} else if (size > b.size) {
|
|
return false;
|
|
} else {
|
|
return memcmp(bin,b.bin,size) < 0;
|
|
}
|
|
}
|
|
|
|
bool operator<(Binary &b) {
|
|
if(size < b.size) {
|
|
return true;
|
|
} else if (size > b.size) {
|
|
return false;
|
|
} else {
|
|
return memcmp(bin,b.bin,size) < 0;
|
|
}
|
|
}
|
|
|
|
bool operator>(const Binary &b) {
|
|
if(size > b.size) {
|
|
return true;
|
|
} else if (size < b.size) {
|
|
return false;
|
|
} else {
|
|
return memcmp(bin,b.bin,size) > 0;
|
|
}
|
|
}
|
|
|
|
bool operator== (const Binary &b) {
|
|
if (size == b.size ) {
|
|
return memcmp(bin,b.bin, std::min(size, b.size)) == 0;
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
operator std::string() const {
|
|
return (const char*) bin;
|
|
}
|
|
|
|
Binary& set_data(const char *data) {
|
|
bin = (unsigned char *) data;
|
|
size = strlen(data);
|
|
return *this;
|
|
}
|
|
|
|
void copy(char *inbin, size_t insize) {
|
|
bin = (unsigned char *) operator new(insize);
|
|
allocated = true;
|
|
size = insize;
|
|
memcpy(bin, inbin, size);
|
|
}
|
|
};
|
|
|
|
inline bool operator < (const Binary &a, const Binary &b) {
|
|
|
|
if(a.size < b.size) {
|
|
return true;
|
|
} else if (a.size > b.size) {
|
|
return false;
|
|
} else {
|
|
return memcmp(a.bin,b.bin, std::min(a.size, b.size)) < 0;
|
|
}
|
|
}
|
|
|