erlang各种有用的函数包括一些有用nif封装,还有一些性能测试case。
Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.
 
 
 
 
 
 

103 rader
1.9 KiB

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