#include "libcef_dll/cpptoc/stream_writer_cpptoc.h"
#include "libcef_dll/ctocpp/write_handler_ctocpp.h"
#include "libcef_dll/shutdown_checker.h"
CEF_EXPORT cef_stream_writer_t* cef_stream_writer_create_for_file(
const cef_string_t* fileName) {
shutdown_checker::AssertNotShutdown();
DCHECK(fileName);
if (!fileName)
return NULL;
CefRefPtr<CefStreamWriter> _retval =
CefStreamWriter::CreateForFile(CefString(fileName));
return CefStreamWriterCppToC::Wrap(_retval);
}
CEF_EXPORT cef_stream_writer_t* cef_stream_writer_create_for_handler(
cef_write_handler_t* handler) {
shutdown_checker::AssertNotShutdown();
DCHECK(handler);
if (!handler)
return NULL;
CefRefPtr<CefStreamWriter> _retval =
CefStreamWriter::CreateForHandler(CefWriteHandlerCToCpp::Wrap(handler));
return CefStreamWriterCppToC::Wrap(_retval);
}
namespace {
size_t CEF_CALLBACK stream_writer_write(struct _cef_stream_writer_t* self,
const void* ptr,
size_t size,
size_t n) {
shutdown_checker::AssertNotShutdown();
DCHECK(self);
if (!self)
return 0;
DCHECK(ptr);
if (!ptr)
return 0;
size_t _retval = CefStreamWriterCppToC::Get(self)->Write(ptr, size, n);
return _retval;
}
int CEF_CALLBACK stream_writer_seek(struct _cef_stream_writer_t* self,
int64 offset,
int whence) {
shutdown_checker::AssertNotShutdown();
DCHECK(self);
if (!self)
return 0;
int _retval = CefStreamWriterCppToC::Get(self)->Seek(offset, whence);
return _retval;
}
int64 CEF_CALLBACK stream_writer_tell(struct _cef_stream_writer_t* self) {
shutdown_checker::AssertNotShutdown();
DCHECK(self);
if (!self)
return 0;
int64 _retval = CefStreamWriterCppToC::Get(self)->Tell();
return _retval;
}
int CEF_CALLBACK stream_writer_flush(struct _cef_stream_writer_t* self) {
shutdown_checker::AssertNotShutdown();
DCHECK(self);
if (!self)
return 0;
int _retval = CefStreamWriterCppToC::Get(self)->Flush();
return _retval;
}
int CEF_CALLBACK stream_writer_may_block(struct _cef_stream_writer_t* self) {
shutdown_checker::AssertNotShutdown();
DCHECK(self);
if (!self)
return 0;
bool _retval = CefStreamWriterCppToC::Get(self)->MayBlock();
return _retval;
}
}
CefStreamWriterCppToC::CefStreamWriterCppToC() {
GetStruct()->write = stream_writer_write;
GetStruct()->seek = stream_writer_seek;
GetStruct()->tell = stream_writer_tell;
GetStruct()->flush = stream_writer_flush;
GetStruct()->may_block = stream_writer_may_block;
}
CefStreamWriterCppToC::~CefStreamWriterCppToC() {
shutdown_checker::AssertNotShutdown();
}
template <>
CefRefPtr<CefStreamWriter> CefCppToCRefCounted<
CefStreamWriterCppToC,
CefStreamWriter,
cef_stream_writer_t>::UnwrapDerived(CefWrapperType type,
cef_stream_writer_t* s) {
NOTREACHED() << "Unexpected class type: " << type;
return nullptr;
}
template <>
CefWrapperType CefCppToCRefCounted<CefStreamWriterCppToC,
CefStreamWriter,
cef_stream_writer_t>::kWrapperType =
WT_STREAM_WRITER;