示例#1
0
 public void Commit()
 {
     Lock(inTxDict.Keys.ToArray());
     try
     {
         bool isValid = true;
         foreach (StmRef <T> stmRef in inTxDict.Keys)
         {
             if (stmRef.Version != version[stmRef])
             {
                 isValid = false;
                 break;
             }
         }
         if (isValid)
         {
             foreach (StmRef <T> stmRef in toUpdate)
             {
                 stmRef.content = RefTuple <T, long> .Get((T)inTxDict[stmRef], this.Revision, 0);
             }
         }
         IsCommited = isValid;
     }
     finally
     {
         UnLock(inTxDict.Keys.ToArray());
     }
 }
 public void Commit()
 {
     lock (StmModified.commitLock)
     {
         Lock(inTxDict.Keys.ToArray());
         try
         {
             bool isValid = CheckIsValid();
             if (isValid)
             {
                 if (parentTransaction == null)
                 {
                     foreach (StmRef <T> stmRef in toUpdate)
                     {
                         stmRef.content = RefTuple <T, long> .Get((T)inTxDict[stmRef], stmRef.Version, this.Revision);
                     }
                 }
                 else
                 {
                     foreach (StmRef <T> stmRef in toUpdate)
                     {
                         stmRef.content = RefTuple <T, long> .Get((T)inTxDict[stmRef], this.Revision, stmRef.ParentVersion);
                     }
                 }
             }
             IsCommited = (isValid || IsParentConflict);
         }
         finally
         {
             UnLock(inTxDict.Keys.ToArray());
         }
     }
 }
示例#3
0
        public T Read(StmRef <T> stmRef)
        {
            if (!inTxDict.ContainsKey(stmRef))
            {
                RefTuple <T, long> tuple = stmRef.content;

                inTxDict.Add(stmRef, tuple.Value);
                if (!version.ContainsKey(stmRef))
                {
                    version.Add(stmRef, tuple.Version);
                }
            }
            return((T)inTxDict[stmRef]);
        }
        public void Write(StmRef <T> stmRef, T value)
        {
            RefTuple <T, long> tuple = stmRef.content;

            if (!inTxDict.ContainsKey(stmRef))
            {
                inTxDict.Add(stmRef, value);
                toUpdate.Add(stmRef);
            }
            else
            {
                inTxDict[stmRef] = value;
                if (!toUpdate.Contains(stmRef))
                {
                    toUpdate.Add(stmRef);
                }
            }
            if (!version.ContainsKey(stmRef))
            {
                version.Add(stmRef, tuple.Version);
                parentVersion.Add(stmRef, tuple.ParentVersion);
            }
        }