/src/pmem.cxx

http://github.com/foodmike/PTypes · C++ · 86 lines · 57 code · 18 blank · 11 comment · 17 complexity · 67a19cf27c332df6c4d2e9313c0549ed MD5 · raw file

  1. /*
  2. *
  3. * C++ Portable Types Library (PTypes)
  4. * Version 2.1.1 Released 27-Jun-2007
  5. *
  6. * Copyright (C) 2001-2007 Hovik Melikyan
  7. *
  8. * http://www.melikyan.com/ptypes/
  9. *
  10. */
  11. #include <stdlib.h>
  12. #include "pport.h"
  13. PTYPES_BEGIN
  14. const int quant = 64;
  15. const int qmask = ~63;
  16. const int quant2 = 4096;
  17. const int qmask2 = ~4095;
  18. // dynamic reallocation policy for strings and lists
  19. int ptdecl memquantize(int a)
  20. {
  21. if (a <= 16)
  22. return 16;
  23. if (a <= 32)
  24. return 32;
  25. else if (a <= 2048)
  26. return (a + quant - 1) & qmask;
  27. else
  28. return (a + quant2 - 1) & qmask2;
  29. }
  30. void ptdecl memerror()
  31. {
  32. fatal(CRIT_FIRST + 5, "Not enough memory");
  33. }
  34. void* ptdecl memalloc(uint a)
  35. {
  36. if (a == 0)
  37. return nil;
  38. else
  39. {
  40. void* p = malloc(a);
  41. if (p == nil)
  42. memerror();
  43. return p;
  44. }
  45. }
  46. void* ptdecl memrealloc(void* p, uint a)
  47. {
  48. if (a == 0)
  49. {
  50. memfree(p);
  51. return nil;
  52. }
  53. else if (p == nil)
  54. return memalloc(a);
  55. else
  56. {
  57. p = realloc(p, a);
  58. if (p == nil)
  59. memerror();
  60. return p;
  61. }
  62. }
  63. void ptdecl memfree(void* p)
  64. {
  65. if (p != nil)
  66. free(p);
  67. }
  68. PTYPES_END