fd_manager.cpp 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  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. //assert(close(fd)==0);
  32. sock_close(fd);
  33. }
  34. void fd_manager_t::reserve(int n)
  35. {
  36. fd_to_fd64_mp.reserve(n);
  37. fd64_to_fd_mp.reserve(n);
  38. fd_info_mp.reserve(n);
  39. }
  40. u64_t fd_manager_t::create(int fd)
  41. {
  42. assert(!fd_exist(fd));
  43. fd64_t fd64=counter++;
  44. fd_to_fd64_mp[fd]=fd64;
  45. fd64_to_fd_mp[fd64]=fd;
  46. return fd64;
  47. }
  48. fd_manager_t::fd_manager_t()
  49. {
  50. counter=u32_t(-1);
  51. counter+=100;
  52. reserve(10007);
  53. }
  54. fd_info_t & fd_manager_t::get_info(fd64_t fd64)
  55. {
  56. assert(exist(fd64));
  57. return fd_info_mp[fd64];
  58. }
  59. int fd_manager_t::exist_info(fd64_t fd64)
  60. {
  61. return fd_info_mp.find(fd64)!=fd_info_mp.end();
  62. }