Wed, 27 Jun 2018 18:13:31 +0300Fix rounding of thousandths of microseconds in duration editor
Andrey Skvortsov <andrej.skvortzov@gmail.com> [Wed, 27 Jun 2018 18:13:31 +0300] rev 2235
Fix rounding of thousandths of microseconds in duration editor

Wed, 27 Jun 2018 17:13:06 +0300Add checking value in microseconds field in duration editor dialog
Andrey Skvortsov <andrej.skvortzov@gmail.com> [Wed, 27 Jun 2018 17:13:06 +0300] rev 2234
Add checking value in microseconds field in duration editor dialog

Wed, 27 Jun 2018 13:57:03 +0300Catch 'clipboard already open' errors in editors
Andrey Skvortsov <andrej.skvortzov@gmail.com> [Wed, 27 Jun 2018 13:57:03 +0300] rev 2233
Catch 'clipboard already open' errors in editors

Apparently following commits have not fixed the problem completely,
because it still happens (although not so often).

changeset: 2019:b8f795bdfe9f
user: Andrey Skvortsov <andrej.skvortzov@gmail.com>
date: Fri May 25 17:40:29 2018 +0300
summary: fix hangs on mouse selection in case if wxPython uses wxWidgets with GTK3+ support

changeset: 2018:5ce6d08ff2c7
user: Andrey Skvortsov <andrej.skvortzov@gmail.com>
date: Fri May 25 17:23:15 2018 +0300
summary: make clipboard open minimal time as wxPython documentation recommends

Wed, 27 Jun 2018 10:58:45 +0300If task type is changed from 'interrupt' to 'cyclic' init interval with T#20ms.
Andrey Skvortsov <andrej.skvortzov@gmail.com> [Wed, 27 Jun 2018 10:58:45 +0300] rev 2232
If task type is changed from 'interrupt' to 'cyclic' init interval with T#20ms.

Tue, 26 Jun 2018 18:02:51 +0300Explicitly enable required libraries in test projects
Andrey Skvortsov <andrej.skvortzov@gmail.com> [Tue, 26 Jun 2018 18:02:51 +0300] rev 2231
Explicitly enable required libraries in test projects

Tue, 26 Jun 2018 17:46:37 +0300Disable by default unlisted in project beremiz.xml libraries
Andrey Skvortsov <andrej.skvortzov@gmail.com> [Tue, 26 Jun 2018 17:46:37 +0300] rev 2230
Disable by default unlisted in project beremiz.xml libraries

Used libraries should be explicitly enabled.

Tue, 26 Jun 2018 17:34:15 +0300Fix 'DoGetTextExtent - invalid DC' error
Andrey Skvortsov <andrej.skvortzov@gmail.com> [Tue, 26 Jun 2018 17:34:15 +0300] rev 2229
Fix 'DoGetTextExtent - invalid DC' error

most likely this error happens only on certain wx backends.
GTK3+ on GNU/Linux is apparently one of them.
The problem is described in wxWidgets issue tracker.
http://trac.wxwidgets.org/ticket/12486

[-------------------------------------------------------------------------------------------------------------------]
platform:
Linux-4.16.0-2-rt-amd64-x86_64-with-debian-buster-sid

python-version:
2.7.15

traceback:
File "/home/developer/WorkData/PLC/beremiz/beremiz/ProjectController.py", line 1605, in DispatchDebugValuesProc
self.CallWeakcallables("__tick__", "NewDataAvailable", debug_ticks)
File "/home/developer/WorkData/PLC/beremiz/beremiz/ProjectController.py", line 1585, in CallWeakcallables
function(*cargs)
File "/home/developer/WorkData/PLC/beremiz/beremiz/editors/Viewer.py", line 1217, in NewDataAvailable
refresh_rect.Union(element.GetRedrawRect())
File "/home/developer/WorkData/PLC/beremiz/beremiz/graphics/GraphicCommons.py", line 1609, in GetRedrawRect
self.ValueSize = self.Parent.GetMiniTextExtent(self.ComputedValue)
File "/home/developer/WorkData/PLC/beremiz/beremiz/editors/Viewer.py", line 932, in GetMiniTextExtent
return self.MiniTextDC.GetTextExtent(text)
File "/usr/lib/python2.7/dist-packages/wx-3.0-gtk3/wx/_gdi.py", line 4127, in GetTextExtent
return _gdi_.DC_GetTextExtent(*args, **kwargs)
<class 'wx._core.PyAssertionError'>: C++ assertion "m_graphicContext" failed at ../src/common/dcgraph.cpp(1160) in DoGetTextExtent(): wxGCDC(cg)::DoGetTextExtent - invalid DC

