免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3140 | 回复: 5
打印 上一主题 下一主题

[算法] JSON nif for erlang [复制链接]

论坛徽章:
27
水瓶座
日期:2014-08-22 21:06:34程序设计版块每日发帖之星
日期:2015-11-25 06:20:0015-16赛季CBA联赛之新疆
日期:2015-12-19 19:05:48IT运维版块每日发帖之星
日期:2015-12-25 06:20:31IT运维版块每日发帖之星
日期:2015-12-25 06:20:31IT运维版块每日发帖之星
日期:2015-12-25 06:20:3315-16赛季CBA联赛之上海
日期:2016-04-15 19:51:31程序设计版块每日发帖之星
日期:2016-04-17 06:23:29程序设计版块每日发帖之星
日期:2016-04-23 06:20:00程序设计版块每日发帖之星
日期:2016-05-26 06:20:00每日论坛发贴之星
日期:2016-05-26 06:20:0015-16赛季CBA联赛之辽宁
日期:2017-02-16 23:59:47
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-10-05 08:51 |只看该作者 |倒序浏览
本帖最后由 shijiang1130 于 2014-10-06 16:58 编辑

https://github.com/davisp/jiffy

erlang解析json

论坛徽章:
0
2 [报告]
发表于 2014-10-06 15:14 |只看该作者
打不开了。

用 maps 解析多好,多方便 。。。

论坛徽章:
27
水瓶座
日期:2014-08-22 21:06:34程序设计版块每日发帖之星
日期:2015-11-25 06:20:0015-16赛季CBA联赛之新疆
日期:2015-12-19 19:05:48IT运维版块每日发帖之星
日期:2015-12-25 06:20:31IT运维版块每日发帖之星
日期:2015-12-25 06:20:31IT运维版块每日发帖之星
日期:2015-12-25 06:20:3315-16赛季CBA联赛之上海
日期:2016-04-15 19:51:31程序设计版块每日发帖之星
日期:2016-04-17 06:23:29程序设计版块每日发帖之星
日期:2016-04-23 06:20:00程序设计版块每日发帖之星
日期:2016-05-26 06:20:00每日论坛发贴之星
日期:2016-05-26 06:20:0015-16赛季CBA联赛之辽宁
日期:2017-02-16 23:59:47
3 [报告]
发表于 2014-10-06 16:59 |只看该作者
arserangel 发表于 2014-10-06 15:14
打不开了。

用 maps 解析多好,多方便 。。。
谢谢,更新了。

