@@ -1077,6 +1077,13 @@ static int Lslice_leave(lua_State *L) {
1077
1077
return 2 ;
1078
1078
}
1079
1079
1080
+ LUALIB_API int lpb_newslice (lua_State * L , const char * s , size_t len ) {
1081
+ lpb_SliceEx * S = (lpb_SliceEx * )lua_newuserdata (L , sizeof (lpb_SliceEx ));
1082
+ * S = lpb_initext (pb_lslice (s , len ));
1083
+ luaL_setmetatable (L , PB_SLICE );
1084
+ return 1 ;
1085
+ }
1086
+
1080
1087
LUALIB_API int luaopen_pb_slice (lua_State * L ) {
1081
1088
luaL_Reg libs [] = {
1082
1089
{ "__tostring" , Lslice_tostring },
@@ -1672,11 +1679,9 @@ static int lpb_decode(lpb_Env *e, pb_Type *t) {
1672
1679
return 1 ;
1673
1680
}
1674
1681
1675
- static int Lpb_decode (lua_State * L ) {
1682
+ static int lpb_decode_ex (lua_State * L , lpb_SliceEx s ) {
1676
1683
lpb_State * LS = default_lstate (L );
1677
1684
pb_Type * t = lpb_type (& LS -> base , luaL_checkstring (L , 1 ));
1678
- lpb_SliceEx s = lua_isnoneornil (L , 2 ) ? lpb_initext (pb_lslice (NULL , 0 ))
1679
- : lpb_initext (lpb_checkslice (L , 2 ));
1680
1685
lpb_Env e ;
1681
1686
argcheck (L , t != NULL , 1 , "type '%s' does not exists" , lua_tostring (L , 1 ));
1682
1687
lua_settop (L , 3 );
@@ -1688,6 +1693,11 @@ static int Lpb_decode(lua_State *L) {
1688
1693
return lpb_decode (& e , t );
1689
1694
}
1690
1695
1696
+ static int Lpb_decode (lua_State * L ) {
1697
+ lpb_SliceEx s = lua_isnoneornil (L , 2 ) ? lpb_initext (pb_lslice (NULL , 0 ))
1698
+ : lpb_initext (lpb_checkslice (L , 2 ));
1699
+ return lpb_decode_ex (L , s );
1700
+ }
1691
1701
1692
1702
/* pb module interface */
1693
1703
@@ -1756,6 +1766,18 @@ LUALIB_API int luaopen_pb(lua_State *L) {
1756
1766
return 1 ;
1757
1767
}
1758
1768
1769
+ static int Lpb_decode_unsafe (lua_State * L ) {
1770
+ return lpb_decode_ex (L ,
1771
+ lpb_initext (pb_lslice (
1772
+ (const char * )lua_touserdata (L , 2 ),
1773
+ (size_t )luaL_checkinteger (L , 3 ))));
1774
+ }
1775
+
1776
+ LUALIB_API int luaopen_pb_decode_unsafe (lua_State * L ) {
1777
+ lua_pushcfunction (L , Lpb_decode_unsafe );
1778
+ return 1 ;
1779
+ }
1780
+
1759
1781
1760
1782
PB_NS_END
1761
1783
0 commit comments