wx-platform:
__WXGTK__

wx-version:
3.0.2.0

[-------------------------------------------------------------------------------------------------------------------]

traceback:
File "/home/developer/WorkData/PLC/beremiz/beremiz/controls/LogViewer.py", line 740, in OnMessageToolTipTimer
self.MessageToolTip.SetFont(self.Font)
File "/home/developer/WorkData/PLC/beremiz/beremiz/controls/CustomToolTip.py", line 75, in SetFont
self.RefreshTip()
File "/home/developer/WorkData/PLC/beremiz/beremiz/controls/CustomToolTip.py", line 158, in RefreshTip
self.SetClientSize(self.GetToolTipSize())
File "/home/developer/WorkData/PLC/beremiz/beremiz/controls/CustomToolTip.py", line 145, in GetToolTipSize
w, h = dc.GetTextExtent(line)
File "/usr/lib/python2.7/dist-packages/wx-3.0-gtk3/wx/_gdi.py", line 4127, in GetTextExtent
return _gdi_.DC_GetTextExtent(*args, **kwargs)
<class 'wx._core.PyAssertionError'>: C++ assertion "m_graphicContext" failed at ../src/common/dcgraph.cpp(1160) in DoGetTextExtent(): wxGCDC(cg)::DoGetTextExtent - invalid DC

[-------------------------------------------------------------------------------------------------------------------]

Tue, 26 Jun 2018 14:48:44 +0300Fix size of ProjectDialog used by PLCOpenEditor
Andrey Skvortsov <andrej.skvortzov@gmail.com> [Tue, 26 Jun 2018 14:48:44 +0300] rev 2228
Fix size of ProjectDialog used by PLCOpenEditor

