Exemple #1
0
 public void Insert(int index, T item)
 {
     updateArr();
     if (index < 0 || index > length)
     {
         throw new ArgumentOutOfRangeException(nameof(index), "out of range");
     }
     if (index == 0 && length > 0)
     {
         if (_data.value.offset <= 0)
         {
             offsetfiles(this.length / 4);
         }
         _data.MutauteValue(a => new PermaObjArrayData(a.length + 1, a.offset - 1));
         IPermaObject <T> newval = getperma(_data.value.offset);
         newval.value = item;
         _array.Insert(0, newval);
     }
     else
     {
         _data.MutauteValue(a => new PermaObjArrayData(a.length + 1, a.offset));
         updateArr(true);
         foreach (var i in range.Range(index, this.length - 1).Reverse())
         {
             this[i + 1] = this[i];
         }
         this[index] = item;
     }
 }
Exemple #2
0
 //if array already exists, the length and offset parameters are ignored
 public PermaList(int length, int offset, IFormatter <T> serializer, string name, bool deleteOnDispose = false, FileAccess access = FileAccess.ReadWrite, FileShare share = FileShare.None, FileMode mode = FileMode.OpenOrCreate, T valueIfCreated = default(T), bool allowCaching = true)
 {
     _serializer          = serializer;
     this.DeleteOnDispose = deleteOnDispose;
     _valueIfCreated      = valueIfCreated;
     this.name            = name;
     _data = new PermaObject <PermaObjArrayData>(MutateFileName(name, a => "__ARRAYDATA_" + a), deleteOnDispose, access, share, mode, new PermaObjArrayData(length, offset), allowCaching);
     this.updateArr(true);
 }
Exemple #3
0
 public PermaLabeledDictionary(IFormatter <T> serializer, string name, string defSeperator = null, bool deleteOnDispose = false, FileAccess access = FileAccess.ReadWrite, FileShare share = FileShare.None, FileMode mode = FileMode.OpenOrCreate)
 {
     _definitions    = new PermaObject <string>(name, deleteOnDispose, access, share, mode, "");
     DeleteOnDispose = deleteOnDispose;
     _serializer     = serializer;
     this.name       = name;
     _defSeperator   = defSeperator ?? Environment.NewLine;
     this.RefreshDefinitions(true);
 }