论坛徽章:
27
水瓶座
日期:2014-08-22 21:06:34程序设计版块每日发帖之星
日期:2015-11-25 06:20:0015-16赛季CBA联赛之新疆
日期:2015-12-19 19:05:48IT运维版块每日发帖之星
日期:2015-12-25 06:20:31IT运维版块每日发帖之星
日期:2015-12-25 06:20:31IT运维版块每日发帖之星
日期:2015-12-25 06:20:3315-16赛季CBA联赛之上海
日期:2016-04-15 19:51:31程序设计版块每日发帖之星
日期:2016-04-17 06:23:29程序设计版块每日发帖之星
日期:2016-04-23 06:20:00程序设计版块每日发帖之星
日期:2016-05-26 06:20:00每日论坛发贴之星
日期:2016-05-26 06:20:0015-16赛季CBA联赛之辽宁
日期:2017-02-16 23:59:47
4 [报告]
发表于 2014-10-06 17:00 |只看该作者
这个是用nif的。机制不同,和你用maps
  1. // This file is part of Jiffy released under the MIT license.
  2. // See the LICENSE file for more information.

  3. #include "jiffy.h"

  4. static int
  5. load(ErlNifEnv* env, void** priv, ERL_NIF_TERM info)
  6. {
  7.     jiffy_st* st = enif_alloc(sizeof(jiffy_st));
  8.     if(st == NULL) {
  9.         return 1;
  10.     }

  11.     st->atom_ok = make_atom(env, "ok");
  12.     st->atom_error = make_atom(env, "error");
  13.     st->atom_null = make_atom(env, "null");
  14.     st->atom_true = make_atom(env, "true");
  15.     st->atom_false = make_atom(env, "false");
  16.     st->atom_bignum = make_atom(env, "bignum");
  17.     st->atom_bignum_e = make_atom(env, "bignum_e");
  18.     st->atom_bigdbl = make_atom(env, "bigdbl");
  19.     st->atom_partial = make_atom(env, "partial");
  20.     st->atom_uescape = make_atom(env, "uescape");
  21.     st->atom_pretty = make_atom(env, "pretty");
  22.     st->atom_force_utf8 = make_atom(env, "force_utf8");
  23.     st->atom_iter = make_atom(env, "iter");
  24.     st->atom_bytes_per_iter = make_atom(env, "bytes_per_iter");
  25.     st->atom_return_maps = make_atom(env, "return_maps");
  26.     st->atom_nil = make_atom(env, "nil");
  27.     st->atom_use_nil = make_atom(env, "use_nil");

  28.     // Markers used in encoding
  29.     st->ref_object = make_atom(env, "$object_ref$");
  30.     st->ref_array = make_atom(env, "$array_ref$");

  31.     st->res_dec = enif_open_resource_type(
  32.             env,
  33.             NULL,
  34.             "decoder",
  35.             dec_destroy,
  36.             ERL_NIF_RT_CREATE | ERL_NIF_RT_TAKEOVER,
  37.             NULL
  38.         );

  39.     st->res_enc = enif_open_resource_type(
  40.             env,
  41.             NULL,
  42.             "encoder",
  43.             enc_destroy,
  44.             ERL_NIF_RT_CREATE | ERL_NIF_RT_TAKEOVER,
  45.             NULL
  46.         );

  47.     *priv = (void*) st;

  48.     return 0;
  49. }

  50. static int
  51. reload(ErlNifEnv* env, void** priv, ERL_NIF_TERM info)
  52. {
  53.     return 0;
  54. }

  55. static int
  56. upgrade(ErlNifEnv* env, void** priv, void** old_priv, ERL_NIF_TERM info)
  57. {
  58.     return load(env, priv, info);
  59. }

  60. static void
  61. unload(ErlNifEnv* env, void* priv)
  62. {
  63.     enif_free(priv);
  64.     return;
  65. }

  66. static ErlNifFunc funcs[] =
  67. {
  68.     {"nif_decode_init", 2, decode_init},
  69.     {"nif_decode_iter", 5, decode_iter},
  70.     {"nif_encode_init", 2, encode_init},
  71.     {"nif_encode_iter", 3, encode_iter}
  72. };

  73. ERL_NIF_INIT(jiffy, funcs, &load, &reload, &upgrade, &unload);
复制代码

论坛徽章:
27
水瓶座
日期:2014-08-22 21:06:34程序设计版块每日发帖之星
日期:2015-11-25 06:20:0015-16赛季CBA联赛之新疆
日期:2015-12-19 19:05:48IT运维版块每日发帖之星
日期:2015-12-25 06:20:31IT运维版块每日发帖之星
日期:2015-12-25 06:20:31IT运维版块每日发帖之星
日期:2015-12-25 06:20:3315-16赛季CBA联赛之上海
日期:2016-04-15 19:51:31程序设计版块每日发帖之星
日期:2016-04-17 06:23:29程序设计版块每日发帖之星
日期:2016-04-23 06:20:00程序设计版块每日发帖之星
日期:2016-05-26 06:20:00每日论坛发贴之星
日期:2016-05-26 06:20:0015-16赛季CBA联赛之辽宁
日期:2017-02-16 23:59:47
5 [报告]
发表于 2014-10-06 17:01 |只看该作者
如果原来的格式是json或者生成json的格式,这个也用maps做?

论坛徽章:
0
6 [报告]
发表于 2014-10-06 22:41 |只看该作者
shijiang1130 发表于 2014-10-06 17:01
如果原来的格式是json或者生成json的格式,这个也用maps做?


你现在开始写 nif 了?你现在工作是在写 erlang 么?

你的 c 底子不错啊。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP