fork download
  1. #include <iostream>
  2. #include <ctime>
  3. using namespace std;
  4.  
  5. enum class ECursor : unsigned {
  6. Auto,
  7. Cross,
  8. Default,
  9. Pointer,
  10. Move,
  11. VerticalText,
  12. Cell,
  13. ContextMenu,
  14. Alias,
  15. Progress,
  16. NoDrop,
  17. NotAllowed,
  18. ZoomIn,
  19. ZoomOut,
  20. EResize,
  21. NeResize,
  22. NwResize,
  23. NResize,
  24. SeResize,
  25. SwResize,
  26. SResize,
  27. WResize,
  28. EwResize,
  29. NsResize,
  30. NeswResize,
  31. NwseResize,
  32. ColResize,
  33. RowResize,
  34. Text,
  35. Wait,
  36. Help,
  37. AllScroll,
  38. WebkitGrab,
  39. WebkitGrabbing,
  40. Copy,
  41. None
  42. };
  43.  
  44. enum CSSValueID {
  45. CSSValueInvalid = 0,
  46. CSSValueInherit = 1,
  47. CSSValueInitial = 2,
  48. CSSValueNone = 3,
  49. CSSValueCopy = 148,
  50. CSSValueSourceOver = 149,
  51. CSSValueSourceIn = 150,
  52. CSSValueSourceOut = 151,
  53. CSSValueSourceAtop = 152,
  54. CSSValueDestinationOver = 153,
  55. CSSValueDestinationIn = 154,
  56. CSSValueDestinationOut = 155,
  57. CSSValueDestinationAtop = 156,
  58. CSSValueXor = 157,
  59. CSSValuePlusLighter = 158,
  60. CSSValueBaseline = 159,
  61. CSSValueMiddle = 160,
  62. CSSValueSub = 161,
  63. CSSValueSuper = 162,
  64. CSSValueTextTop = 163,
  65. CSSValueTextBottom = 164,
  66. CSSValueTop = 165,
  67. CSSValueBottom = 166,
  68. CSSValueWebkitBaselineMiddle = 167,
  69. CSSValueWebkitAuto = 168,
  70. CSSValueLeft = 169,
  71. CSSValueRight = 170,
  72. CSSValueCenter = 171,
  73. CSSValueJustify = 172,
  74. CSSValueWebkitLeft = 173,
  75. CSSValueWebkitRight = 174,
  76. CSSValueWebkitCenter = 175,
  77. CSSValueWebkitMatchParent = 176,
  78. CSSValueInternalCenter = 177,
  79. CSSValueInterWord = 178,
  80. CSSValueDistribute = 179,
  81. CSSValueOutside = 180,
  82. CSSValueInside = 181,
  83. CSSValueDisc = 182,
  84. CSSValueCircle = 183,
  85. CSSValueSquare = 184,
  86. CSSValueDecimal = 185,
  87. CSSValueDecimalLeadingZero = 186,
  88. CSSValueArabicIndic = 187,
  89. CSSValueBengali = 188,
  90. CSSValueCambodian = 189,
  91. CSSValueKhmer = 190,
  92. CSSValueDevanagari = 191,
  93. CSSValueGujarati = 192,
  94. CSSValueGurmukhi = 193,
  95. CSSValueKannada = 194,
  96. CSSValueLao = 195,
  97. CSSValueMalayalam = 196,
  98. CSSValueMongolian = 197,
  99. CSSValueMyanmar = 198,
  100. CSSValueOriya = 199,
  101. CSSValuePersian = 200,
  102. CSSValueUrdu = 201,
  103. CSSValueTelugu = 202,
  104. CSSValueTibetan = 203,
  105. CSSValueThai = 204,
  106. CSSValueLowerRoman = 205,
  107. CSSValueUpperRoman = 206,
  108. CSSValueLowerGreek = 207,
  109. CSSValueLowerAlpha = 208,
  110. CSSValueLowerLatin = 209,
  111. CSSValueUpperAlpha = 210,
  112. CSSValueUpperLatin = 211,
  113. CSSValueCjkEarthlyBranch = 212,
  114. CSSValueCjkHeavenlyStem = 213,
  115. CSSValueEthiopicHalehame = 214,
  116. CSSValueEthiopicHalehameAm = 215,
  117. CSSValueEthiopicHalehameTiEr = 216,
  118. CSSValueEthiopicHalehameTiEt = 217,
  119. CSSValueHangul = 218,
  120. CSSValueHangulConsonant = 219,
  121. CSSValueKoreanHangulFormal = 220,
  122. CSSValueKoreanHanjaFormal = 221,
  123. CSSValueKoreanHanjaInformal = 222,
  124. CSSValueHebrew = 223,
  125. CSSValueArmenian = 224,
  126. CSSValueLowerArmenian = 225,
  127. CSSValueUpperArmenian = 226,
  128. CSSValueGeorgian = 227,
  129. CSSValueCjkIdeographic = 228,
  130. CSSValueSimpChineseFormal = 229,
  131. CSSValueSimpChineseInformal = 230,
  132. CSSValueTradChineseFormal = 231,
  133. CSSValueTradChineseInformal = 232,
  134. CSSValueHiragana = 233,
  135. CSSValueKatakana = 234,
  136. CSSValueHiraganaIroha = 235,
  137. CSSValueKatakanaIroha = 236,
  138. CSSValueInline = 237,
  139. CSSValueBlock = 238,
  140. CSSValueListItem = 239,
  141. CSSValueInlineBlock = 240,
  142. CSSValueTable = 241,
  143. CSSValueInlineTable = 242,
  144. CSSValueTableRowGroup = 243,
  145. CSSValueTableHeaderGroup = 244,
  146. CSSValueTableFooterGroup = 245,
  147. CSSValueTableRow = 246,
  148. CSSValueTableColumnGroup = 247,
  149. CSSValueTableColumn = 248,
  150. CSSValueTableCell = 249,
  151. CSSValueTableCaption = 250,
  152. CSSValueWebkitBox = 251,
  153. CSSValueWebkitInlineBox = 252,
  154. CSSValueFlex = 253,
  155. CSSValueInlineFlex = 254,
  156. CSSValueGrid = 255,
  157. CSSValueInlineGrid = 256,
  158. CSSValueContents = 257,
  159. CSSValueWebkitFlex = 258,
  160. CSSValueWebkitInlineFlex = 259,
  161. CSSValueAuto = 260,
  162. CSSValueCrosshair = 261,
  163. CSSValueDefault = 262,
  164. CSSValuePointer = 263,
  165. CSSValueMove = 264,
  166. CSSValueVerticalText = 265,
  167. CSSValueCell = 266,
  168. CSSValueContextMenu = 267,
  169. CSSValueAlias = 268,
  170. CSSValueProgress = 269,
  171. CSSValueNoDrop = 270,
  172. CSSValueNotAllowed = 271,
  173. CSSValueZoomIn = 272,
  174. CSSValueZoomOut = 273,
  175. CSSValueEResize = 274,
  176. CSSValueNeResize = 275,
  177. CSSValueNwResize = 276,
  178. CSSValueNResize = 277,
  179. CSSValueSeResize = 278,
  180. CSSValueSwResize = 279,
  181. CSSValueSResize = 280,
  182. CSSValueWResize = 281,
  183. CSSValueEwResize = 282,
  184. CSSValueNsResize = 283,
  185. CSSValueNeswResize = 284,
  186. CSSValueNwseResize = 285,
  187. CSSValueColResize = 286,
  188. CSSValueRowResize = 287,
  189. CSSValueText = 288,
  190. CSSValueWait = 289,
  191. CSSValueHelp = 290,
  192. CSSValueAllScroll = 291,
  193. CSSValueWebkitGrab = 292,
  194. CSSValueWebkitGrabbing = 293,
  195. CSSValueWebkitZoomIn = 294,
  196. CSSValueWebkitZoomOut = 295,
  197. };
  198.  
  199. inline ECursor convertToSwitch(CSSValueID m_valueID) {
  200. switch (m_valueID) {
  201. case CSSValueAuto:
  202. return ECursor::Auto;
  203. case CSSValueCrosshair:
  204. return ECursor::Cross;
  205. case CSSValueDefault:
  206. return ECursor::Default;
  207. case CSSValuePointer:
  208. return ECursor::Pointer;
  209. case CSSValueMove:
  210. return ECursor::Move;
  211. case CSSValueCell:
  212. return ECursor::Cell;
  213. case CSSValueVerticalText:
  214. return ECursor::VerticalText;
  215. case CSSValueContextMenu:
  216. return ECursor::ContextMenu;
  217. case CSSValueAlias:
  218. return ECursor::Alias;
  219. case CSSValueCopy:
  220. return ECursor::Copy;
  221. case CSSValueNone:
  222. return ECursor::None;
  223. case CSSValueProgress:
  224. return ECursor::Progress;
  225. case CSSValueNoDrop:
  226. return ECursor::NoDrop;
  227. case CSSValueNotAllowed:
  228. return ECursor::NotAllowed;
  229. case CSSValueZoomIn:
  230. case CSSValueWebkitZoomIn:
  231. return ECursor::ZoomIn;
  232. case CSSValueZoomOut:
  233. case CSSValueWebkitZoomOut:
  234. return ECursor::ZoomOut;
  235. case CSSValueEResize:
  236. return ECursor::EResize;
  237. case CSSValueNeResize:
  238. return ECursor::NeResize;
  239. case CSSValueNwResize:
  240. return ECursor::NwResize;
  241. case CSSValueNResize:
  242. return ECursor::NResize;
  243. case CSSValueSeResize:
  244. return ECursor::SeResize;
  245. case CSSValueSwResize:
  246. return ECursor::SwResize;
  247. case CSSValueSResize:
  248. return ECursor::SResize;
  249. case CSSValueWResize:
  250. return ECursor::WResize;
  251. case CSSValueEwResize:
  252. return ECursor::EwResize;
  253. case CSSValueNsResize:
  254. return ECursor::NsResize;
  255. case CSSValueNeswResize:
  256. return ECursor::NeswResize;
  257. case CSSValueNwseResize:
  258. return ECursor::NwseResize;
  259. case CSSValueColResize:
  260. return ECursor::ColResize;
  261. case CSSValueRowResize:
  262. return ECursor::RowResize;
  263. case CSSValueText:
  264. return ECursor::Text;
  265. case CSSValueWait:
  266. return ECursor::Wait;
  267. case CSSValueHelp:
  268. return ECursor::Help;
  269. case CSSValueAllScroll:
  270. return ECursor::AllScroll;
  271. case CSSValueWebkitGrab:
  272. return ECursor::WebkitGrab;
  273. case CSSValueWebkitGrabbing:
  274. return ECursor::WebkitGrabbing;
  275. default:
  276. //NOTREACHED();
  277. return ECursor::Auto;
  278. }
  279. }
  280.  
  281.  
  282. inline ECursor convertToCast(CSSValueID m_valueID) {
  283. switch (m_valueID) {
  284. case CSSValueCopy:
  285. return ECursor::Copy;
  286. case CSSValueWebkitZoomIn:
  287. return ECursor::ZoomIn;
  288. case CSSValueWebkitZoomOut:
  289. return ECursor::ZoomOut;
  290. case CSSValueNone:
  291. return ECursor::None;
  292. default:
  293. return static_cast<ECursor>(m_valueID - CSSValueAuto);
  294. }
  295. }
  296.  
  297. static ECursor result;
  298.  
  299.  
  300. int main() {
  301. clock_t start, end;
  302. int i;
  303. const int N_ITERATIONS = 100000000;
  304.  
  305. start = clock();
  306. for (i = 0; i < N_ITERATIONS; i++) {
  307. result = convertToSwitch(CSSValueAuto);
  308. result = convertToSwitch(CSSValueCrosshair);
  309. result = convertToSwitch(CSSValueDefault);
  310. result = convertToSwitch(CSSValuePointer);
  311. result = convertToSwitch(CSSValueMove);
  312. result = convertToSwitch(CSSValueCell);
  313. result = convertToSwitch(CSSValueVerticalText);
  314. result = convertToSwitch(CSSValueContextMenu);
  315. result = convertToSwitch(CSSValueAlias);
  316. result = convertToSwitch(CSSValueCopy);
  317. result = convertToSwitch(CSSValueNone);
  318. result = convertToSwitch(CSSValueProgress);
  319. result = convertToSwitch(CSSValueNoDrop);
  320. result = convertToSwitch(CSSValueNotAllowed);
  321. result = convertToSwitch(CSSValueZoomIn);
  322. result = convertToSwitch(CSSValueWebkitZoomIn);
  323. result = convertToSwitch(CSSValueZoomOut);
  324. result = convertToSwitch(CSSValueWebkitZoomOut);
  325. result = convertToSwitch(CSSValueEResize);
  326. result = convertToSwitch(CSSValueNeResize);
  327. result = convertToSwitch(CSSValueNwResize);
  328. result = convertToSwitch(CSSValueNResize);
  329. result = convertToSwitch(CSSValueSeResize);
  330. result = convertToSwitch(CSSValueSwResize);
  331. result = convertToSwitch(CSSValueSResize);
  332. result = convertToSwitch(CSSValueWResize);
  333. result = convertToSwitch(CSSValueEwResize);
  334. result = convertToSwitch(CSSValueNsResize);
  335. result = convertToSwitch(CSSValueNeswResize);
  336. result = convertToSwitch(CSSValueNwseResize);
  337. result = convertToSwitch(CSSValueColResize);
  338. result = convertToSwitch(CSSValueRowResize);
  339. result = convertToSwitch(CSSValueText);
  340. result = convertToSwitch(CSSValueWait);
  341. result = convertToSwitch(CSSValueHelp);
  342. result = convertToSwitch(CSSValueAllScroll);
  343. result = convertToSwitch(CSSValueWebkitGrab);
  344. result = convertToSwitch(CSSValueWebkitGrabbing);
  345. }
  346. end = clock();
  347. cout << "Time (switch): " << (end - start) / (double)(CLOCKS_PER_SEC / 1000) << " ms" << endl;
  348.  
  349.  
  350. start = clock();
  351. for (i = 0; i < N_ITERATIONS; i++) {
  352. result = convertToCast(CSSValueAuto);
  353. result = convertToCast(CSSValueCrosshair);
  354. result = convertToCast(CSSValueDefault);
  355. result = convertToCast(CSSValuePointer);
  356. result = convertToCast(CSSValueMove);
  357. result = convertToCast(CSSValueCell);
  358. result = convertToCast(CSSValueVerticalText);
  359. result = convertToCast(CSSValueContextMenu);
  360. result = convertToCast(CSSValueAlias);
  361. result = convertToCast(CSSValueCopy);
  362. result = convertToCast(CSSValueNone);
  363. result = convertToCast(CSSValueProgress);
  364. result = convertToCast(CSSValueNoDrop);
  365. result = convertToCast(CSSValueNotAllowed);
  366. result = convertToCast(CSSValueZoomIn);
  367. result = convertToCast(CSSValueWebkitZoomIn);
  368. result = convertToCast(CSSValueZoomOut);
  369. result = convertToCast(CSSValueWebkitZoomOut);
  370. result = convertToCast(CSSValueEResize);
  371. result = convertToCast(CSSValueNeResize);
  372. result = convertToCast(CSSValueNwResize);
  373. result = convertToCast(CSSValueNResize);
  374. result = convertToCast(CSSValueSeResize);
  375. result = convertToCast(CSSValueSwResize);
  376. result = convertToCast(CSSValueSResize);
  377. result = convertToCast(CSSValueWResize);
  378. result = convertToCast(CSSValueEwResize);
  379. result = convertToCast(CSSValueNsResize);
  380. result = convertToCast(CSSValueNeswResize);
  381. result = convertToCast(CSSValueNwseResize);
  382. result = convertToCast(CSSValueColResize);
  383. result = convertToCast(CSSValueRowResize);
  384. result = convertToCast(CSSValueText);
  385. result = convertToCast(CSSValueWait);
  386. result = convertToCast(CSSValueHelp);
  387. result = convertToCast(CSSValueAllScroll);
  388. result = convertToCast(CSSValueWebkitGrab);
  389. result = convertToCast(CSSValueWebkitGrabbing);
  390. }
  391. end = clock();
  392. cout << "Time (cast): " << (end - start) / (double)(CLOCKS_PER_SEC / 1000) << " ms" << endl;
  393.  
  394. cout << static_cast<unsigned>(result) << endl;
  395.  
  396.  
  397. return 0;
  398. }
  399.  
Success #stdin #stdout 0s 3468KB
stdin
Standard input is empty
stdout
Time (switch): 0 ms
Time (cast): 0.001 ms
33