# HG changeset patch
# User Andrey Skvortsov <andrej.skvortzov@gmail.com>
# Date 1527857177 -10800
# Node ID 9fa5be79bb7783815a6d294e98d5c2c7945b4f8e
# Parent  d1536c27186641054f18b28409f2b843d3644339
Add helper function GetRetainSize()

it will be useful for retain implementations.

diff -r d1536c271866 -r 9fa5be79bb77 targets/plc_debug.c
--- a/targets/plc_debug.c	Fri Jun 01 12:21:37 2018 +0300
+++ b/targets/plc_debug.c	Fri Jun 01 15:46:17 2018 +0300
@@ -211,6 +211,31 @@
     BufferIterator(dsc, 0);
 }
 
+
+unsigned int retain_size = 0;
+
+/* GetRetainSizeIterator */
+void GetRetainSizeIterator(dbgvardsc_t *dsc)
+{
+    void *real_value_p = NULL;
+    char flags = 0;
+    UnpackVar(dsc, &real_value_p, &flags);
+
+    if(flags & __IEC_RETAIN_FLAG){
+        USINT size = __get_type_enum_size(dsc->type);
+        /* Calc retain buffer size */
+        retain_size += size;
+    }
+}
+
+/* Return size of all retain variables */
+unsigned int GetRetainSize(void)
+{
+    __for_each_variable_do(GetRetainSizeIterator);
+    return retain_size;
+}
+
+
 extern void PLC_GetTime(IEC_TIME*);
 extern int TryEnterDebugSection(void);
 extern long AtomicCompareExchange(long*, long, long);