MIMECode.h
上传用户:weimei12
上传日期:2022-08-11
资源大小:185k
文件大小:4k
源码类别:

Email客户端

开发平台:

Visual C++

  1. #pragma once
  2. /********************************************************************
  3. created: 2008:10:29   11:04
  4. author: 李欣
  5. filename: c:MyProjectSimpleMailSimpleMailMIMECode.h
  6. classname:  CMIMECode
  7. purpose: a base class for Mime encoding
  8. *********************************************************************/
  9. class CMIMECode  
  10. {
  11. public:
  12. CMIMECode();
  13. virtual ~CMIMECode();
  14. ///<summary>
  15. ///   decode the string
  16. ///</summary>
  17. ///<param name = >
  18. ///   the string to be decoded
  19. ///</param>
  20. /// <returns>
  21. ///    the decoding result
  22. /// </returns>
  23. virtual CString Decode(IN LPCTSTR szDecoding) = 0;
  24. ///<summary>
  25. ///   encode the string   
  26. ///</summary>
  27. ///<param name = szEncoding>
  28. ///   the string to be encoded
  29. ///</param>
  30. ///<param name = nSize>
  31. ///   the size of szEncoding
  32. ///</param>
  33. /// <returns>
  34. ///    the encoding result
  35. /// </returns>
  36. virtual CString Encode(IN LPCTSTR szEncoding, IN int nSize) = 0;
  37. protected:
  38. ///<summary>
  39. ///   Test the certain bit whether it is 1
  40. ///</summary>
  41. ///<param name = nChar>
  42. ///   the char to be tested
  43. ///</param>
  44. ///<param name = nWhich>
  45. ///   the index of the bit to be tested
  46. ///</param>
  47. /// <returns>
  48. ///    return true if it is 1
  49. /// </returns>
  50. bool TestBit(IN const char nChar, IN const int nWhich);
  51. ///<summary>
  52. ///   Create a byte with the certain bit to be 1
  53. ///</summary>
  54. ///<param name = nWhich>
  55. ///   the index of the bit to be set
  56. ///</param>
  57. /// <returns>
  58. ///    the char created
  59. /// </returns>
  60. char MakeBit(IN const int nWhich);
  61. ///<summary>
  62. ///   Create a byte with the certain continuous bits to be 1
  63. ///</summary>
  64. ///<param name = nFrom>
  65. ///   the begin index of that range
  66. ///</param>
  67. ///<param name = nTo>
  68. ///   the end index of that range
  69. ///</param>
  70. /// <returns>
  71. ///    the char created
  72. /// </returns>
  73. char MakeBitSection(IN const int nFrom, IN const int nTo);
  74. ///<summary>
  75. ///   Set the certain bit to 1
  76. ///</summary>
  77. ///<param name = nWhich>
  78. ///   the index of the bit to be set
  79. ///</param>
  80. ///<param name = chOutChar>
  81. ///   the char to be processed
  82. ///</param>
  83. void SetBit(IN const int nWhich, INOUT char& chOutChar);
  84. ///<summary>
  85. ///   Set the certain bit to 0
  86. ///</summary>
  87. ///<param name = nWhich>
  88. ///   the index of the bit to be set
  89. ///</param>
  90. ///<param name = chOutChar>
  91. ///   the char to be processed
  92. ///</param>
  93. void ClearBit(IN const int nWhich, INOUT char& chOutChar);
  94. ///<summary>
  95. ///   Set the tail to 0 and set the head to 1
  96. ///</summary>
  97. ///<param name = chOutChar>
  98. ///   the char to be processed
  99. ///</param>
  100. void ClearHeadAndSetTail(INOUT char& chOutChar);
  101. };
  102. ///<summary>
  103. ///   Test the certain bit whether it is 1
  104. ///</summary>
  105. inline bool CMIMECode::TestBit(const char nChar, const int nWhich)
  106. {
  107. if( (nChar & MakeBit(nWhich)) == 0 )
  108. {
  109. return false;
  110. }
  111. else
  112. {
  113. return true;
  114. }
  115. }
  116. ///<summary>
  117. ///   Create a byte with the certain bit to be 1
  118. ///</summary>
  119. inline char CMIMECode::MakeBit(IN const int nWhich)
  120. {
  121. return 1U << (7-nWhich) ;
  122. }
  123. ///<summary>
  124. ///   Create a byte with the certain continuous bits to be 1
  125. ///</summary>
  126. inline char CMIMECode::MakeBitSection(IN const int nFrom, IN const int nTo)
  127. {
  128. char c = 0x00;
  129. for(int k = nFrom; k <= nTo; k++)
  130. {
  131. SetBit(k, c);
  132. }
  133. return c;
  134. }
  135. ///<summary>
  136. ///   Set the certain bit to  1
  137. ///</summary>
  138. inline void CMIMECode::SetBit(const int nWhich, char& chOutChar)
  139. {
  140. chOutChar |= MakeBit(nWhich);
  141. }
  142. ///<summary>
  143. ///   Set the certain bit to  0
  144. ///</summary>
  145. inline void CMIMECode::ClearBit(const int nWhich, char& chOutChar)
  146. {
  147. chOutChar &= ~ MakeBit(nWhich);
  148. }
  149. ///<summary>
  150. ///   Set the tail to 0 and set the head to 1
  151. ///</summary>
  152. inline void CMIMECode::ClearHeadAndSetTail(char& chOutChar)
  153. {
  154. ClearBit(0, chOutChar);
  155. SetBit(7, chOutChar);
  156. }