erlang各种有用的函数包括一些有用nif封装,还有一些性能测试case。
Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

71 рядки
1.3 KiB

5 роки тому
  1. #include "erl_nif.h"
  2. class ErlTerm {
  3. public:
  4. ERL_NIF_TERM t;
  5. static void *operator new(size_t size) {
  6. return enif_alloc(size);
  7. }
  8. static void operator delete(void *block) {
  9. enif_free(block);
  10. }
  11. bool operator< (const ErlTerm &term) {
  12. if (enif_compare(t, term.t) < 0)
  13. return true;
  14. return false;
  15. }
  16. bool operator< (ErlTerm &term) {
  17. if (enif_compare(t, term.t) < 0)
  18. return true;
  19. return false;
  20. }
  21. bool operator> (const ErlTerm &term) {
  22. if (enif_compare(t, term.t) > 0)
  23. return true;
  24. return false;
  25. }
  26. bool operator> (ErlTerm &term) {
  27. if (enif_compare(t, term.t) > 0)
  28. return true;
  29. return false;
  30. }
  31. bool operator== (const ErlTerm &term) {
  32. if (enif_compare(t, term.t) == 0)
  33. return true;
  34. return false;
  35. }
  36. bool operator== (ErlTerm &term) {
  37. if (enif_compare(t, term.t) == 0)
  38. return true;
  39. return false;
  40. }
  41. };
  42. inline bool operator < (const ErlTerm &a, const ErlTerm &b) {
  43. if (enif_compare(a.t, b.t) < 0)
  44. return true;
  45. return false;
  46. }
  47. #if 0
  48. // extend std::hash to understand ErlTerm used by hashmap not btree
  49. namespace std {
  50. template <>
  51. struct hash<ErlTerm>
  52. {
  53. size_t operator()(const ErlTerm& term) const
  54. {
  55. return (size_t) enif_hash_term(term.t);
  56. }
  57. };
  58. }
  59. #endif