attributes.js 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.attrNumsToBitmap = exports.setBit = exports.requiresFsStats = exports.requiresLstat = exports.containsSetOnlyAttr = exports.overlaps = exports.parseBitmask = exports.FS_ATTRS = exports.STAT_ATTRS = exports.RECOMMENDED_ATTRS = exports.REQUIRED_ATTRS = exports.SET_ONLY_ATTRS = exports.GET_ONLY_ATTRS = exports.HOMOGENEOUS_ATTRS = exports.PER_FS_ATTRS = exports.PER_SERVER_ATTRS = void 0;
  4. exports.PER_SERVER_ATTRS = new Set([10]);
  5. exports.PER_FS_ATTRS = new Set([
  6. 0,
  7. 2,
  8. 5,
  9. 6,
  10. 9,
  11. 13,
  12. 15,
  13. 16,
  14. 17,
  15. 18,
  16. 21,
  17. 22,
  18. 23,
  19. 24,
  20. 26,
  21. 27,
  22. 29,
  23. 30,
  24. 31,
  25. 34,
  26. 42,
  27. 43,
  28. 44,
  29. 51,
  30. ]);
  31. exports.HOMOGENEOUS_ATTRS = new Set([
  32. 0,
  33. 8,
  34. 26,
  35. 5,
  36. 6,
  37. ]);
  38. exports.GET_ONLY_ATTRS = new Set([
  39. 0,
  40. 1,
  41. 2,
  42. 3,
  43. 5,
  44. 6,
  45. 7,
  46. 8,
  47. 9,
  48. 10,
  49. 11,
  50. 19,
  51. 13,
  52. 15,
  53. 16,
  54. 17,
  55. 18,
  56. 20,
  57. 21,
  58. 22,
  59. 23,
  60. 24,
  61. 26,
  62. 27,
  63. 28,
  64. 29,
  65. 30,
  66. 31,
  67. 55,
  68. 34,
  69. 35,
  70. 38,
  71. 39,
  72. 40,
  73. 41,
  74. 42,
  75. 43,
  76. 44,
  77. 45,
  78. 47,
  79. 51,
  80. 52,
  81. 53,
  82. ]);
  83. exports.SET_ONLY_ATTRS = new Set([48, 54]);
  84. exports.REQUIRED_ATTRS = new Set([
  85. 0,
  86. 1,
  87. 2,
  88. 3,
  89. 4,
  90. 5,
  91. 6,
  92. 7,
  93. 8,
  94. 9,
  95. 10,
  96. 11,
  97. 19,
  98. ]);
  99. exports.RECOMMENDED_ATTRS = new Set([
  100. 12,
  101. 13,
  102. 14,
  103. 15,
  104. 16,
  105. 17,
  106. 18,
  107. 20,
  108. 21,
  109. 22,
  110. 23,
  111. 24,
  112. 25,
  113. 26,
  114. 27,
  115. 28,
  116. 29,
  117. 30,
  118. 31,
  119. 32,
  120. 33,
  121. 55,
  122. 34,
  123. 35,
  124. 36,
  125. 37,
  126. 38,
  127. 39,
  128. 40,
  129. 41,
  130. 42,
  131. 43,
  132. 44,
  133. 45,
  134. 46,
  135. 47,
  136. 48,
  137. 49,
  138. 50,
  139. 51,
  140. 52,
  141. 53,
  142. 54,
  143. ]);
  144. exports.STAT_ATTRS = new Set([
  145. 1,
  146. 3,
  147. 4,
  148. 20,
  149. 33,
  150. 35,
  151. 41,
  152. 45,
  153. 47,
  154. 52,
  155. 53,
  156. ]);
  157. exports.FS_ATTRS = new Set([
  158. 21,
  159. 22,
  160. 23,
  161. 42,
  162. 43,
  163. 44,
  164. ]);
  165. const parseBitmask = (mask) => {
  166. const attrs = new Set();
  167. const length = mask.length;
  168. for (let i = 0, word = mask[0], base = 0; i < length; i++, word = mask[i], base = i * 32)
  169. for (let bit = 0; word; bit++, word >>>= 1)
  170. if (word & 1)
  171. attrs.add(base + bit);
  172. return attrs;
  173. };
  174. exports.parseBitmask = parseBitmask;
  175. const overlaps = (a, b) => {
  176. for (const element of b)
  177. if (a.has(element))
  178. return true;
  179. return false;
  180. };
  181. exports.overlaps = overlaps;
  182. const containsSetOnlyAttr = (requestedAttrs) => (0, exports.overlaps)(requestedAttrs, exports.SET_ONLY_ATTRS);
  183. exports.containsSetOnlyAttr = containsSetOnlyAttr;
  184. const requiresLstat = (requestedAttrs) => (0, exports.overlaps)(requestedAttrs, exports.STAT_ATTRS);
  185. exports.requiresLstat = requiresLstat;
  186. const requiresFsStats = (requestedAttrs) => (0, exports.overlaps)(requestedAttrs, exports.FS_ATTRS);
  187. exports.requiresFsStats = requiresFsStats;
  188. const setBit = (mask, attrNum) => {
  189. const wordIndex = Math.floor(attrNum / 32);
  190. const bitIndex = attrNum % 32;
  191. while (mask.length <= wordIndex)
  192. mask.push(0);
  193. mask[wordIndex] |= 1 << bitIndex;
  194. };
  195. exports.setBit = setBit;
  196. const attrNumsToBitmap = (attrNums) => {
  197. const mask = [];
  198. for (const attrNum of attrNums)
  199. (0, exports.setBit)(mask, attrNum);
  200. return mask;
  201. };
  202. exports.attrNumsToBitmap = attrNumsToBitmap;
  203. //# sourceMappingURL=attributes.js.map