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; } }
//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); }
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); }