Пример #1
0
 public new void Add(IStructure dta_struct)
 {
     string new_index_hash = dta_struct.GetIndex().DwarfHashCode;
     if (dta_struct is Record)
     {
         items_dict.TryAdd(new_index_hash, dta_struct);
         Modified = true;
     }
 }
Пример #2
0
        public bool TryRemove(IStructure data)
        {
            if (items_dict.ContainsKey(data.GetIndex().DwarfHashCode))
            {
                IStructure dummy = null;
                return items_dict.TryRemove(data.GetIndex().DwarfHashCode, out dummy);
            }

            return false;
        }
Пример #3
0
        /// <summary>
        /// Saving an existant item to a chunk file in multithread mode
        /// </summary>
        /// <param name="filepath">path to a file</param>
        /// <param name="ds">datastructure</param>
        public static void SaveItemContents( string filepath, IStructure ds )
        {
            var elem= new InnerChunkElement();
            if ( ds != null ) {
                var sw_read = new StreamReader( File.Open( filepath, FileMode.Open ) );
                InnerChunkElement icm = null;

                using ( var json_reader = new JsonTextReader(sw_read) ) {
                    icm = FindItem( json_reader, ds.GetIndex().DwarfHashCode );
                }

                if ( icm == null )
                {
                    Errors.Messages.DisplayError("Can't find such item!", "Saving an item", "", DateTime.Now);
                    return;
                }

                var sw_write = new StreamWriter( File.Open( filepath, FileMode.Append ) );
                using (var json_writer = new JsonTextWriter(sw_write)) {
                    if ( ds is Record ) {
                        icm.Contents = JsonConvert.SerializeObject(ds, Formatting.Indented );
                    } else if ( ds is DataContainer ) {
                        icm.Contents = JsonConvert.SerializeObject(ds as DataContainer, Formatting.Indented);
                    }
                    elem.ElementHash = ds.GetIndex().DwarfHashCode;
                    sw_write.Write(JsonConvert.SerializeObject(elem, Formatting.Indented));
                }
            } else {
                Errors.Messages.DisplayError( "DataStructure object is null!", "", "", DateTime.Now);
            }
        }
Пример #4
0
 /// <summary>
 /// Adding a new item to a chunk file in multithread mode
 /// </summary>
 /// <param name="filepath">path to a file</param>
 /// <param name="ds">datastructure</param>
 public static void AddItem( string filepath, IStructure ds )
 {
     if ( ds != null ) {
         var sw = new StreamWriter( File.Open( filepath, FileMode.Append ) );
         using (var json_writer = new JsonTextWriter(sw)) {
             var elem= new InnerChunkElement();
             if ( ds is Record ) {
                 elem.ElementType = InnerChunkElement.ElemType.RECORD;
                 elem.ElemParentName = ((Record)ds).OwnerDC.Name;
                 elem.ElemParentHash = ((Record)ds).OwnerDC.GetIndex().DwarfHashCode;
                 elem.Contents = JsonConvert.SerializeObject(ds, Formatting.Indented );
             } else if ( ds is DataContainer ) {
                 elem.ElementType = InnerChunkElement.ElemType.DATACONTAINER;
                 elem.ElemDB = ((DataContainer)ds).GetOwnerDB().Name;
                 elem.ElemParentName = null;
                 elem.ElemParentHash = null;
                 elem.ElementName = ((DataContainer)ds).Name;
                 var ds_sec = (DataContainer)ds;
                 elem.Contents = JsonConvert.SerializeObject(ds_sec, Formatting.Indented);
             }
             elem.ElementHash = ds.GetIndex().DwarfHashCode;
             sw.Write(JsonConvert.SerializeObject(elem, Formatting.Indented));
         }
     } else {
         Errors.Messages.DisplayError( "DataStructure object is null!", "", "", DateTime.Now);
     }
 }
Пример #5
0
        public static IStructure FindItem( JsonReader json_reader, IStructure ds )
        {
            var item = new InnerChunkElement();
            while ( json_reader.Read() ) {
                item = json_serializer.Deserialize<InnerChunkElement>( json_reader );
                if ( item.ElementHash == ds.GetIndex().DwarfHashCode ) {
                    return ds;
                }
            }

            return null;
        }