中间件底层,websocket

bitset.hpp 1.9KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. //******************************************************************************
  2. // RCF - Remote Call Framework
  3. //
  4. // Copyright (c) 2005 - 2020, Delta V Software. All rights reserved.
  5. // http://www.deltavsoft.com
  6. //
  7. // RCF is distributed under dual licenses - closed source or GPL.
  8. // Consult your particular license for conditions of use.
  9. //
  10. // If you have not purchased a commercial license, you are using RCF
  11. // under GPL terms.
  12. //
  13. // Version: 3.2
  14. // Contact: support <at> deltavsoft.com
  15. //
  16. //******************************************************************************
  17. #ifndef INCLUDE_SF_BITSET_HPP
  18. #define INCLUDE_SF_BITSET_HPP
  19. #include <bitset>
  20. #include <RCF/Export.hpp>
  21. #include <RCF/Tools.hpp>
  22. namespace SF {
  23. class Archive;
  24. class I_BitsetWrapper
  25. {
  26. public:
  27. virtual std::size_t size() = 0;
  28. virtual void resize(std::size_t newSize) = 0;
  29. virtual void setBit(std::size_t idx, bool newValue) = 0;
  30. virtual bool getBit(std::size_t idx) = 0;
  31. };
  32. template<std::size_t N>
  33. class BitsetWrapper : public I_BitsetWrapper
  34. {
  35. public:
  36. BitsetWrapper(std::bitset<N> & bits) : mBits(bits)
  37. {
  38. }
  39. virtual std::size_t size()
  40. {
  41. return mBits.size();
  42. }
  43. virtual void resize(std::size_t newSize)
  44. {
  45. RCF_ASSERT(newSize == N);
  46. }
  47. virtual void setBit(std::size_t idx, bool newValue)
  48. {
  49. mBits[idx] = newValue;
  50. }
  51. virtual bool getBit(std::size_t idx)
  52. {
  53. return mBits[idx];
  54. }
  55. private:
  56. std::bitset<N> & mBits;
  57. };
  58. RCF_EXPORT void serializeBitset(SF::Archive & ar, I_BitsetWrapper & bits);
  59. template<std::size_t N>
  60. void serialize(SF::Archive & ar, std::bitset<N> & bits)
  61. {
  62. BitsetWrapper<N> wrapper(bits);
  63. serializeBitset(ar, wrapper);
  64. }
  65. }
  66. #endif // ! INCLUDE_SF_BITSET_HPP