diff --git a/src/Amalgam/amlg_code/full_test.amlg b/src/Amalgam/amlg_code/full_test.amlg index e45028d77..d39a51c28 100644 --- a/src/Amalgam/amlg_code/full_test.amlg +++ b/src/Amalgam/amlg_code/full_test.amlg @@ -3546,6 +3546,8 @@ (assign_to_entities "Contained" (assoc a 6 b 10) ) (print (unparse (retrieve_from_entity "Contained" "a") (true) (true))) (set_entity_rand_seed "Contained" "bbbb") + (accum_to_entities "Contained" (assoc b 12) ) + (accum_entity_roots "Contained" (list (set_labels 14 (list "a")))) (destroy_entities "Contained") ) ) diff --git a/src/Amalgam/entity/Entity.cpp b/src/Amalgam/entity/Entity.cpp index 818736f08..d17c69c3f 100644 --- a/src/Amalgam/entity/Entity.cpp +++ b/src/Amalgam/entity/Entity.cpp @@ -929,6 +929,16 @@ void Entity::AccumRoot(EvaluableNodeReference accum_code, bool allocated_with_en node_flags_need_update = true; } + if(write_listeners != nullptr) + { + if(write_listeners->size() > 0) + { + for(auto &wl : *write_listeners) + wl->LogEntityAccumRoot(this, accum_code); + } + asset_manager.UpdateEntityRoot(this); + } + //accum, but can't treat as unique in case any other thread is accessing the data EvaluableNodeReference new_root = AccumulateEvaluableNodeIntoEvaluableNode( EvaluableNodeReference(previous_root, false), accum_code, &evaluableNodeManager); @@ -977,16 +987,6 @@ void Entity::AccumRoot(EvaluableNodeReference accum_code, bool allocated_with_en container_caches->UpdateAllEntityLabels(this, GetEntityIndexOfContainer()); } - if(write_listeners != nullptr) - { - if(write_listeners->size() > 0) - { - for(auto &wl : *write_listeners) - wl->LogWriteToEntityRoot(this); - } - asset_manager.UpdateEntityRoot(this); - } - #ifdef AMALGAM_MEMORY_INTEGRITY VerifyEvaluableNodeIntegrity(); #endif diff --git a/src/Amalgam/entity/EntityWriteListener.cpp b/src/Amalgam/entity/EntityWriteListener.cpp index 4eaa987c8..4a4412a40 100644 --- a/src/Amalgam/entity/EntityWriteListener.cpp +++ b/src/Amalgam/entity/EntityWriteListener.cpp @@ -138,7 +138,6 @@ void EntityWriteListener::LogWriteToEntityRoot(Entity *entity) #ifdef MULTITHREAD_SUPPORT Concurrency::SingleLock lock(mutex); #endif - EvaluableNode *new_write = BuildNewWriteOperation(ENT_ASSIGN_ENTITY_ROOTS, entity); EvaluableNode *new_root = entity->GetRoot(&listenerStorage, EvaluableNodeManager::ENMM_LABEL_ESCAPE_INCREMENT); EvaluableNode *new_lambda = listenerStorage.AllocNode(EvaluableNodeType::ENT_LAMBDA); @@ -148,6 +147,19 @@ void EntityWriteListener::LogWriteToEntityRoot(Entity *entity) LogNewEntry(new_write); } +void EntityWriteListener::LogEntityAccumRoot(Entity *entity, EvaluableNodeReference accum_code) +{ +#ifdef MULTITHREAD_SUPPORT + Concurrency::SingleLock lock(mutex); +#endif + EvaluableNode *new_write = BuildNewWriteOperation(ENT_ACCUM_ENTITY_ROOTS, entity); + EvaluableNode *new_lambda = listenerStorage.AllocNode(EvaluableNodeType::ENT_LAMBDA); + new_lambda->AppendOrderedChildNode(listenerStorage.DeepAllocCopy(accum_code)); + new_write->AppendOrderedChildNode(new_lambda); + + LogNewEntry(new_write); +} + void EntityWriteListener::LogCreateEntity(Entity *new_entity) { if(new_entity == nullptr) diff --git a/src/Amalgam/entity/EntityWriteListener.h b/src/Amalgam/entity/EntityWriteListener.h index 1905df77c..136f4a8ed 100644 --- a/src/Amalgam/entity/EntityWriteListener.h +++ b/src/Amalgam/entity/EntityWriteListener.h @@ -44,6 +44,9 @@ class EntityWriteListener //logs the new entity root, assuming it has already been set void LogWriteToEntityRoot(Entity *entity); + //logs accum to the entity root + void LogEntityAccumRoot(Entity *entity, EvaluableNodeReference accum_code); + void LogCreateEntity(Entity *new_entity); void LogDestroyEntity(Entity *destroyed_entity); diff --git a/src/Amalgam/out.txt b/src/Amalgam/out.txt index fb365d697..0debc3859 100644 --- a/src/Amalgam/out.txt +++ b/src/Amalgam/out.txt @@ -1597,7 +1597,7 @@ infinity test c or d: ["c" "c" "d" "d"] [1 3 4] --get_rand_seed-- -暧I`!cl +���暧I`�!�c�l� --set_rand_seed-- 0.3458744430299684 0.5141404672826732 @@ -1853,27 +1853,27 @@ comment too "e" "f" "g" - "" - "" - "" - "" - "" - "" - "" - "" + "�" + "�" + "�" + "�" + "�" + "�" + "�" + "�" ] [ "ab" "cd" "ef" - "g" - "" - "" - "" - "" + "g�" + "��" + "�" + "��" + "�" ] -["abc" "def" "g" "" "ϡ"] -["abcd" "efg" "" "ϡ"] +["abc" "def" "g�" "��" "�ϡ"] +["abcd" "efg�" "���" "�ϡ"] --split-- ["hello world"] ["hello" "world"] @@ -1927,11 +1927,11 @@ h[e]ll[o] w[o]rld h[e]ll[o] world abcdefgﬗꭖϡ bcdefgﬗꭖϡ -bcdefgﬗ +bcdefgﬗ� bcdefgﬗꭖϡ bcdefgﬗꭖ gﬗꭖ - +��� axdefgﬗꭖϡ --concat-- hello world @@ -2565,7 +2565,7 @@ abcdoxyz 87 --flatten_entity-- 0.40971200496539806 -iA;@VOV- +i��A�;@V��OV-� 0.7136950384635786 0.7136950384635786 0.6522822782263927 @@ -2592,7 +2592,7 @@ flatten restore with seeds test (assign_entity_roots new_entity _) ) ) - (set_entity_rand_seed new_entity "£=mVOV-") + (set_entity_rand_seed new_entity "��£=�mV��OV-�") (set_entity_rand_seed (first (create_entities @@ -2604,7 +2604,7 @@ flatten restore with seeds test ) ) ) - "aE&K\"(X&\0" + "�aE&K\"���(X&�\0�" ) new_entity ) @@ -2629,7 +2629,7 @@ flatten restore with seeds test (assign_entity_roots new_entity _) ) ) - (set_entity_rand_seed new_entity "M:pVVOV-") + (set_entity_rand_seed new_entity "�M:��p�VV��OV-�") (set_entity_rand_seed (first (create_entities @@ -2641,7 +2641,7 @@ flatten restore with seeds test ) ) ) - "aE&K\"(X&\0" + "�aE&K\"���(X&�\0�" ) new_entity ) @@ -2702,7 +2702,7 @@ flatten restore without seeds test (assign_entity_roots new_entity _) ) ) - (set_entity_rand_seed new_entity "{'IC") + (set_entity_rand_seed new_entity "{'�I�����C����") (set_entity_rand_seed (first (create_entities @@ -2714,7 +2714,7 @@ flatten restore without seeds test ) ) ) - "5z^\rF/VQ" + "�5���z^\r�F�/�V�Q�" ) new_entity ) @@ -2744,7 +2744,7 @@ flatten restore with parallel (assign_entity_roots new_entity _) ) ) - (set_entity_rand_seed new_entity "£=mVOV-") + (set_entity_rand_seed new_entity "��£=�mV��OV-�") ||(parallel (set_entity_rand_seed (first @@ -2757,7 +2757,7 @@ flatten restore with parallel ) ) ) - "aE&K\"(X&\0" + "�aE&K\"���(X&�\0�" ) ) new_entity @@ -2783,7 +2783,7 @@ flatten restore with parallel (assign_entity_roots new_entity _) ) ) - (set_entity_rand_seed new_entity "M:pVVOV-") + (set_entity_rand_seed new_entity "�M:��p�VV��OV-�") (set_entity_rand_seed (first (create_entities @@ -2795,7 +2795,7 @@ flatten restore with parallel ) ) ) - "aE&K\"(X&\0" + "�aE&K\"���(X&�\0�" ) new_entity ) @@ -3625,9 +3625,9 @@ this is a fully described entity #c 3 ) --get_entity_rand_seed-- -3yr>89012345 +3�y�r�>�89012345� 0.812564396753873 -adx)5 iD +a��dx�)5� iD� --set_entity_rand_seed-- 0.21086495653466275 0.21086495653466275 @@ -3824,7 +3824,7 @@ hello (assign_entity_roots new_entity _) ) ) - (set_entity_rand_seed new_entity "X~wb3") + (set_entity_rand_seed new_entity "��X�~wb��3�����") (set_entity_rand_seed (first (create_entities @@ -3838,7 +3838,7 @@ hello ) ) ) - "DA30W^vha&" + "DA3���0�W^v�ha�&�" ) (set_entity_rand_seed (first @@ -3853,7 +3853,7 @@ hello ) ) ) - "= \0Fyf@)" + "= ���\0F�yf�@)���" ) new_entity ) @@ -3881,7 +3881,7 @@ persistent loads (assign_entity_roots new_entity _) ) ) - (set_entity_rand_seed new_entity "1a2.Ww") + (set_entity_rand_seed new_entity "1a2�.��W�w�����") (set_entity_rand_seed (first (create_entities @@ -3891,7 +3891,7 @@ persistent loads ) ) ) - "-O[3yCŒ" + "�-�O[��3yC�Œ���" ) (set_entity_rand_seed (first @@ -3906,7 +3906,7 @@ persistent loads ) ) ) - "&$ܴ@n>\"FN" + "&�$ܴ@n�>�\"��FN�" ) new_entity ) @@ -3933,7 +3933,7 @@ persistent loads (assign_entity_roots new_entity _) ) ) - (set_entity_rand_seed new_entity "1a2.Ww") + (set_entity_rand_seed new_entity "1a2�.��W�w�����") (set_entity_rand_seed (first (create_entities @@ -3947,7 +3947,7 @@ persistent loads ) ) ) - "&$ܴ@n>\"FN" + "&�$ܴ@n�>�\"��FN�" ) new_entity ) @@ -4608,6 +4608,18 @@ execution limits tests "bbbb" (false) ) + (accum_to_entities + ["CEGCTest" "Contained"] + {b 12} + ) + (accum_entity_roots + ["CEGCTest" "Contained"] + (lambda + [ + #a 14 + ] + ) + ) (destroy_entities ["CEGCTest" "Contained"] ) @@ -4683,7 +4695,7 @@ entity cyclic test: (assign_entity_roots new_entity _) ) ) - (set_entity_rand_seed new_entity "߉$Ot3FN܎5") + (set_entity_rand_seed new_entity "߉�$Ot3�FN܎5�") new_entity ) 3 @@ -4713,7 +4725,7 @@ entity cyclic test: (assign_entity_roots new_entity _) ) ) - (set_entity_rand_seed new_entity "߉$Ot3FN܎5") + (set_entity_rand_seed new_entity "߉�$Ot3�FN܎5�") new_entity ) cyclic lookup test: