public void GetRecordsFromVirtual(ListStruct source)//брать записи из источника в качестве списка { this.counter = source.counter; TabStud Record = source.ListRecord;//обьявили и присвоили запись шоб ходить по списку не изменяя головы this.Records = new TabStud[source.counter]; for (int i = 0; i < source.counter - 1; i++) { this.Records[i] = Record; Record = Record.Next; } this.Records[source.counter - 1] = Record; }
void WriteList(ListStruct list) { bool b = !TypeMarkerUtil.IsFinal(list.ElementType); WriteVInt(list.Type); foreach (var m in list.MemberValues) { WriteValue(m); } writer.Write((byte)list.ElementType); WriteVInt((uint)list.Values.Length); foreach (var m in list.Values) { WriteValue(m, b); } }
public ListStruct SetRecordsToVirtual()// если в последствии используемый алгоритм изменит данные, то {//выполниим эту функцию которая вернет в место назначения список.. //ток через ретурнс ибо свойства нельзя передавать как пареметр через реф!! var dest = new ListStruct(DGV); // /*this.Records[0].Next =*/ this.Records[this.counter - 1].Next = null; TabStud Record = this.Records[0];//записали какбэ голову dest.ListRecord = Record;//и отдали в дест dest.LastOf = this.Records[this.counter - 1]; dest.LastOf.Next = null; dest.counter = this.counter; for (int i = 0; i < (this.counter - 2); i++) { this.Records[i].Next = this.Records[i + 1]; Record = this.Records[i]; Record = Record.Next; } this.Records[this.counter - 2].Next = this.Records[this.counter - 1]; return dest; }
ListStruct ConvertList(IEnumerable obj) { Type t = obj.GetType(); List <object> elements = obj.Cast <object>().ToList(); ListStruct list = new ListStruct(); list.Type = GetTypeRef(t); list.ElementType = GetTypeMarker(obj); list.Values = new ValueStruct[elements.Count]; for (int i = 0; i < elements.Count; i++) { list.Values[i] = Convert(elements[i]); } TypeStruct ts = types.GetValue(list.Type); list.MemberValues = new ValueStruct[ts.Members.Length]; int slot = 0; foreach (var member in ts.Members) { string name = strings.GetValue(member); var p = t.GetProperty(name); if (p != null) { list.MemberValues[slot] = Convert(p.GetValue(obj)); } else { list.MemberValues[slot] = Convert(t.GetField(name).GetValue(obj)); } slot++; } return(list); }