コード例 #1
0
ファイル: PersistentTree.cs プロジェクト: ywscr/MindMate
 public override T GetLargeObject <T>(string key)
 {
     if (base.TryGetLargeObject <T>(key, out T obj))
     {
         return(obj);
     }
     else
     {
         obj = new MapZipSerializer().DeserializeLargeObject <T>(FileName, key);
         base.SetLargeObject(key, obj);
         return(obj);
     }
 }
コード例 #2
0
ファイル: PersistentTree.cs プロジェクト: tuga1975/MindMate
        private List <string> newLobs = new List <string>(); //not saved yet

        /// <summary>
        ///
        /// </summary>
        /// <param name="key"></param>
        /// <returns>null if not found</returns>
        public byte[] GetByteArray(string key)
        {
            byte[] obj;
            if (lobCache.TryGetValue(key, out obj))
            {
                return(lobCache[key] as byte[]);
            }
            else
            {
                obj           = new MapZipSerializer().DeserializeLargeObject(FileName, key);
                lobCache[key] = obj;
            }

            return(obj);
        }
コード例 #3
0
ファイル: PersistentTree.cs プロジェクト: umaranis/MindMate
        /// <summary>
        /// Large Objects are loaded on demand by PersistentTree, by default. This method forces to preload all of them.
        /// This is useful when making a copy of the map (like in Save As)
        /// </summary>
        public void LoadAllLargeObjects()
        {
            var           ser  = new MapZipSerializer();
            List <string> keys = ser.DeserializeAllLargeObjectKeys(FileName);

            foreach (var key in keys)
            {
                if (!lobStore.ContainsKey(key))
                {
                    ILargeObject largeObject = LargeObjectHelper.CreateFromKey(key);
                    if (ser.DeserializeLargeObject(FileName, key, largeObject))
                    {
                        base.SetLargeObject(key, largeObject);
                    }
                }
            }
        }
コード例 #4
0
ファイル: PersistentTree.cs プロジェクト: ywscr/MindMate
 public override bool TryGetLargeObject <T>(string key, out T largeObject)
 {
     if (base.TryGetLargeObject <T>(key, out largeObject))
     {
         return(true);
     }
     else
     {
         largeObject = new MapZipSerializer().DeserializeLargeObject <T>(FileName, key);
         if (largeObject != null)
         {
             base.SetLargeObject(key, largeObject);
             return(true);
         }
         else
         {
             return(false);
         }
     }
 }
コード例 #5
0
ファイル: PersistentTree.cs プロジェクト: ywscr/MindMate
        /// <summary>
        /// Save Changes
        /// </summary>
        public void Save(bool overwrite = false)
        {
            Debug.Assert(FileName != null, "Persistent Tree: File name is null.");

            var serializer = new MapZipSerializer();

            try
            {
                serializer.SerializeMap(this, FileName, overwrite);
            }
            catch (InvalidDataException) //in case of converting from old xml version, save without overwrite=true will not work
            {
                serializer.SerializeMap(this, FileName, true);
            }

            newLobs.Clear();
            deletedLobs.Clear();
            IsDirty = false;

            manager._InvokeTreeSaved(this);
        }
コード例 #6
0
ファイル: PersistentTree.cs プロジェクト: tuga1975/MindMate
        /// <summary>
        /// Save Changes
        /// </summary>
        public void Save(bool overwrite = false)
        {
            Debug.Assert(FileName != null, "Persistent Tree: File name is null.");

            //if overwrite then save all largeObjects, otherwise only new ones
            IEnumerable <KeyValuePair <string, byte[]> > largeObjectsToSave = overwrite ? lobCache : lobCache.Where(k => newLobs.Contains(k.Key));

            var serializer = new MapZipSerializer();

            try
            {
                serializer.SerializeMap(Tree, largeObjectsToSave, FileName, overwrite);
            }
            catch (InvalidDataException) //in case of converting from old xml version, save without overwrite=true will not work
            {
                serializer.SerializeMap(Tree, largeObjectsToSave, FileName, true);
            }

            newLobs.Clear();
            IsDirty = false;

            manager._InvokeTreeSaved(this);
        }