博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
dnyArray分析,动态数组分析
阅读量:5799 次
发布时间:2019-06-18

本文共 1944 字,大约阅读时间需要 6 分钟。

  hot3.png

 

procedure setlength(p1,p2,p3,p4);beginVarArgStart(VAList);DynArraySetLength(A, TypeInfo, DimCnt, PNativeInt(VAList));end;

 

procedure DynArraySetLength(A, TypeInfo, DimCnt, PNativeInt(VAList));beginp := a;newLength := lengthVec^;if newLength <= 0 thenif newLength < 0 thenError(reRangeError);_DynArrayClear(a, typeInfo);exit;oldLength := 0;if p <> nil thenDec(PByte(p), SizeOf(TDynArrayRec));oldLength := PDynArrayRec(p).Length;Inc(PByte(typeInfo), PDynArrayTypeInfo(typeInfo).name);elSize := PDynArrayTypeInfo(typeInfo).elSize;if PDynArrayTypeInfo(typeInfo).elType <> nil thenElTypeInfo := PDynArrayTypeInfo(typeInfo).elType^ElTypeInfo := nil;neededSize := newLength*elSize;if neededSize div newLength <> elSize thenError(reRangeError);Inc(neededSize, SizeOf(TDynArrayRec));if neededSize < 0 thenError(reRangeError);if (p = nil) or (PDynArrayRec(p).RefCnt = 1) thenpp := p;if (newLength < oldLength) and (ElTypeInfo <> nil) thenFinalizeArray(PByte(p) + SizeOf(TDynArrayRec) + newLength*elSize, ElTypeInfo, oldLength - newLength);ReallocMem(pp, neededSize);p := pp;GetMem(p, neededSize);minLength := oldLength;if minLength > newLength thenminLength := newLength;if ElTypeInfo <> nil thenFillChar((PByte(p) + SizeOf(TDynArrayRec))^, minLength*elSize, 0);__CopyArray(PByte(p) + SizeOf(TDynArrayRec), a, ElTypeInfo, minLength)Move(PByte(a)^, (PByte(p) + SizeOf(TDynArrayRec))^, minLength*elSize);_DynArrayClear(a, typeInfo);PDynArrayRec(p).RefCnt := 1;PDynArrayRec(p).Length := newLength;Inc(PByte(p), SizeOf(TDynArrayRec));if newLength > oldLength thenFillChar((PByte(p) + elSize * oldLength)^, elSize * (newLength - oldLength), 0);if dimCnt > 1 thenInc(lengthVec);Dec(dimCnt);i := 0;tryDynArraySetLength(PPointerArray(p)[i], ElTypeInfo, dimCnt, lengthVec);Inc(i);while i < newLength do_DynArrayClear(PPointerArray(p)[j], typeInfo);for j := 0 to i  do_DynArrayClear(p, ElTypeInfo);raise;a := p;end;

 

转载于:https://my.oschina.net/u/1777508/blog/1837665

你可能感兴趣的文章
又拍云沈志华:如何打造一款安全的App
查看>>
dubbo源码分析-架构
查看>>
6套毕业设计PPT模板拯救你的毕业答辩
查看>>
Windows phone 8 学习笔记
查看>>
我的友情链接
查看>>
sshd_config设置参数笔记
查看>>
LeetCode--112--路径总和
查看>>
感悟贴2016-05-13
查看>>
百度编辑器ueditor 光标位置的坐标
查看>>
DEV-C++ 调试方法简明图文教程(转)
查看>>
参加婚礼
查看>>
刚毕业从事java开发需要掌握的技术
查看>>
vim
查看>>
Java重写equals方法和hashCode方法
查看>>
Spark API编程动手实战-07-join操作深入实战
查看>>
EasyUI基础入门之Easyloader(载入器)
查看>>
java中ArrayList 、LinkList区别
查看>>
Spring ’14 Wave Update: Installing Dynamics CRM on Tablets for Windows 8.1
查看>>
利用rand7()构造rand10()
查看>>
MySQL 备份与恢复
查看>>