Disable scrolling for ProjectDialog, because otherwise very very small
windows is created.
This regression was introduced by 5701225 ("replaced normal panel with scrolled panel under project
properties").

Tue, 26 Jun 2018 10:37:36 +0300Fix some compilation warnings for better ANSI C compliance
Andrey Skvortsov <andrej.skvortzov@gmail.com> [Tue, 26 Jun 2018 10:37:36 +0300] rev 2227
Fix some compilation warnings for better ANSI C compliance

Fri, 20 Jul 2018 11:10:42 +0200Customizable columns in VariableTables (i.e. can be monkey patched properly)
Edouard Tisserant [Fri, 20 Jul 2018 11:10:42 +0200] rev 2226
Customizable columns in VariableTables (i.e. can be monkey patched properly)

Fri, 20 Jul 2018 11:05:17 +0200Merged
Edouard Tisserant [Fri, 20 Jul 2018 11:05:17 +0200] rev 2225
Merged

Thu, 19 Jul 2018 13:32:27 +0200Customizable update of toolbar buttons (i.e. 'methods') according to PLCStatus nevow_service_rework
Edouard Tisserant [Thu, 19 Jul 2018 13:32:27 +0200] rev 2224
Customizable update of toolbar buttons (i.e. 'methods') according to PLCStatus

Fri, 13 Jul 2018 09:06:01 +0200Fixed small typo in error message. nevow_service_rework
Edouard Tisserant [Fri, 13 Jul 2018 09:06:01 +0200] rev 2223
Fixed small typo in error message.

Thu, 12 Jul 2018 09:35:09 +0200WAMP : complains about failure to start WAMP only if it was successfully imported. nevow_service_rework
Edouard Tisserant [Thu, 12 Jul 2018 09:35:09 +0200] rev 2222
WAMP : complains about failure to start WAMP only if it was successfully imported.

Wed, 11 Jul 2018 14:32:19 +0200WAMP: now config and secret given in project files always override those given in commandline. Also made extensions web customisations happen before registration of web interface. nevow_service_rework
Edouard Tisserant [Wed, 11 Jul 2018 14:32:19 +0200] rev 2221
WAMP: now config and secret given in project files always override those given in commandline. Also made extensions web customisations happen before registration of web interface.

Tue, 10 Jul 2018 12:54:05 +0200Moved Wamp configuration file selection logic into runtime/wampclient.py. Added Wamp CRA secret file upload and download. Slightly reworked code for config and secret file loading and saving. nevow_service_rework
Edouard Tisserant [Tue, 10 Jul 2018 12:54:05 +0200] rev 2220
Moved Wamp configuration file selection logic into runtime/wampclient.py. Added Wamp CRA secret file upload and download. Slightly reworked code for config and secret file loading and saving.

Tue, 10 Jul 2018 12:51:28 +0200Added a way for extension to register dedicated URL under settings page URL (i.e. /settings/something) nevow_service_rework
Edouard Tisserant [Tue, 10 Jul 2018 12:51:28 +0200] rev 2219
Added a way for extension to register dedicated URL under settings page URL (i.e. /settings/something)

Fri, 06 Jul 2018 15:09:44 +0200Fixed a bit of everything in WAMP, and added web settings for that same extension. nevow_service_rework
Edouard Tisserant [Fri, 06 Jul 2018 15:09:44 +0200] rev 2218
Fixed a bit of everything in WAMP, and added web settings for that same extension.

Fri, 06 Jul 2018 15:07:40 +0200Added some immutable field (platform) in default runtime web setting page, for the example. nevow_service_rework
Edouard Tisserant [Fri, 06 Jul 2018 15:07:40 +0200] rev 2217
Added some immutable field (platform) in default runtime web setting page, for the example.

Fri, 06 Jul 2018 15:05:03 +0200Fix misc typos in exception handling code. nevow_service_rework
Edouard Tisserant [Fri, 06 Jul 2018 15:05:03 +0200] rev 2216
Fix misc typos in exception handling code.

Thu, 05 Jul 2018 13:46:18 +0200Fixed i18n related typo. nevow_service_rework
Edouard Tisserant [Thu, 05 Jul 2018 13:46:18 +0200] rev 2215
Fixed i18n related typo.

Thu, 05 Jul 2018 13:45:24 +0200Fixed typo nevow_service_rework
Edouard Tisserant [Thu, 05 Jul 2018 13:45:24 +0200] rev 2214
Fixed typo

Thu, 05 Jul 2018 13:44:54 +0200Better logging of Nevow Server import in case of exception. nevow_service_rework
Edouard Tisserant [Thu, 05 Jul 2018 13:44:54 +0200] rev 2213
Better logging of Nevow Server import in case of exception.

Thu, 05 Jul 2018 11:11:01 +0200WampClient : Simplified, removed dead code, use exception for handling failures and misconfiguration, check existence of mandatory parameters. nevow_service_rework
Edouard Tisserant [Thu, 05 Jul 2018 11:11:01 +0200] rev 2212
WampClient : Simplified, removed dead code, use exception for handling failures and misconfiguration, check existence of mandatory parameters.

Wed, 04 Jul 2018 14:17:00 +0200Merged #2486, enhancements to WAMP client : auto reconnecting, wamp conf checking and saving, additional attributes for exposed calls, etc nevow_service_rework
Edouard Tisserant [Wed, 04 Jul 2018 14:17:00 +0200] rev 2211
Merged #2486, enhancements to WAMP client : auto reconnecting, wamp conf checking and saving, additional attributes for exposed calls, etc

Wed, 04 Jul 2018 14:10:03 +0200Nevow based web interface now show simple Log message sending form for basic runtime, and allow extensions to add their own web settings. nevow_service_rework
Edouard Tisserant [Wed, 04 Jul 2018 14:10:03 +0200] rev 2210
Nevow based web interface now show simple Log message sending form for basic runtime, and allow extensions to add their own web settings.

Fri, 22 Jun 2018 14:08:34 +0200Now, runtime extensions should be able to add their own settings to web configuration interface. nevow_service_rework
Edouard Tisserant [Fri, 22 Jun 2018 14:08:34 +0200] rev 2209
Now, runtime extensions should be able to add their own settings to web configuration interface.

Fri, 22 Jun 2018 12:43:33 +0200Embrio of setting form, just to test nevow_service_rework
Edouard Tisserant [Fri, 22 Jun 2018 12:43:33 +0200] rev 2208
Embrio of setting form, just to test

Tue, 05 Jun 2018 15:29:58 +0200#2486 Exception if custom protocol options are wrong. #2486
dporopat <denis.poropat@smarteh.si> [Tue, 05 Jun 2018 15:29:58 +0200] rev 2207
#2486 Exception if custom protocol options are wrong.

Fri, 18 May 2018 11:05:49 +0200#2486 ExposedCalls with register options as a dictionary. #2486
dporopat <denis.poropat@smarteh.si> [Fri, 18 May 2018 11:05:49 +0200] rev 2206
#2486 ExposedCalls with register options as a dictionary.

Mon, 14 May 2018 13:05:54 +0200#2486 Renaming functions. #2486
dporopat <denis.poropat@smarteh.si> [Mon, 14 May 2018 13:05:54 +0200] rev 2205
#2486 Renaming functions.

Mon, 14 May 2018 08:45:44 +0200#2486 Reconnect funtion in SaveWampClientConf function. #2486
dporopat <denis.poropat@smarteh.si> [Mon, 14 May 2018 08:45:44 +0200] rev 2204
#2486 Reconnect funtion in SaveWampClientConf function.

Wed, 09 May 2018 09:59:53 +0200#2486 Modified reconnect function. Added 'active' parameter to wampconf.json file. #2486
dporopat <denis.poropat@smarteh.si> [Wed, 09 May 2018 09:59:53 +0200] rev 2203
#2486 Modified reconnect function. Added 'active' parameter to wampconf.json file.

Thu, 19 Apr 2018 13:40:56 +0200#2486 Adding reconnect funtion to WampClient. Global TransportFactory not needed anymore. #2486
dporopat <denis.poropat@smarteh.si> [Thu, 19 Apr 2018 13:40:56 +0200] rev 2202
#2486 Adding reconnect funtion to WampClient. Global TransportFactory not needed anymore.

Wed, 18 Apr 2018 10:42:33 +0200#2486 Added global TransportFactory, needed in WebInterface reconnecting function. #2486
dporopat <denis.poropat@smarteh.si> [Wed, 18 Apr 2018 10:42:33 +0200] rev 2201
#2486 Added global TransportFactory, needed in WebInterface reconnecting function.

Wed, 18 Apr 2018 10:40:16 +0200#2486 WampClient needs pyro.plcobj before registration calls. #2486
dporopat <denis.poropat@smarteh.si> [Wed, 18 Apr 2018 10:40:16 +0200] rev 2200
#2486 WampClient needs pyro.plcobj before registration calls.

Wed, 11 Apr 2018 10:53:48 +0200#2486 Fix if protocol, register options are not present in wapmconf.json file. #2486
dporopat <denis.poropat@smarteh.si> [Wed, 11 Apr 2018 10:53:48 +0200] rev 2199
#2486 Fix if protocol, register options are not present in wapmconf.json file.

Tue, 10 Apr 2018 12:08:23 +0200#2486 Added ExposedProgressCalls list using details argument for registration progress calls. #2486
dporopat <denis.poropat@smarteh.si> [Tue, 10 Apr 2018 12:08:23 +0200] rev 2198
#2486 Added ExposedProgressCalls list using details argument for registration progress calls.

Tue, 10 Apr 2018 10:44:46 +0200#2486 Unnecessary variable removed. #2486
dporopat <denis.poropat@smarteh.si> [Tue, 10 Apr 2018 10:44:46 +0200] rev 2197
#2486 Unnecessary variable removed.

Tue, 10 Apr 2018 09:54:22 +0200#2486 Added option to use websocket register options. Added function getValidOptins to read options from wampconf.json. #2486
dporopat <denis.poropat@smarteh.si> [Tue, 10 Apr 2018 09:54:22 +0200] rev 2196
#2486 Added option to use websocket register options. Added function getValidOptins to read options from wampconf.json.

Mon, 09 Apr 2018 14:38:38 +0200#2486 Added option to use websocket protocol options. #2486
dporopat <denis.poropat@smarteh.si> [Mon, 09 Apr 2018 14:38:38 +0200] rev 2195
#2486 Added option to use websocket protocol options.

Tue, 27 Mar 2018 10:11:04 +0200#2486 Updated wamp test project to work with the latest Crossbar version. #2486
dporopat <denis.poropat@smarteh.si> [Tue, 27 Mar 2018 10:11:04 +0200] rev 2194
#2486 Updated wamp test project to work with the latest Crossbar version.

Mon, 19 Mar 2018 12:18:07 +0100#2486 Reset delay function added. It resets the delay and the retry counter on reconnect. #2486
dporopat <denis.poropat@smarteh.si> [Mon, 19 Mar 2018 12:18:07 +0100] rev 2193
#2486 Reset delay function added. It resets the delay and the retry counter on reconnect.

Sat, 23 Jun 2018 09:17:20 +0200merge
Edouard Tisserant <edouard.tisserant@gmail.com> [Sat, 23 Jun 2018 09:17:20 +0200] rev 2192
merge

Sat, 23 Jun 2018 09:16:35 +0200merge
Edouard Tisserant <edouard.tisserant@gmail.com> [Sat, 23 Jun 2018 09:16:35 +0200] rev 2191
merge

Mon, 18 Jun 2018 12:17:07 +0300Fix compilation warning/error: comparison between signed and unsigned integer expressions [-Werror=sign-compare]
Andrey Skvortsov <andrej.skvortzov@gmail.com> [Mon, 18 Jun 2018 12:17:07 +0300] rev 2190
Fix compilation warning/error: comparison between signed and unsigned integer expressions [-Werror=sign-compare]

Mon, 18 Jun 2018 12:12:57 +0300merge
Andrey Skvortsov <andrej.skvortzov@gmail.com> [Mon, 18 Jun 2018 12:12:57 +0300] rev 2189
merge

Fri, 15 Jun 2018 09:48:05 +0200WxGlade HMI extension now does only instanciate wx object who's name match extension's name. If no object match the name and no code is provided in 'start' user python code section, then a warning is issued
Edouard Tisserant [Fri, 15 Jun 2018 09:48:05 +0200] rev 2188
WxGlade HMI extension now does only instanciate wx object who's name match extension's name. If no object match the name and no code is provided in 'start' user python code section, then a warning is issued

Wed, 13 Jun 2018 08:54:13 +0200BACnet : ensure that Init did happen before continuing with PLC startup.
Edouard Tisserant [Wed, 13 Jun 2018 08:54:13 +0200] rev 2187
BACnet : ensure that Init did happen before continuing with PLC startup.

Fri, 15 Jun 2018 16:41:55 +0300Update list of files with strings for i18n and templates for translations
Andrey Skvortsov <andrej.skvortzov@gmail.com> [Fri, 15 Jun 2018 16:41:55 +0300] rev 2186
Update list of files with strings for i18n and templates for translations

Fri, 15 Jun 2018 16:30:06 +0300Add small contributing document with information about codestyle checking
Andrey Skvortsov <andrej.skvortzov@gmail.com> [Fri, 15 Jun 2018 16:30:06 +0300] rev 2185
Add small contributing document with information about codestyle checking

Fri, 15 Jun 2018 16:12:50 +0300Add argument to set list of source files to check
Andrey Skvortsov <andrej.skvortzov@gmail.com> [Fri, 15 Jun 2018 16:12:50 +0300] rev 2184
Add argument to set list of source files to check

This is necessary, in case you want to use docker run in pretxncommit
Mercurial hook. Unfortunately for some reason if hg running in
container can't find just created commit defined by $HG_NODE. And it
throws error 'unknown revision'.

Here is example for hgrc.

[hooks]
pretxncommit.linter = hg status -m -n -a -n -I '**.py' --change $HG_NODE > files.lst && docker run --volume=$PWD:/beremiz --workdir="/beremiz" --volume=$PWD/../CanFestival-3:/CanFestival-3 --memory=1g --entrypoint=/beremiz/tests/tools/check_source.sh skvorl/beremiz-requirements --files-to-check files.lst

Sat, 09 Jun 2018 17:59:46 +0300check_source.sh: handle case if there are no files to check
Andrey Skvortsov <andrej.skvortzov@gmail.com> [Sat, 09 Jun 2018 17:59:46 +0300] rev 2183
check_source.sh: handle case if there are no files to check

Sat, 09 Jun 2018 17:14:56 +0300Fix linter errors
Andrey Skvortsov <andrej.skvortzov@gmail.com> [Sat, 09 Jun 2018 17:14:56 +0300] rev 2182
Fix linter errors

Sat, 09 Jun 2018 17:13:16 +0300Add command line argument to run linter only on changed files
Andrey Skvortsov <andrej.skvortzov@gmail.com> [Sat, 09 Jun 2018 17:13:16 +0300] rev 2181
Add command line argument to run linter only on changed files

./tests/tools/check_source.sh --only-changes

It's recommended to run check_source.sh automatically on each commit,
so the rules are always enforced.
Even better is to use docker for that, so the versions of pep8 and
pylint are the same as on pipeline server.

To do this couple of lines should be added into repository's hgrc file.

[----------- cut from .hg/hgrc------------------]

[hooks]
precommit.linter = ./tests/tools/check_source.sh --only-changes
# precommit.linter = docker run -it --volume=$PWD:/beremiz --workdir="/beremiz" --volume=$PWD/../CanFestival-3:/CanFestival-3 --memory=1g --entrypoint=/beremiz/tests/tools/check_source.sh skvorl/beremiz-requirements --only-changes

[-----------------------------------------------]

Fri, 08 Jun 2018 15:10:27 +0300Don't use fixed width labels in WAMP and PYRO dialogs
Andrey Skvortsov <andrej.skvortzov@gmail.com> [Fri, 08 Jun 2018 15:10:27 +0300] rev 2180
Don't use fixed width labels in WAMP and PYRO dialogs

This causes problems if labels are translated into other languages and
width wasn't enough.

Thu, 07 Jun 2018 16:58:13 +0300Fix internatialization in UriLocationEditor, PYRO dialog and Modbus configurator
Andrey Skvortsov <andrej.skvortzov@gmail.com> [Thu, 07 Jun 2018 16:58:13 +0300] rev 2179
Fix internatialization in UriLocationEditor, PYRO dialog and Modbus configurator

Thu, 07 Jun 2018 16:53:21 +0300Add copyright headers to retain implementation for GNU/Linux and Win32
Andrey Skvortsov <andrej.skvortzov@gmail.com> [Thu, 07 Jun 2018 16:53:21 +0300] rev 2178
Add copyright headers to retain implementation for GNU/Linux and Win32

Thu, 07 Jun 2018 16:31:26 +0300Drop support for wxPython 2.6 and below
Andrey Skvortsov <andrej.skvortzov@gmail.com> [Thu, 07 Jun 2018 16:31:26 +0300] rev 2177
Drop support for wxPython 2.6 and below

Thu, 07 Jun 2018 14:45:03 +0300Autoresize UriLocationEditor dialog window
Andrey Skvortsov <andrej.skvortzov@gmail.com> [Thu, 07 Jun 2018 14:45:03 +0300] rev 2176
Autoresize UriLocationEditor dialog window

Thu, 07 Jun 2018 14:12:18 +0300Fix compilation problem in case of TARGET_LOGGING_DISABLE turned on and TARGET_DEBUG_DISABLE turned off
Andrey Skvortsov <andrej.skvortzov@gmail.com> [Thu, 07 Jun 2018 14:12:18 +0300] rev 2175
Fix compilation problem in case of TARGET_LOGGING_DISABLE turned on and TARGET_DEBUG_DISABLE turned off

Thu, 07 Jun 2018 14:04:45 +0300Use the same retain implementation for Win32 targets
Andrey Skvortsov <andrej.skvortzov@gmail.com> [Thu, 07 Jun 2018 14:04:45 +0300] rev 2174
Use the same retain implementation for Win32 targets

Currently plc_Win32_main_retain.c is exact copy of
plc_Linux_main_retain.c, because it's not possible to use symbol
links.

It'd be nice in the future to have possibility to modify targets.code.

Thu, 07 Jun 2018 13:45:35 +0300Add retain basic implementation on GNU/Linux
Andrey Skvortsov <andrej.skvortzov@gmail.com> [Thu, 07 Jun 2018 13:45:35 +0300] rev 2173
Add retain basic implementation on GNU/Linux

Retain is saved in file and backup of this file is done every time.
File isn't saved on every PLC cycle to avoid high I/O load.
By default, retain is saved every second and on PLC stop/shutdown.
It's possible to override retain flush period by using CFLAGS option
in project's settings. For example, for 0.5 seconds period
use "-DFILE_RETAIN_SAVE_PERIOD_S=0.5".

Fri, 01 Jun 2018 15:46:17 +0300Add helper function GetRetainSize()
Andrey Skvortsov <andrej.skvortzov@gmail.com> [Fri, 01 Jun 2018 15:46:17 +0300] rev 2172
Add helper function GetRetainSize()

it will be useful for retain implementations.