No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.

85 líneas
1.6 KiB

  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. ERL_NIF_TERM
  5. make_atom(ErlNifEnv* env, const char* name)
  6. {
  7. ERL_NIF_TERM ret;
  8. if(enif_make_existing_atom(env, name, &ret, ERL_NIF_LATIN1)) {
  9. return ret;
  10. }
  11. return enif_make_atom(env, name);
  12. }
  13. ERL_NIF_TERM
  14. make_ok(jiffy_st* st, ErlNifEnv* env, ERL_NIF_TERM value)
  15. {
  16. return enif_make_tuple2(env, st->atom_ok, value);
  17. }
  18. ERL_NIF_TERM
  19. make_error(jiffy_st* st, ErlNifEnv* env, const char* error)
  20. {
  21. return enif_make_tuple2(env, st->atom_error, make_atom(env, error));
  22. }
  23. int
  24. get_bytes_per_iter(ErlNifEnv* env, ERL_NIF_TERM val, size_t* bpi)
  25. {
  26. jiffy_st* st = (jiffy_st*) enif_priv_data(env);
  27. const ERL_NIF_TERM* tuple;
  28. int arity;
  29. unsigned int bytes;
  30. if(!enif_get_tuple(env, val, &arity, &tuple)) {
  31. return 0;
  32. }
  33. if(arity != 2) {
  34. return 0;
  35. }
  36. if(enif_compare(tuple[0], st->atom_bytes_per_iter) != 0) {
  37. return 0;
  38. }
  39. if(!enif_get_uint(env, tuple[1], &bytes)) {
  40. return 0;
  41. }
  42. *bpi = (size_t) bytes;
  43. return 1;
  44. }
  45. int
  46. should_yield(size_t used, size_t limit)
  47. {
  48. if(limit == 0 || used < limit) {
  49. return 0;
  50. }
  51. return 1;
  52. }
  53. int
  54. consume_timeslice(ErlNifEnv* env, size_t used, size_t limit)
  55. {
  56. #if(ERL_NIF_MAJOR_VERSION >= 2 && ERL_NIF_MINOR_VERSION >= 4)
  57. double u = (double) used;
  58. double l = (double) limit;
  59. int perc = (int) (100.0 * (u / l));
  60. if(perc < 1) {
  61. perc = 1;
  62. } else if(perc > 100) {
  63. perc = 100;
  64. }
  65. return enif_consume_timeslice(env, perc);
  66. #else
  67. return 0;
  68. #endif
  69. }