From 5b563e5e0f5c2cce4bb910e43878e80f417c4894 Mon Sep 17 00:00:00 2001
From: tempiaa <tempiaa@eurecom.fr>
Date: Wed, 24 Jun 2020 17:33:37 +0200
Subject: [PATCH] Memory optimization

---
 .../java/avatartranslator/AvatarExpressionAttribute.java    | 4 ++--
 src/main/java/avatartranslator/AvatarSpecification.java     | 6 ++++++
 .../avatartranslator/modelchecker/AvatarModelChecker.java   | 1 +
 .../test/java/avatartranslator/AvatarExpressionTest.java    | 1 +
 4 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/src/main/java/avatartranslator/AvatarExpressionAttribute.java b/src/main/java/avatartranslator/AvatarExpressionAttribute.java
index 0e589c0147..a435f36ad3 100644
--- a/src/main/java/avatartranslator/AvatarExpressionAttribute.java
+++ b/src/main/java/avatartranslator/AvatarExpressionAttribute.java
@@ -138,7 +138,7 @@ public class AvatarExpressionAttribute {
                     mask = 0xFF;
                 }
             } else {
-                accessIndex = SpecificationBlock.ATTR_INDEX + offset + ((attributeIndex - offset) / 32);
+                accessIndex = SpecificationBlock.ATTR_INDEX + (offset + optRatio - 1) / optRatio + ((attributeIndex - offset) / 32);
                 shift = (attributeIndex - offset) % 32;
                 mask = 1;
             }
@@ -180,7 +180,7 @@ public class AvatarExpressionAttribute {
                     mask = 0xFF;
                 }
             } else {
-                accessIndex = SpecificationBlock.ATTR_INDEX + offset + ((attributeIndex - offset) / 32);
+                accessIndex = SpecificationBlock.ATTR_INDEX + (offset + optRatio - 1) / optRatio + ((attributeIndex - offset) / 32);
                 shift = (attributeIndex - offset) % 32;
                 mask = 1;
             }
diff --git a/src/main/java/avatartranslator/AvatarSpecification.java b/src/main/java/avatartranslator/AvatarSpecification.java
index b11deecc67..deed36170e 100644
--- a/src/main/java/avatartranslator/AvatarSpecification.java
+++ b/src/main/java/avatartranslator/AvatarSpecification.java
@@ -432,6 +432,12 @@ public class AvatarSpecification extends AvatarElement {
             block.sortAttributes();
         }
     }
+    
+    public void setAttributeOptRatio(int attributeOptRatio) {
+        for(AvatarBlock block: blocks) {
+            block.setAttributeOptRatio(attributeOptRatio);
+        }
+    }
 //
 //    private void renameTimers() {
 //        // Check whether timers have the same name in different blocks
diff --git a/src/main/java/avatartranslator/modelchecker/AvatarModelChecker.java b/src/main/java/avatartranslator/modelchecker/AvatarModelChecker.java
index fa50768658..744713c9e6 100644
--- a/src/main/java/avatartranslator/modelchecker/AvatarModelChecker.java
+++ b/src/main/java/avatartranslator/modelchecker/AvatarModelChecker.java
@@ -736,6 +736,7 @@ public class AvatarModelChecker implements Runnable, myutil.Graph {
         prepareStates();
         
         spec.sortAttributes();
+        spec.setAttributeOptRatio(2);
         initExpressionSolvers();
 
         prepareTransitions();
diff --git a/ttool/src/test/java/avatartranslator/AvatarExpressionTest.java b/ttool/src/test/java/avatartranslator/AvatarExpressionTest.java
index c73dc0d0ba..88c068afd1 100644
--- a/ttool/src/test/java/avatartranslator/AvatarExpressionTest.java
+++ b/ttool/src/test/java/avatartranslator/AvatarExpressionTest.java
@@ -181,6 +181,7 @@ public class AvatarExpressionTest {
     @Test
     public void testSpec() {
         as.sortAttributes();
+        as.setAttributeOptRatio(2);
         SpecificationState ss = new SpecificationState();
         ss.setInit(as, false);
         
-- 
GitLab