fd_manager.cpp 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. /*
  2. * fd_manager.cpp
  3. *
  4. * Created on: Sep 25, 2017
  5. * Author: root
  6. */
  7. #include "fd_manager.h"
  8. int fd_manager_t::fd_exist(int fd)
  9. {
  10. return fd_to_fd64_mp.find(fd)!=fd_to_fd64_mp.end();
  11. }
  12. int fd_manager_t::exist(fd64_t fd64)
  13. {
  14. return fd64_to_fd_mp.find(fd64)!=fd64_to_fd_mp.end();
  15. }
  16. int fd_manager_t::to_fd(fd64_t fd64)
  17. {
  18. assert(exist(fd64));
  19. return fd64_to_fd_mp[fd64];
  20. }
  21. void fd_manager_t::fd64_close(fd64_t fd64)
  22. {
  23. assert(exist(fd64));
  24. int fd=fd64_to_fd_mp[fd64];
  25. fd64_to_fd_mp.erase(fd64);
  26. fd_to_fd64_mp.erase(fd);
  27. if(exist_info(fd64))
  28. {
  29. fd_info_mp.erase(fd64);
  30. }
  31. close(fd);
  32. }
  33. void fd_manager_t::reserve(int n)
  34. {
  35. fd_to_fd64_mp.reserve(n);
  36. fd64_to_fd_mp.reserve(n);
  37. fd_info_mp.reserve(n);
  38. }
  39. u64_t fd_manager_t::create(int fd)
  40. {
  41. assert(!fd_exist(fd));
  42. fd64_t fd64=counter++;
  43. fd_to_fd64_mp[fd]=fd64;
  44. fd64_to_fd_mp[fd64]=fd;
  45. return fd64;
  46. }
  47. fd_manager_t::fd_manager_t()
  48. {
  49. counter=u32_t(-1);
  50. counter+=100;
  51. reserve(10007);
  52. }
  53. fd_info_t & fd_manager_t::get_info(fd64_t fd64)
  54. {
  55. assert(exist(fd64));
  56. return fd_info_mp[fd64];
  57. }
  58. int fd_manager_t::exist_info(fd64_t fd64)
  59. {
  60. return fd_info_mp.find(fd64)!=fd_info_mp.end();
  61. }