Alien-XGBoost
view release on metacpan or search on metacpan
xgboost/dmlc-core/src/io/s3_filesys.cc view on Meta::CPAN
buf.length(), md);
return Base64(md, kLen);
}
// remove the beginning slash at name
inline const char *RemoveBeginSlash(const std::string &name) {
const char *s = name.c_str();
while (*s == '/') {
++s;
}
return s;
}
// fin dthe error field of the header
inline bool FindHttpError(const std::string &header) {
std::string hd, ret;
int code;
std::istringstream is(header);
if (is >> hd >> code >> ret) {
if (code == 206 || ret == "OK") {
return false;
} else if (ret == "Continue") {
return false;
}
}
return true;
}
/*!
* \brief get the datestring needed by AWS
* \return datestring
*/
inline std::string GetDateString(void) {
time_t t = time(NULL);
tm gmt;
gmtime_r(&t, &gmt);
char buf[256];
strftime(buf, 256, "%a, %d %b %Y %H:%M:%S GMT", &gmt);
return std::string(buf);
}
// curl callback to write sstream
size_t WriteSStreamCallback(char *buf, size_t size, size_t count, void *fp) {
static_cast<std::ostringstream*>(fp)->write(buf, size * count);
return size * count;
}
// callback by curl to write to std::string
size_t WriteStringCallback(char *buf, size_t size, size_t count, void *fp) {
size *= count;
std::string *str = static_cast<std::string*>(fp);
size_t len = str->length();
str->resize(len + size);
std::memcpy(BeginPtr(*str) + len, buf, size);
return size;
}
std::string getEndpoint(std::string region_name) {
// using if elseif chain switching region_name
if (region_name == "us-east-1") {
return "s3.amazonaws.com";
} else if (region_name == "cn-north-1") {
return "s3.cn-north-1.amazonaws.com.cn";
} else {
std::string result_endpoint = std::string("s3-");
result_endpoint.append(region_name);
result_endpoint.append(".amazonaws.com");
return result_endpoint;
}
}
// useful callback for reading memory
struct ReadStringStream {
const char *dptr;
size_t nleft;
// constructor
explicit ReadStringStream(const std::string &data) {
dptr = BeginPtr(data);
nleft = data.length();
}
// curl callback to write sstream
static size_t Callback(char *buf, size_t size, size_t count, void *fp) {
size *= count;
ReadStringStream *s = static_cast<ReadStringStream*>(fp);
size_t nread = std::min(size, s->nleft);
std::memcpy(buf, s->dptr, nread);
s->dptr += nread; s->nleft -= nread;
return nread;
}
};
/*!
* \brief reader stream that can be used to read from CURL
*/
class CURLReadStreamBase : public SeekStream {
public:
virtual ~CURLReadStreamBase() {
this->Cleanup();
}
virtual size_t Tell(void) {
return curr_bytes_;
}
virtual bool AtEnd(void) const {
return at_end_;
}
virtual void Write(const void *ptr, size_t size) {
LOG(FATAL) << "CURL.ReadStream cannot be used for write";
}
// lazy seek function
virtual void Seek(size_t pos) {
if (curr_bytes_ != pos) {
this->Cleanup();
curr_bytes_ = pos;
}
}
virtual size_t Read(void *ptr, size_t size);
protected:
CURLReadStreamBase()
: mcurl_(NULL), ecurl_(NULL), slist_(NULL),
read_ptr_(0), curr_bytes_(0), at_end_(false) {
expect_file_size_ = 0;
}
/*!
* \brief initialize the ecurl request,
* \param begin_bytes the beginning bytes of the stream
* \param ecurl a curl easy handle that can be used to set request
( run in 0.616 second using v1.01-cache-2.11-cpan-39bf76dae61 )