Page Menu
Home
Phorge
Search
Configure Global Search
Log In
Files
F3072063
queuing.c
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
4 KB
Referenced Files
None
Subscribers
None
queuing.c
View Options
#include
<string.h>
#include
"ant.h"
#include
"errors.h"
#include
"runtime.h"
#include
"internal.h"
#include
"descriptors.h"
#include
"modules/symbol.h"
#include
"streams/queuing.h"
static
ant_value_t
g_count_qs_proto
;
static
ant_value_t
g_bytelength_qs_proto
;
static
ant_value_t
js_count_size
(
ant_t
*
js
,
ant_value_t
*
args
,
int
nargs
)
{
return
js_mknum
(
1
);
}
static
ant_value_t
js_bytelength_size
(
ant_t
*
js
,
ant_value_t
*
args
,
int
nargs
)
{
if
(
nargs
<
1
||
vtype
(
args
[
0
])
==
T_UNDEF
||
is_null
(
args
[
0
]))
return
js_mkerr_typed
(
js
,
JS_ERR_TYPE
,
"Cannot get property 'byteLength' of undefined or null"
);
if
(
!
is_object_type
(
args
[
0
]))
return
js_mkundef
();
ant_value_t
bl
=
js_get
(
js
,
args
[
0
],
"byteLength"
);
if
(
is_err
(
bl
))
return
bl
;
if
(
vtype
(
bl
)
==
T_NUM
)
return
bl
;
return
js_mkundef
();
}
static
ant_value_t
js_qs_get_highwatermark
(
ant_t
*
js
,
ant_value_t
*
args
,
int
nargs
)
{
ant_value_t
s
=
js_get_slot
(
js
->
this_val
,
SLOT_DATA
);
if
(
vtype
(
s
)
==
T_NUM
)
return
s
;
return
js_mkundef
();
}
static
ant_value_t
js_qs_get_size
(
ant_t
*
js
,
ant_value_t
*
args
,
int
nargs
)
{
ant_value_t
proto
=
js_get_proto
(
js
,
js
->
this_val
);
return
js_get_slot
(
proto
,
SLOT_DATA
);
}
static
ant_value_t
qs_ctor
(
ant_t
*
js
,
ant_value_t
*
args
,
int
nargs
,
ant_value_t
proto
,
const
char
*
name
)
{
if
(
vtype
(
js
->
new_target
)
==
T_UNDEF
)
return
js_mkerr_typed
(
js
,
JS_ERR_TYPE
,
"%s constructor requires 'new'"
,
name
);
if
(
nargs
<
1
||
vtype
(
args
[
0
])
==
T_UNDEF
||
is_null
(
args
[
0
]))
return
js_mkerr_typed
(
js
,
JS_ERR_TYPE
,
"Failed to construct '%s': 1 argument required"
,
name
);
if
(
!
is_object_type
(
args
[
0
]))
return
js_mkerr_typed
(
js
,
JS_ERR_TYPE
,
"Failed to construct '%s': argument is not an object"
,
name
);
ant_value_t
hv
=
js_get
(
js
,
args
[
0
],
"highWaterMark"
);
if
(
is_err
(
hv
))
return
hv
;
if
(
vtype
(
hv
)
==
T_UNDEF
)
return
js_mkerr_typed
(
js
,
JS_ERR_TYPE
,
"Failed to construct '%s': member highWaterMark is required"
,
name
);
double
hwm
=
js_to_number
(
js
,
hv
);
ant_value_t
obj
=
js_mkobj
(
js
);
ant_value_t
resolved
=
js_instance_proto_from_new_target
(
js
,
proto
);
if
(
is_object_type
(
resolved
))
js_set_proto_init
(
obj
,
resolved
);
js_set_slot
(
obj
,
SLOT_DATA
,
js_mknum
(
hwm
));
return
obj
;
}
static
ant_value_t
js_count_qs_ctor
(
ant_t
*
js
,
ant_value_t
*
args
,
int
nargs
)
{
return
qs_ctor
(
js
,
args
,
nargs
,
g_count_qs_proto
,
"CountQueuingStrategy"
);
}
static
ant_value_t
js_bytelength_qs_ctor
(
ant_t
*
js
,
ant_value_t
*
args
,
int
nargs
)
{
return
qs_ctor
(
js
,
args
,
nargs
,
g_bytelength_qs_proto
,
"ByteLengthQueuingStrategy"
);
}
static
ant_value_t
make_size_fn
(
ant_t
*
js
,
ant_cfunc_t
cfunc
,
int
length
)
{
ant_value_t
obj
=
js_mkobj
(
js
);
js_set_slot
(
obj
,
SLOT_CFUNC
,
js_mkfun
(
cfunc
));
js_mkprop_fast
(
js
,
obj
,
"name"
,
4
,
js_mkstr
(
js
,
"size"
,
4
));
js_set_descriptor
(
js
,
obj
,
"name"
,
4
,
0
);
js_mkprop_fast
(
js
,
obj
,
"length"
,
6
,
js_mknum
(
length
));
js_set_descriptor
(
js
,
obj
,
"length"
,
6
,
0
);
return
js_obj_to_func
(
obj
);
}
void
init_queuing_strategies_module
(
void
)
{
ant_t
*
js
=
rt
->
js
;
ant_value_t
g
=
js_glob
(
js
);
g_count_qs_proto
=
js_mkobj
(
js
);
js_set_slot
(
g_count_qs_proto
,
SLOT_DATA
,
make_size_fn
(
js
,
js_count_size
,
0
));
js_set_getter_desc
(
js
,
g_count_qs_proto
,
"highWaterMark"
,
13
,
js_mkfun
(
js_qs_get_highwatermark
),
JS_DESC_C
);
js_set_getter_desc
(
js
,
g_count_qs_proto
,
"size"
,
4
,
js_mkfun
(
js_qs_get_size
),
JS_DESC_C
);
js_set_sym
(
js
,
g_count_qs_proto
,
get_toStringTag_sym
(),
js_mkstr
(
js
,
"CountQueuingStrategy"
,
20
));
ant_value_t
cqs_ctor
=
js_make_ctor
(
js
,
js_count_qs_ctor
,
g_count_qs_proto
,
"CountQueuingStrategy"
,
20
);
js_set
(
js
,
g
,
"CountQueuingStrategy"
,
cqs_ctor
);
js_set_descriptor
(
js
,
g
,
"CountQueuingStrategy"
,
20
,
JS_DESC_W
|
JS_DESC_C
);
g_bytelength_qs_proto
=
js_mkobj
(
js
);
js_set_slot
(
g_bytelength_qs_proto
,
SLOT_DATA
,
make_size_fn
(
js
,
js_bytelength_size
,
1
));
js_set_getter_desc
(
js
,
g_bytelength_qs_proto
,
"highWaterMark"
,
13
,
js_mkfun
(
js_qs_get_highwatermark
),
JS_DESC_C
);
js_set_getter_desc
(
js
,
g_bytelength_qs_proto
,
"size"
,
4
,
js_mkfun
(
js_qs_get_size
),
JS_DESC_C
);
js_set_sym
(
js
,
g_bytelength_qs_proto
,
get_toStringTag_sym
(),
js_mkstr
(
js
,
"ByteLengthQueuingStrategy"
,
25
));
ant_value_t
blqs_ctor
=
js_make_ctor
(
js
,
js_bytelength_qs_ctor
,
g_bytelength_qs_proto
,
"ByteLengthQueuingStrategy"
,
25
);
js_set
(
js
,
g
,
"ByteLengthQueuingStrategy"
,
blqs_ctor
);
js_set_descriptor
(
js
,
g
,
"ByteLengthQueuingStrategy"
,
25
,
JS_DESC_W
|
JS_DESC_C
);
}
void
gc_mark_queuing_strategies
(
ant_t
*
js
,
void
(
*
mark
)(
ant_t
*
,
ant_value_t
))
{
mark
(
js
,
g_count_qs_proto
);
mark
(
js
,
g_bytelength_qs_proto
);
}
File Metadata
Details
Attached
Mime Type
text/x-c
Expires
Sat, Apr 4, 12:58 AM (2 d)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
520809
Default Alt Text
queuing.c (4 KB)
Attached To
Mode
rANT Ant
Attached
Detach File
Event Timeline
Log In to Comment