Skip to content

Commit

Permalink
Buffer, feat: support Buffer.buffer.
Browse files Browse the repository at this point in the history
  • Loading branch information
xicilion committed Jul 10, 2021
1 parent e8f275a commit 0b413ea
Show file tree
Hide file tree
Showing 6 changed files with 38 additions and 1 deletion.
1 change: 1 addition & 0 deletions fibjs/include/Buffer.h
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ class Buffer : public Buffer_base {
virtual result_t _indexed_setter(uint32_t index, int32_t newVal);
virtual result_t symbol_iterator(obj_ptr<Iterator_base>& retVal);
virtual result_t get_length(int32_t& retVal);
virtual result_t get_buffer(v8::Local<v8::ArrayBuffer>& retVal);
virtual result_t resize(int32_t sz);
virtual result_t append(Buffer_base* data);
virtual result_t append(exlib::string str, exlib::string codec);
Expand Down
18 changes: 17 additions & 1 deletion fibjs/include/ifs/Buffer.h
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ class Buffer_base : public object_base {
virtual result_t _indexed_setter(uint32_t index, int32_t newVal) = 0;
virtual result_t symbol_iterator(obj_ptr<Iterator_base>& retVal) = 0;
virtual result_t get_length(int32_t& retVal) = 0;
virtual result_t get_buffer(v8::Local<v8::ArrayBuffer>& retVal) = 0;
virtual result_t resize(int32_t sz) = 0;
virtual result_t append(Buffer_base* data) = 0;
virtual result_t append(exlib::string str, exlib::string codec) = 0;
Expand Down Expand Up @@ -139,6 +140,7 @@ class Buffer_base : public object_base {
static void i_IndexedSetter(uint32_t index, v8::Local<v8::Value> value, const v8::PropertyCallbackInfo<v8::Value>& args);
static void s_symbol_iterator(const v8::FunctionCallbackInfo<v8::Value>& args);
static void s_get_length(v8::Local<v8::Name> property, const v8::PropertyCallbackInfo<v8::Value>& args);
static void s_get_buffer(v8::Local<v8::Name> property, const v8::PropertyCallbackInfo<v8::Value>& args);
static void s_resize(const v8::FunctionCallbackInfo<v8::Value>& args);
static void s_append(const v8::FunctionCallbackInfo<v8::Value>& args);
static void s_write(const v8::FunctionCallbackInfo<v8::Value>& args);
Expand Down Expand Up @@ -282,7 +284,8 @@ inline ClassInfo& Buffer_base::class_info()
};

static ClassData::ClassProperty s_property[] = {
{ "length", s_get_length, block_set, false }
{ "length", s_get_length, block_set, false },
{ "buffer", s_get_buffer, block_set, false }
};

static ClassData::ClassIndexed s_indexed = {
Expand Down Expand Up @@ -634,6 +637,19 @@ inline void Buffer_base::s_get_length(v8::Local<v8::Name> property, const v8::Pr
METHOD_RETURN();
}

inline void Buffer_base::s_get_buffer(v8::Local<v8::Name> property, const v8::PropertyCallbackInfo<v8::Value>& args)
{
v8::Local<v8::ArrayBuffer> vr;

METHOD_NAME("Buffer.buffer");
METHOD_INSTANCE(Buffer_base);
PROPERTY_ENTER();

hr = pInst->get_buffer(vr);

METHOD_RETURN();
}

inline void Buffer_base::s_resize(const v8::FunctionCallbackInfo<v8::Value>& args)
{
METHOD_NAME("Buffer.resize");
Expand Down
5 changes: 5 additions & 0 deletions fibjs/include/utils.h
Original file line number Diff line number Diff line change
Expand Up @@ -1022,6 +1022,11 @@ inline v8::Local<v8::Value> GetReturnValue(v8::Isolate* isolate, v8::Local<v8::F
return func;
}

inline v8::Local<v8::Value> GetReturnValue(v8::Isolate* isolate, v8::Local<v8::ArrayBuffer>& array)
{
return array;
}

template <class T>
inline v8::Local<v8::Value> GetReturnValue(v8::Isolate* isolate, obj_ptr<T>& obj)
{
Expand Down
7 changes: 7 additions & 0 deletions fibjs/src/global/Buffer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -369,6 +369,13 @@ result_t Buffer::get_length(int32_t& retVal)
return 0;
}

result_t Buffer::get_buffer(v8::Local<v8::ArrayBuffer>& retVal)
{
retVal = v8::ArrayBuffer::New(holder()->m_isolate,
(void*)m_data.c_str(), m_data.length());
return 0;
}

result_t Buffer::resize(int32_t sz)
{
if (sz < 0)
Expand Down
3 changes: 3 additions & 0 deletions idl/zh-cn/Buffer.idl
Original file line number Diff line number Diff line change
Expand Up @@ -170,6 +170,9 @@ interface Buffer : object
/*! @brief 获取缓存对象的尺寸 */
readonly Integer length;

/*! @brief 以 ArrayBuffer 格式返回缓存数据 */
readonly ArrayBuffer buffer;

/*! @brief 修改缓存对象尺寸
@param sz 指定新尺寸
*/
Expand Down
5 changes: 5 additions & 0 deletions npm/types/dts/interface/Buffer.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -218,6 +218,11 @@ declare class Class_Buffer extends Class_object {
*/
readonly length: number;

/**
* @description 以 ArrayBuffer 格式返回缓存数据
*/
readonly buffer: ArrayBuffer;

/**
* @description 修改缓存对象尺寸
* @param sz 指定新尺寸
Expand Down

0 comments on commit 0b413ea

Please sign in to comment.