ChangeLog 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580
  1. Legend:
  2. - Bug fix
  3. + New feature
  4. * Changes
  5. ! Important
  6. 2021-06-07 __vic
  7. - posix::dir_entries: correctly allocate dirent buffer for long path case
  8. * posix::dir_entries: use readdir() instead of deprecated readdir_r()
  9. 2021-05-03 __vic
  10. - bits.h: __VIC_ASSERT_UINT() in C++98 mode
  11. 2021-04-30 __vic
  12. * sift() uses set_of_chars
  13. 2020-12-22 __vic
  14. + ascii.h: isblank(), isprint(), isgraph(), ispunct(), iscntrl()
  15. 2020-12-16 __vic
  16. + base16.h: base16::encode_byte_{lower|upper}()
  17. 2020-11-30 __vic
  18. * Use std::uncaught_exceptions() instead of deprecated
  19. std::uncaught_exception() when possible
  20. 2020-05-25 __vic
  21. * bits.h: MSVC++ __popcnt() can cause crash if not supported by CPU so
  22. isn't used by default. Define __VIC_POPCNT to use it
  23. 2020-02-24 __vic
  24. ! string_utils.h: Renamed:
  25. ! trim_left() -> trim_front()
  26. ! trim_right() -> trim_back()
  27. ! trimmed_left() -> trimmed_front()
  28. ! trimmed_right() -> trimmed_back()
  29. ! pad_left() -> pad_front()
  30. ! pad_right() -> pad_back()
  31. 2020-02-17 __vic
  32. * posix::ovectors:
  33. ! Renamed add() -> push_back()
  34. + pop_back(), empty(), full(), clear()
  35. 2020-02-12 __vic
  36. * Repeated errno reads are minimized
  37. 2020-02-10 __vic
  38. * memory.h: load_unaligned(): fallback to std::memcpy() if no better
  39. alternatives
  40. ! Renamed object_pool -> fixed_vector
  41. 2020-01-28 __vic
  42. + throw_errno.h and throw_errno() are parts of the public API now
  43. ! defs.h: uninitialized/noinit removed
  44. 2020-01-14 __vic
  45. - posix_pidfile.cpp: write_pid(): results of all syscalls are checked now
  46. 2019-12-24 __vic
  47. * logger: severity strings moved to the own object file
  48. 2019-12-19 __vic
  49. - str2num.h: signed_decimal_parser: out of buffer access if input string
  50. is "+" or "-"
  51. 2019-10-21 __vic
  52. + Support for compilers without any form of 64-bit integers (long long)
  53. 2019-07-18 __vic
  54. ! posix::dir_entries, posix::dir_files don't throw on open any more.
  55. Explicit is_open() check is required now!
  56. 2019-07-02 __vic
  57. - string_utils.h: sift_if(): redundant past the end predicate check
  58. 2019-06-26 __vic
  59. + Workaround for Clang 3.9+ issue - __has_cpp_attribute(nodiscard) returns
  60. 1 even when used mode is C++14 or less
  61. 2019-06-21 __vic
  62. - "__VIC_NO_BUITLINS" was used instead of __VIC_NO_BUILTINS
  63. + test/bits_no_biltins.cpp
  64. + test/endian_no_builtins.cpp
  65. 2019-05-31 __vic
  66. + bits.h: ceil_log2(), floor_log2()
  67. 2019-05-22 __vic
  68. * bits.h:
  69. + ceil2(), floor2(), ispow2(), msb_position()
  70. * rotl()/rotr() use language types instead of cstdint typedefs
  71. 2019-05-21 __vic
  72. * Renamed __VIC_NO_GCC_BUITLINS -> __VIC_NO_BUITLINS
  73. + bits.h: popcount()
  74. 2019-04-18 __vic
  75. + posix/pidfile.h:
  76. + posix::pidfile
  77. + posix/daemon_control.h:
  78. + posix::daemon_control
  79. 2019-04-01 __vic
  80. * logger:
  81. + shrink_buffer()
  82. ! No autoshrink
  83. 2019-03-25 __vic
  84. - bits.h: UB on rot{l|r}(..., 0)
  85. 2019-03-13 __vic
  86. + memory.h:
  87. + load_unaligned()
  88. 2019-03-12 __vic
  89. + [[nodiscard]] support
  90. + endian.h: endian::to/from_big/little()
  91. 2019-02-18 __vic
  92. * posix/sigset.h: posix::sigset:
  93. + Constructor and assignment from array
  94. + assign()
  95. * posix/thread.h:
  96. + posix::this_thread::sigwait_at_most()
  97. + posix::this_thread::sigwaitinfo_at_most()
  98. 2019-02-13 __vic
  99. + endian.h:
  100. + endian
  101. + swab16(), swab32(), swab64()
  102. 2019-02-08 __vic
  103. + tchar.h: tchar::empty(), tchar::equal()
  104. 2019-02-05 __vic
  105. + doc: russian translation
  106. 2019-01-31 __vic
  107. * object_pool: renamed push() -> push_allocated()
  108. 2018-12-17 __vic
  109. + writers/null.h:
  110. + null_writer
  111. 2018-11-20 __vic
  112. * base64::decode(): no whitespaces skip
  113. 2018-11-14 __vic
  114. * stdio_file:
  115. * Renamed attach() -> attach_handle(), detach() -> detach_handle()
  116. + attach_handle() returns old value
  117. * posix::file:
  118. * Renamed attach() -> attach_handle(), detach() -> detach_handle()
  119. + attach_handle() returns old value
  120. 2018-10-30 __vic
  121. + Handmade integers to text converters (to_text_append())
  122. 2018-10-24 __vic
  123. * Underlying type is specified for logger::severity
  124. 2018-10-08 __vic
  125. + readers, writers: make_...()
  126. + utf{8|16}: make_reader(), make_writer()
  127. + unicode.h: utf_transcode()
  128. + writers/iterator.h:
  129. + iterator_writer
  130. 2018-09-28 __vic
  131. + utf16/defs.h:
  132. + utf16::code_unit_t
  133. + utf16/status.h:
  134. + utf16::status
  135. + utf16::is_error(), utf16::throw_if_error()
  136. + utf16/exceptions.h:
  137. + utf16::bad_encoding and derivatives
  138. + utf16/reader.h:
  139. + utf16::reader
  140. + utf16/writer.h:
  141. + utf16::writer
  142. 2018-09-27 __vic
  143. + unicode.h:
  144. + unicode_t
  145. + unicode_max, unicode_bom, unicode_replacement_char
  146. + utf8/defs.h:
  147. + utf8::is_continuation_byte()
  148. + utf8/status.h:
  149. + utf8::status
  150. + utf8::is_error(), utf8::throw_if_error()
  151. + utf8/exceptions.h:
  152. + utf8::bad_encoding and derivatives
  153. + utf8/reader.h:
  154. + utf8::reader
  155. + utf8/writer.h:
  156. + utf8::writer
  157. 2018-09-26 __vic
  158. * Readers:
  159. * Renamed range_reader[_n] -> iterator_reader[_n]
  160. * basic_string_reader is implemented using raw pointer +
  161. iterator_reader_n
  162. + position() function for memory readers
  163. 2018-09-19 __vic
  164. * defs.h: unitialized can't be constructed using just {}
  165. * logger:
  166. * Renamed accepts_*() -> *_visible()
  167. + class output
  168. + settings_t
  169. 2018-09-18 __vic
  170. + C++14 and C++17 modes support
  171. + set_of_chars: C++14 constexpr
  172. 2018-09-03 __vic
  173. * doc: make https://validator.w3.org/ happy
  174. * base16, base64: try_decode() added
  175. 2018-08-09 __vic
  176. * str2num.h: to_errno(number_parse_status) removed
  177. 2018-07-11 __vic
  178. + bmake makefile for FreeBSD 10+
  179. 2018-06-21 __vic
  180. * LLVM libc++ defines nullptr macro in C++98 mode
  181. 2018-06-06 __vic
  182. + __VIC_SCOPED_ENUM_BEGIN/END
  183. * logger: renamed message_severity -> severity_t
  184. + str2num.h: number_parse_status
  185. 2018-06-05 __vic
  186. * string_ref.h: basic_string_ref: operator== uses memcmp()
  187. 2018-05-21 __vic
  188. + doc: stable links for chapters
  189. * Renamed meta.h -> type_traits.h
  190. 2018-05-15 __vic
  191. * doc/document.dtd is deterministic now
  192. 2018-05-14 __vic
  193. + object_pool: full()
  194. 2018-05-07 __vic
  195. * Don't catch exceptions by value even in tests
  196. 2018-03-28 __vic
  197. * bits.h: lo/hi_nibble() return uint8_t instead of int
  198. 2018-01-26 __vic
  199. + Tests for readers
  200. + Tests for writers
  201. - readers/cstring.h: invalid code
  202. 2017-12-26 __vic
  203. + meta.h: index_sequence, make_index_sequence
  204. 2017-12-21 __vic
  205. + packon.h, packoff.h
  206. 2017-12-14 __vic
  207. + posix/sigset.h:
  208. * posix::sigset moved from posix/signal.h
  209. * posix/process.h: posix::ignore_signals() moved from posix/signal.h
  210. * posix/signal.h removed
  211. 2017-12-13 __vic
  212. * doc/html.xsl: more tolerant to retarded XSLT processors (oracle) TOC
  213. generation code
  214. + posix/process.h: posix::process_alive()
  215. 2017-12-12 __vic
  216. + waitable_event for C++98 mode too
  217. + thread.h:
  218. + thread
  219. + this_thread
  220. + get_id()
  221. + sleep_ms()
  222. + mutex.h:
  223. + mutex
  224. + mutex_lock
  225. 2017-12-08 __vic
  226. * meta.h:
  227. + remove_reference, remove_cvref
  228. + Template aliases for type transformers
  229. + waitable_event.h:
  230. + waitable_event for C++11 mode only
  231. 2017-12-07 __vic
  232. + GNU Make makefiles
  233. 2017-12-06 __vic
  234. * Classes with constexpr constructor don't inherit non_copyable
  235. 2017-12-05 __vic
  236. * posix/time.h: posix::time_spec: renamed mksec -> usec
  237. 2017-12-05 __vic
  238. * string_buffer can be compiled even when old compatible ABI is used by
  239. GNU libstdc++
  240. + Intel C++ 17.0+ compiler support
  241. 2017-11-28 __vic
  242. + string_utils.h: starts_with(), ends_with()
  243. 2017-11-14 __vic
  244. * to_text_append():
  245. - Small buffer for 8-byte long types
  246. - printf() "ll" length modifier is not always available
  247. * Using snprint() in C++11 mode
  248. 2017-09-21 __vic
  249. + posix/mutex.h:
  250. * posix::mutex, posix::mutex_lock moved from posix/thread.h
  251. + posix/cond_variable.h
  252. * posix::cond_variable moved from posix/thread.h
  253. 2017-09-21 __vic
  254. * ascii.h:
  255. * Moved from bits.h:
  256. * to_hex_digit_upper() -> ascii::toxdigit_upper()
  257. * to_hex_digit_lower() -> ascii::toxdigit_lower()
  258. * hex_to_number() -> ascii::xdigit_to_number()
  259. + ascii::todigit()
  260. + ascii::digit_to_number()
  261. 2017-09-18 __vic
  262. * Renamed io.h -> stdio_file.h
  263. 2017-09-14 __vic
  264. * readers.h removed. All content moved to:
  265. + readers/range.h (range_reader, range_reader_n)
  266. + readers/container.h (container_reader)
  267. + readers/cstring.h (basic_cstring_reader, cstring_reader)
  268. * writers.h removed. All content moved to:
  269. + writers/push_back.h (push_back_writer)
  270. * string_utils.h:
  271. * string_reader moved to:
  272. + readers/string.h
  273. * string_writer moved to:
  274. + writers/string.h
  275. * io.h:
  276. * cstream_reader moved to:
  277. + readers/cstream.h
  278. * cstream_writer moved to:
  279. + writers/cstream.h
  280. + read(std::FILE *, unsigned char &)
  281. + readers/cstream.h: cstream_reader: read(unsigned char &)
  282. * readers/cstring.h:
  283. + basic_cstring_reader<char>: read(unsigned char &)
  284. * readers/string.h:
  285. + basic_string_reader
  286. + basic_string_reader<char>: read(unsigned char &)
  287. * writers/string.h:
  288. + basic_string_writer
  289. 2017-06-30 __vic
  290. * Renamed string_ops.h -> string_utils.h
  291. * Renamed static_string -> readonly_cstring
  292. 2017-02-21 __vic
  293. * fs.h: file_size(): uintmax_t is used as a return type
  294. 2017-01-31 __vic
  295. * str2num.h: std::strchr(s,0) returns non-const pointer on MinGW so
  296. tchar::end(s) is used instead
  297. 2017-01-30 __vic
  298. + readers.h:
  299. + range_reader
  300. + range_reader_n
  301. + container_reader
  302. + basic_cstring_reader, cstring_reader
  303. + writers.h:
  304. + push_back_writer
  305. * string_ops.h:
  306. + string_reader
  307. + string_writer
  308. * base16.h: base16: uses readers and writers
  309. * base64.h: base64: uses readers and writers
  310. * io.h:
  311. + read(std::FILE *, char &)
  312. + write(std::FILE *, char)
  313. + cstream_reader
  314. + cstream_writer
  315. 2017-01-23 __vic
  316. - str2num.h: C++98 mode
  317. + iterator.h:
  318. + begin(T[]), end(T[]), cbegin(T[]), cend(T[])
  319. + advance(), next(), prev()
  320. 2017-01-20 __vic
  321. + bin_file.h
  322. + bin_file
  323. + str2num.h: decimal_parser
  324. + base16.h:
  325. + base16::encode_lower(), base16::encode_upper(), base16::decode()
  326. + base64.h:
  327. + base64::encode(), base64::decode()
  328. + base64::encoded_length(), base64::max_decoded_length()
  329. 2017-01-18 __vic
  330. + fs.h:
  331. + path_exists(), file_exists(), dir_exists()
  332. + mkdir(), mkdir_if_absent()
  333. + rmdir(), rmdir_if_exists()
  334. + get_current_dir()
  335. + remove_file(), remove_file_if_exists(), remove_file_nt()
  336. + copy_file(), copy_file_if_exists(), copy_file_replace(),
  337. copy_file_replace_if_exists()
  338. + move_file(), move_file_if_exists(), move_file_replace(),
  339. move_file_replace_if_exists()
  340. + rename_file(), rename_file_if_exists(), rename_file_replace(),
  341. rename_file_replace_if_exists()
  342. + file_size()
  343. 2017-01-17 __vic
  344. + posix/fs.h:
  345. + posix::dirname(), posix::basename()
  346. + posix::append_dirname(), posix::append_basename()
  347. + posix::add_trailing_slash(), posix::with_trailing_slash()
  348. 2017-01-16 __vic
  349. * throw_errno() moved: error.h -> throw_errno.h
  350. * stdio_file: errno value is thrown in case of error
  351. 2017-01-13 __vic
  352. + str2num.h
  353. + decimal_to_number()
  354. + decimal_to_number_range()
  355. 2017-01-12 __vic
  356. + meta.h:
  357. + integral_constant, true_type, false_type
  358. + is_same, is_const
  359. + remove_const, remove_volatile, remove_cv
  360. + remove_pointer
  361. + is_signed_integer, is_unsigned_integer
  362. + enable_if, disable_if
  363. + set_of_chars.h:
  364. + set_of_chars
  365. 2017-01-11 __vic
  366. + posix/time.h:
  367. + posix::time_spec
  368. + posix::nanoseconds_since_epoch()
  369. + posix::realtime_clock, posix::monotonic_clock
  370. + posix/thread.h: posix::cond_variable: wait_for()
  371. 2017-01-10 __vic
  372. * posix/thread.h:
  373. + posix::mutex, posix::mutex_lock
  374. + posix::cond_variable
  375. 2017-01-09 __vic
  376. * Renamed trim.h -> string_ops.h
  377. * string_ops.h:
  378. + pad_left(), pad_right()
  379. * sift() treats nullptr as an empty string
  380. + ascii_string.h:
  381. + toupper(), tolower() for strings
  382. + equal_icase() for strings
  383. 2016-12-30 __vic
  384. + ascii.h:
  385. + isdigit(), isxdigit(), isalpha(), isalnum(), isspace(), isascii()
  386. + islower(), isupper()
  387. + tolower(), toupper(), upper_to_lower(), lower_to_upper()
  388. + equal_icase(char,char)
  389. + date_time.h:
  390. + is_leap_year()
  391. + days_in_month()
  392. + days_between_years()
  393. + validate_date(), validate_time(), validate_date_time()
  394. 2016-12-29 __vic
  395. + stdint.h:
  396. + [u]int<N>_t, [u]int_least<N>_t, [u]int_fast<N>_t, [u]intmax_t,
  397. [u]intptr_t
  398. + int_exactly_bytes<>, uint_exactly_bytes<>
  399. + bits.h:
  400. + lo_nibble(), hi_nibble()
  401. + msb_ones(), lsb_ones()
  402. + get_lsbs()
  403. + ord()
  404. + to_hex_digit_upper(), to_hex_digit_lower()
  405. + hex_to_number()
  406. + swapped_nibbles()
  407. + rotl(), rotr()
  408. 2016-12-28 __vic
  409. + string_buffer: move constructor for std::string
  410. + logger.h:
  411. + logger
  412. 2016-12-27 __vic
  413. + posix/process.h:
  414. + posix::daemon()
  415. + posix/signal.h:
  416. + posix::sigset
  417. + posix::ignore_signals()
  418. + posix/thread.h:
  419. + posix::this_thread:
  420. + sigwait(), sigwaitinfo()
  421. + block_signals(), unblock_signals(), set_sigmask()
  422. + posix/dir_entries.h:
  423. + posix::dir_entries
  424. + posix/dir_files.h:
  425. + posix::dir_files
  426. + posix/iov.h:
  427. + posix::ovectors
  428. + posix::total(iovec[])
  429. + posix::cut_prefix(iovec[])
  430. + posix::writev_all()
  431. 2016-12-26 __vic
  432. + string_ref.h:
  433. + basic_string_ref (string_ref)
  434. + string_buffer: string_ref support
  435. + trim.h:
  436. + trim(), trimmed(), trim_left(), ...
  437. + sift(), sift_if()
  438. 2016-12-23 __vic
  439. + io.h:
  440. + stdio_file
  441. + getline()
  442. + object_pool.h:
  443. + object_pool
  444. + tchar.h
  445. 2016-12-22 __vic
  446. + to_text.h:
  447. + to_text_append()
  448. + string_buffer.h:
  449. + string_buffer
  450. + posix/error.h:
  451. + is_ENOENT(), is_EAGAIN()
  452. + posix/file.h:
  453. + posix::file
  454. + posix/file_stat.h:
  455. + posix::file_stat
  456. 2016-12-21 __vic
  457. + defs.h:
  458. + nullptr
  459. + non_copyable
  460. + non_heap_allocatable
  461. + array_size()
  462. + static_string.h:
  463. + static_string
  464. + error.h:
  465. + exception
  466. + libc_error
  467. + throw_errno()
  468. 2016-06-23 __vic
  469. * Total revision and rework started in order to publish the code
  470. VERSION 0.6
  471. 2011-05-17 __vic
  472. * The last internal release before rework (no distribution)
  473. VERSION 0.5.1
  474. 2010-09-08 __vic
  475. * The last released version before rework
  476. 2007-08-15 __vic
  477. * The project is started