ChangeLog 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493
  1. Legend:
  2. - Bug fix
  3. + New feature
  4. * Changes
  5. ! Important
  6. 2023-10-06 __vic
  7. + C++23 mode support
  8. * C++17 is used by default
  9. 2023-04-07 __vic
  10. + __VIC_IF_CONSTEVAL
  11. 2022-03-02 __vic
  12. - readonly_cstring: compare(const char *,readonly_cstring)
  13. 2022-02-21 __vic
  14. * throw_errno: it's enough to override only one function
  15. 2022-02-11 __vic
  16. * logger: fields layout reorganized to be more compact
  17. 2022-02-09 __vic
  18. + string_buffer: operator<<(string_buffer &&, T)
  19. 2021-12-07 __vic
  20. + string_ref: conversion from/to std::string_view
  21. + string_buffer supports std::string_view (via string_ref)
  22. * ascii::equal_icase() uses std::string_view if available
  23. 2021-12-06 __vic
  24. * string_utils.h:
  25. * starts_with(), ends_with() use std::string_view if available
  26. * trimmed()-functions use std::string_view if available
  27. 2021-12-03 __vic
  28. * logger:
  29. * use std::string_view if available
  30. + to_string_view(logger::severity)
  31. * str2num.h:
  32. + use [[nodiscard]]
  33. * use std::string_view if available
  34. 2021-11-19 __vic
  35. * type_traits.h: using std::remove_cvref in C++20 mode
  36. 2021-10-13 __vic
  37. * bits.h: msb_ones(), lsb_ones(), get_lsbs() are constexpr now
  38. 2021-10-04 __vic
  39. + memory.h: store_unaligned()
  40. 2021-06-11 __vic
  41. + logger: notice level
  42. 2021-05-03 __vic
  43. - bits.h: __VIC_ASSERT_UINT() in C++98 mode
  44. + algorithm.h:
  45. + skip_if_front(), skip_if_back()
  46. * skip_if_{front,back}() are used inside trim-functions
  47. 2021-04-30 __vic
  48. * sift() uses set_of_chars
  49. 2020-12-22 __vic
  50. + ascii.h: isblank(), isprint(), isgraph(), ispunct(), iscntrl()
  51. 2020-12-16 __vic
  52. + base16.h: base16::encode_byte_{lower|upper}()
  53. 2020-05-25 __vic
  54. * bits.h: MSVC++ __popcnt() can cause crash if not supported by CPU so
  55. isn't used by default. Define __VIC_POPCNT to use it
  56. 2020-02-24 __vic
  57. ! string_utils.h: Renamed:
  58. ! trim_left() -> trim_front()
  59. ! trim_right() -> trim_back()
  60. ! trimmed_left() -> trimmed_front()
  61. ! trimmed_right() -> trimmed_back()
  62. ! pad_left() -> pad_front()
  63. ! pad_right() -> pad_back()
  64. 2020-02-10 __vic
  65. * memory.h: load_unaligned(): fallback to std::memcpy() if no better
  66. alternatives
  67. ! Renamed object_pool -> fixed_vector
  68. 2020-01-28 __vic
  69. + throw_errno.h and throw_errno() are parts of the public API now
  70. ! defs.h: uninitialized/noinit removed
  71. 2019-12-24 __vic
  72. * logger: severity strings moved to the own object file
  73. 2019-12-19 __vic
  74. - str2num.h: signed_decimal_parser: out of buffer access if input string
  75. is "+" or "-"
  76. 2019-10-21 __vic
  77. + Support for compilers without any form of 64-bit integers (long long)
  78. 2019-07-02 __vic
  79. - string_utils.h: sift_if(): redundant past the end predicate check
  80. 2019-06-26 __vic
  81. + Workaround for Clang 3.9+ issue - __has_cpp_attribute(nodiscard) returns
  82. 1 even when used mode is C++14 or less
  83. 2019-06-21 __vic
  84. - "__VIC_NO_BUITLINS" was used instead of __VIC_NO_BUILTINS
  85. + test/bits_no_biltins.cpp
  86. + test/endian_no_builtins.cpp
  87. 2019-05-31 __vic
  88. + bits.h: ceil_log2(), floor_log2()
  89. 2019-05-22 __vic
  90. * bits.h:
  91. + ceil2(), floor2(), ispow2(), msb_position()
  92. * rotl()/rotr() use language types instead of cstdint typedefs
  93. 2019-05-21 __vic
  94. * Renamed __VIC_NO_GCC_BUITLINS -> __VIC_NO_BUITLINS
  95. + bits.h: popcount()
  96. 2019-04-01 __vic
  97. * logger:
  98. + shrink_buffer()
  99. ! No autoshrink
  100. 2019-03-25 __vic
  101. - bits.h: UB on rot{l|r}(..., 0)
  102. 2019-03-13 __vic
  103. + memory.h:
  104. + load_unaligned()
  105. 2019-03-12 __vic
  106. + [[nodiscard]] support
  107. + endian.h: endian::to/from_big/little()
  108. 2019-02-13 __vic
  109. + endian.h:
  110. + endian
  111. + swab16(), swab32(), swab64()
  112. 2019-02-08 __vic
  113. + tchar.h: tchar::empty(), tchar::equal()
  114. 2019-02-05 __vic
  115. + doc: russian translation
  116. 2019-01-31 __vic
  117. * object_pool: renamed push() -> push_allocated()
  118. 2018-12-17 __vic
  119. + writers/null.h:
  120. + null_writer
  121. 2018-11-20 __vic
  122. * base64::decode(): no whitespaces skip
  123. 2018-11-14 __vic
  124. * stdio_file:
  125. * Renamed attach() -> attach_handle(), detach() -> detach_handle()
  126. + attach_handle() returns old value
  127. 2018-10-30 __vic
  128. + Handmade integers to text converters (to_text_append())
  129. 2018-10-24 __vic
  130. * Underlying type is specified for logger::severity
  131. 2018-10-08 __vic
  132. + readers, writers: make_...()
  133. + utf{8|16}: make_reader(), make_writer()
  134. + unicode.h: utf_transcode()
  135. + writers/iterator.h:
  136. + iterator_writer
  137. 2018-09-28 __vic
  138. + utf16/defs.h:
  139. + utf16::code_unit_t
  140. + utf16/status.h:
  141. + utf16::status
  142. + utf16::is_error(), utf16::throw_if_error()
  143. + utf16/exceptions.h:
  144. + utf16::bad_encoding and derivatives
  145. + utf16/reader.h:
  146. + utf16::reader
  147. + utf16/writer.h:
  148. + utf16::writer
  149. 2018-09-27 __vic
  150. + unicode.h:
  151. + unicode_t
  152. + unicode_max, unicode_bom, unicode_replacement_char
  153. + utf8/defs.h:
  154. + utf8::is_continuation_byte()
  155. + utf8/status.h:
  156. + utf8::status
  157. + utf8::is_error(), utf8::throw_if_error()
  158. + utf8/exceptions.h:
  159. + utf8::bad_encoding and derivatives
  160. + utf8/reader.h:
  161. + utf8::reader
  162. + utf8/writer.h:
  163. + utf8::writer
  164. 2018-09-26 __vic
  165. * Readers:
  166. * Renamed range_reader[_n] -> iterator_reader[_n]
  167. * basic_string_reader is implemented using raw pointer +
  168. iterator_reader_n
  169. + position() function for memory readers
  170. 2018-09-19 __vic
  171. * defs.h: unitialized can't be constructed using just {}
  172. * logger:
  173. * Renamed accepts_*() -> *_visible()
  174. + class output
  175. + settings_t
  176. 2018-09-18 __vic
  177. + C++14 and C++17 modes support
  178. + set_of_chars: C++14 constexpr
  179. 2018-09-03 __vic
  180. * doc: make https://validator.w3.org/ happy
  181. * base16, base64: try_decode() added
  182. 2018-08-09 __vic
  183. * str2num.h: to_errno(number_parse_status) removed
  184. 2018-06-21 __vic
  185. * LLVM libc++ defines nullptr macro in C++98 mode
  186. 2018-06-06 __vic
  187. + __VIC_SCOPED_ENUM_BEGIN/END
  188. * logger: renamed message_severity -> severity_t
  189. + str2num.h: number_parse_status
  190. 2018-06-05 __vic
  191. * string_ref.h: basic_string_ref: operator== uses memcmp()
  192. 2018-05-21 __vic
  193. + doc: stable links for chapters
  194. * Renamed meta.h -> type_traits.h
  195. 2018-05-15 __vic
  196. * doc/document.dtd is deterministic now
  197. 2018-05-14 __vic
  198. + object_pool: full()
  199. 2018-05-07 __vic
  200. * Don't catch exceptions by value even in tests
  201. 2018-03-28 __vic
  202. * bits.h: lo/hi_nibble() return uint8_t instead of int
  203. 2018-01-26 __vic
  204. + Tests for readers
  205. + Tests for writers
  206. - readers/cstring.h: invalid code
  207. 2017-12-26 __vic
  208. + meta.h: index_sequence, make_index_sequence
  209. 2017-12-13 __vic
  210. * doc/html.xsl: more tolerant to retarded XSLT processors (oracle) TOC
  211. generation code
  212. 2017-12-08 __vic
  213. * meta.h:
  214. + remove_reference, remove_cvref
  215. + Template aliases for type transformers
  216. + waitable_event.h:
  217. + waitable_event for C++11 mode only
  218. 2017-12-07 __vic
  219. + GNU Make makefiles
  220. 2017-12-05 __vic
  221. * string_buffer can be compiled even when old compatible ABI is used by
  222. GNU libstdc++
  223. + Intel C++ 17.0+ compiler support
  224. 2017-11-28 __vic
  225. + string_utils.h: starts_with(), ends_with()
  226. 2017-11-14 __vic
  227. * to_text_append():
  228. - Small buffer for 8-byte long types
  229. - printf() "ll" length modifier is not always available
  230. * Using snprint() in C++11 mode
  231. 2017-09-21 __vic
  232. * ascii.h:
  233. * Moved from bits.h:
  234. * to_hex_digit_upper() -> ascii::toxdigit_upper()
  235. * to_hex_digit_lower() -> ascii::toxdigit_lower()
  236. * hex_to_number() -> ascii::xdigit_to_number()
  237. + ascii::todigit()
  238. + ascii::digit_to_number()
  239. 2017-09-18 __vic
  240. * Renamed io.h -> stdio_file.h
  241. 2017-09-14 __vic
  242. * readers.h removed. All content moved to:
  243. + readers/range.h (range_reader, range_reader_n)
  244. + readers/container.h (container_reader)
  245. + readers/cstring.h (basic_cstring_reader, cstring_reader)
  246. * writers.h removed. All content moved to:
  247. + writers/push_back.h (push_back_writer)
  248. * string_utils.h:
  249. * string_reader moved to:
  250. + readers/string.h
  251. * string_writer moved to:
  252. + writers/string.h
  253. * io.h:
  254. * cstream_reader moved to:
  255. + readers/cstream.h
  256. * cstream_writer moved to:
  257. + writers/cstream.h
  258. + read(std::FILE *, unsigned char &)
  259. + readers/cstream.h: cstream_reader: read(unsigned char &)
  260. * readers/cstring.h:
  261. + basic_cstring_reader<char>: read(unsigned char &)
  262. * readers/string.h:
  263. + basic_string_reader
  264. + basic_string_reader<char>: read(unsigned char &)
  265. * writers/string.h:
  266. + basic_string_writer
  267. 2017-06-30 __vic
  268. * Renamed string_ops.h -> string_utils.h
  269. * Renamed static_string -> readonly_cstring
  270. 2017-01-31 __vic
  271. * str2num.h: std::strchr(s,0) returns non-const pointer on MinGW so
  272. tchar::end(s) is used instead
  273. 2017-01-30 __vic
  274. + readers.h:
  275. + range_reader
  276. + range_reader_n
  277. + container_reader
  278. + basic_cstring_reader, cstring_reader
  279. + writers.h:
  280. + push_back_writer
  281. * string_ops.h:
  282. + string_reader
  283. + string_writer
  284. * base16.h: base16: uses readers and writers
  285. * base64.h: base64: uses readers and writers
  286. * io.h:
  287. + read(std::FILE *, char &)
  288. + write(std::FILE *, char)
  289. + cstream_reader
  290. + cstream_writer
  291. 2017-01-23 __vic
  292. - str2num.h: C++98 mode
  293. + iterator.h:
  294. + begin(T[]), end(T[]), cbegin(T[]), cend(T[])
  295. + advance(), next(), prev()
  296. 2017-01-20 __vic
  297. + bin_file.h
  298. + bin_file
  299. + str2num.h: decimal_parser
  300. + base16.h:
  301. + base16::encode_lower(), base16::encode_upper(), base16::decode()
  302. + base64.h:
  303. + base64::encode(), base64::decode()
  304. + base64::encoded_length(), base64::max_decoded_length()
  305. 2017-01-16 __vic
  306. * throw_errno() moved: error.h -> throw_errno.h
  307. 2017-01-13 __vic
  308. + str2num.h
  309. + decimal_to_number()
  310. + decimal_to_number_range()
  311. 2017-01-12 __vic
  312. + meta.h:
  313. + integral_constant, true_type, false_type
  314. + is_same, is_const
  315. + remove_const, remove_volatile, remove_cv
  316. + remove_pointer
  317. + is_signed_integer, is_unsigned_integer
  318. + enable_if, disable_if
  319. + set_of_chars.h:
  320. + set_of_chars
  321. 2017-01-09 __vic
  322. * Renamed trim.h -> string_ops.h
  323. * string_ops.h:
  324. + pad_left(), pad_right()
  325. * sift() treats nullptr as an empty string
  326. + ascii_string.h:
  327. + toupper(), tolower() for strings
  328. + equal_icase() for strings
  329. 2016-12-30 __vic
  330. + ascii.h:
  331. + isdigit(), isxdigit(), isalpha(), isalnum(), isspace(), isascii()
  332. + islower(), isupper()
  333. + tolower(), toupper(), upper_to_lower(), lower_to_upper()
  334. + equal_icase(char,char)
  335. + date_time.h:
  336. + is_leap_year()
  337. + days_in_month()
  338. + days_between_years()
  339. + validate_date(), validate_time(), validate_date_time()
  340. 2016-12-29 __vic
  341. + stdint.h:
  342. + [u]int<N>_t, [u]int_least<N>_t, [u]int_fast<N>_t, [u]intmax_t,
  343. [u]intptr_t
  344. + int_exactly_bytes<>, uint_exactly_bytes<>
  345. + bits.h:
  346. + lo_nibble(), hi_nibble()
  347. + msb_ones(), lsb_ones()
  348. + get_lsbs()
  349. + ord()
  350. + to_hex_digit_upper(), to_hex_digit_lower()
  351. + hex_to_number()
  352. + swapped_nibbles()
  353. + rotl(), rotr()
  354. 2016-12-28 __vic
  355. + string_buffer: move constructor for std::string
  356. + logger.h:
  357. + logger
  358. 2016-12-26 __vic
  359. + string_ref.h:
  360. + basic_string_ref (string_ref)
  361. + string_buffer: string_ref support
  362. + trim.h:
  363. + trim(), trimmed(), trim_left(), ...
  364. + sift(), sift_if()
  365. 2016-12-23 __vic
  366. + io.h:
  367. + stdio_file
  368. + getline()
  369. + object_pool.h:
  370. + object_pool
  371. + tchar.h
  372. 2016-12-22 __vic
  373. + to_text.h:
  374. + to_text_append()
  375. + string_buffer.h:
  376. + string_buffer
  377. 2016-12-21 __vic
  378. + defs.h:
  379. + nullptr
  380. + non_copyable
  381. + non_heap_allocatable
  382. + array_size()
  383. + static_string.h:
  384. + static_string
  385. + error.h:
  386. + exception
  387. + libc_error
  388. + throw_errno()
  389. 2016-06-23 __vic
  390. * Total revision and rework started in order to publish the code
  391. VERSION 0.6
  392. 2011-05-17 __vic
  393. * The last internal release before rework (no distribution)
  394. VERSION 0.5.1
  395. 2010-09-08 __vic
  396. * The last released version before rework
  397. 2007-08-15 __vic
  398. * The project is started