#include #include #include 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; } }