public T Get <T>(StmMemory <T> memoryRef) where T : struct
        {
            T value = baseTransaction.Get(memoryRef);

            LogAction(baseTransaction.Name + " get value from " + memoryRef.ToString() + " value = " + value.ToString());
            return(value);
        }
        public void Set <T>(StmMemory <T> memoryRef, object value, MemoryTuple <T> memoryTuple = null) where T : struct
        {
            if (memoryTuple == null)
            {
                memoryTuple = MemoryTuple <T> .Get((T)value, memoryRef.Version[Imbrication]);
            }
            baseTransaction.Set(memoryRef, value, memoryTuple);
            string log = baseTransaction.Name + " set value to " + memoryRef.ToString() + " value = " + memoryTuple.value;

            if (baseTransaction.ParentTransaction != null)
            {
                log += " parent value = " + baseTransaction.ParentTransaction.GetMemoryTupleValue <T>(memoryRef).value;
            }
            LogAction(log);
        }