]> git.proxmox.com Git - ceph.git/blob - ceph/src/jaegertracing/thrift/lib/lua/src/longnumberutils.c
update source to Ceph Pacific 16.2.2
[ceph.git] / ceph / src / jaegertracing / thrift / lib / lua / src / longnumberutils.c
1 //
2 // Licensed to the Apache Software Foundation (ASF) under one
3 // or more contributor license agreements. See the NOTICE file
4 // distributed with this work for additional information
5 // regarding copyright ownership. The ASF licenses this file
6 // to you under the Apache License, Version 2.0 (the
7 // "License"); you may not use this file except in compliance
8 // with the License. You may obtain a copy of the License at
9 //
10 // http://www.apache.org/licenses/LICENSE-2.0
11 //
12 // Unless required by applicable law or agreed to in writing,
13 // software distributed under the License is distributed on an
14 // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15 // KIND, either express or implied. See the License for the
16 // specific language governing permissions and limitations
17 // under the License.
18 //
19
20 #include <lua.h>
21 #include <lauxlib.h>
22 #include <stdlib.h>
23 #include <inttypes.h>
24
25 const char * LONG_NUM_TYPE = "__thrift_longnumber";
26 int64_t lualongnumber_checklong(lua_State *L, int index) {
27 switch (lua_type(L, index)) {
28 case LUA_TNUMBER:
29 return (int64_t)lua_tonumber(L, index);
30 case LUA_TSTRING:
31 return atoll(lua_tostring(L, index));
32 default:
33 return *((int64_t *)luaL_checkudata(L, index, LONG_NUM_TYPE));
34 }
35 }
36
37 // Creates a new longnumber and pushes it onto the statck
38 int64_t * lualongnumber_pushlong(lua_State *L, int64_t *val) {
39 int64_t *data = (int64_t *)lua_newuserdata(L, sizeof(int64_t)); // longnum
40 luaL_getmetatable(L, LONG_NUM_TYPE); // longnum, mt
41 lua_setmetatable(L, -2); // longnum
42 if (val) {
43 *data = *val;
44 }
45 return data;
46 }
47