`
neo
  • 浏览: 265551 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Decal SDL Delphi的容器/范型类库

阅读更多
Decal的前身是 SDL,一套商业的通用数据结构与算法类库。Decal删除了其中关于垃圾回收部分的代码,而将其他部分全部开放源代码了,这对大家来说是一个好消息。Decal的全称是 Delphi Container and Algorithm Library,也就是Delphi 数据容器和算法类库。Decal是基于 Mozilla 开放源程序协议的一个数据结构类库,它的作者是Soletta。Decal的一些思想是来自Stepanov 和 Lee 的 C++ STL(Standard Template Library) 和 ObjectSpace’s JGL (Java Generic Library)。

Decal 提供许多其它Delphi类库中没有的功能:
* 基于已经成熟的STL体系,强有力的底层工艺。
* Decal 是基于通用计算机算法和数据结构的类库。
* 提供容易使用的方式存储各种数据类型。(如 Integers, Strings, Extended values)。
* Decal 使用了Delphi 4的数组常量 array of const 功能,该功能极大的减轻了程序员的负担。
* Decal 提供超过 60 种的常用算法。
* Decal 集成 SuperStream 为数据存放到流中提供了解决方案。
* 完整的数据结构类库。Decal 包括:数组 arrays, 双向链表 double-linked lists, 映射 maps, 和集合 sets。 映射结构包括二叉树和散列两种形式。

Decal 的术语解释:
Item (数据项)
在 Decal, 数据项 (items) 是如下的基本数据类型:
整数(Integer), 字符串(String), 货币(Currency), 或字符(Char)类型等。 一个对象(object)也是一种数据项。

Container(容器)
容器是用来保存数据项的。它是一种数据结构。不同类型的容器(数据结构)拥有不同的能力。据一个例子来说,某种类型的容器也许拥有快速的删除能力,但是添加较慢,而另一种容器支持快速的随机访问,但是删除较慢。当你需要容器保存数据项时,选择适当的容器类型将让你的程序效率倍增,反之亦然。每一种容器的利弊我们将在后面详述。

Iterator(数据项指针)
Iterator 就是数据项指针,它指向容器中某一特定的数据项。数据项指针可以前后移动,存取数据项都是通过Iterator(数据项指针)实现的。使用Iterator(数据项指针)访问数据,可以使你在改变容器类型后,对数据项的处理不用作任何的改变。我们经常会看到如下的代码:
Iterator := container.start;
Iterator := container.finish;
第一行代码是取出容器的第一项数据,而第二行是取出容器的 atEnd 结束数据项(最后一数据项的后一个位置,标志结束)

Comparator (比较函数)
比较函数(comparator)用来比较两个数据乡的大小。如果第一项小于第二项,那么函数应该返回一个小于0的值;如果相等则返回数值0;如果第一项大于第二项,那么函数应该返回一个大于0的值。下面是比较函数的定义:

DComparator = function (const obj1, obj2 : DObject) : Integer of object;


AtEnd
Decal 使用数据项指针(iterators)维护容器里的数据项位置。有一个特殊的数据项指针(iterator)叫做: atEnd。
atEnd 数据项指针指示已经达到容器中的最末尾,已无数据可取。从该位置取数据是非法的!有时向该位置写是合法的。某种容器会添加一个对象到atEnd标志(certain containers will add the object being written to the end of the container),但并不是所有的容器都这样做,尤其是映射类容器(mapping containers)。 AtEnd 是非常重要的,当算法无法前进到下一个数据项时它们就会返回 atEnd。

Range (范围)
范围是两个数据项指针,标示数据项的开始位置和结束位置。例如:在 container.start 和 container.finish 之间的数据项就是一个范围。

Pair(数据对)
一个数据对是两个数据项(两个 DObjects, 存储在一个 DPair 中)。映射容器(mapping containers)存储的数据就是数据对,存储的数据对由关键字key(第一个字段)和数据值 value (第二个字段) 构成。

Sequence (序列类型容器)
序列类型容器里的数据项有一定的顺序。序列类型容器将数据项按照一定的顺序,逐一取出。序列类型容器有:链表,数组等。

Vector(向量类型容器)
向量类型容器是由序列类型容器派生而来的。与序列类型容器不同的是,向量类型容器的每一个数据项都是有数字可寻址的。换句话说,你可以想取第一项就取第一项,想取第五项就取第五项。当序列需要返回指定位置的数据项,向量类型容器就是一个有效的实现。向量类型容器的一个有用的实现就是数组。

Map (映射类型容器)
映射类型容器用于存储关键字/值(key-value)数据对。你应该特别重视该类,因为 90%的容器应用都是基于的映射类型容器的应用。映射类型容器可以保存关联数据。举个例子,当你希望保存一系列的员工数据,按照员工ID查找,你就可以使用映射类型容器,将员工ID作为Key,员工数据类作为数据值:
Map.putPair([1001, jimSmithObject]);

当你想取出员工ID为1001的员工数据时候:
employee := getObject(map.locate([1001])) as TEmployee;
映射类型容器对查找关键字非常有效!
Decal 有两种基本的映射类型容器:
  排序映射类型容器(An ordered map:基于红-黑二叉树 red-black trees)
  混乱映射类型容器(An unordered map: 基于散列 hash structures).
映射类型容器有种基本变体: MultiMap 映射类型容器。
他们的不同之处在于 MultiMaps 可以在同一关键字上存储多个对象。而常规映射类型容器在不能在同一关键字上存储不同对象。

Set (集合类型容器)
集合类型容器存储数据项。与 Delphi 的集合概念类似,用来让你快速的确认是否该集合包含或不包含特定的数据项。与Delphi的集合类型不同的是,你可以使用任何的原子数据类型作为集合的元素,如:数字,字符串,对象等等。
与映射类型容器类似,集合类型容器也有种基本变体: MultiSets。MultiSet集合类型容器可以允许有多个同一对象在集合内。
集合类型容器也有两种基本类型:基于红-黑二叉树和基于散列的。

Hashing(散列)
散列(Hashing)是将某一数据项或对象转换成一个标示该数据项或对象的数字。

 

分享到:
评论

相关推荐

    DecalSDL-Delphi的范型类库-通用数据结构与算法类库(一).pdf

    Decal SDL 是一个专为 Delphi 开发的通用数据结构与算法类库,源自 SDL 这个商业类库,但去除了垃圾回收的部分并开源。Decal 全称为 Delphi Container and Algorithm Library,其设计灵感来源于 C++ STL(Standard ...

    Delphi 的数据结构泛型类库 - DeCAL (含源码)

    Decal 的全称是 Delphi Container and Algorithm Library,也就是 Delphi 数据容器和算法类库。 我个人认为是目前我所发现的类结构建模建得很好的一个数据结构类库,性能也是相当突出。他的思想是来自Stepanov 和 ...

    OpenGL中decal贴图代码

    OpenGL中的Decal贴图是一种高级纹理技术,常用于在3D场景中添加临时或局部的效果,如枪击痕迹、爆炸残骸或者路面磨损等。这种技术使得这些效果能够精确地覆盖在模型表面,而不影响周围环境,从而增加游戏或应用程序...

    Unity贴画 Easy Decal 2021.3.1.zip

    "Easy Decal 2021.3.1.zip"是一个包含Unity贴画插件的压缩包,适用于Unity 2021.3.1版本。这个插件简化了在Unity项目中应用和管理贴画的过程。 在Unity中,原生并不支持高级的贴画系统,但开发者可以通过第三方插件...

    Easy Decal v2021.3.1

    he most complete mesh decal plugin available in the Asset Store since 2014. Used by professionals all around the world in hundreds of awesome projects. —————————————————— Forum | ...

    unity Easy Decal可编程渲染管线(SRP)兼容性

    Easy Decal 为你提供一个易于使用的工作流程来将贴花贴在游戏世界中的所有类型的表面上。为你的虚拟世界丰富细节,并将你的游戏环境提升至更高一级。 Easy Decal 不仅支持衍射纹理和法线贴图,而且还支持各种着色器...

    PADS Layout创建Decal

    对于新手来说,理解并掌握如何在PADS Layout中创建Decal(元件封装)是非常重要的一步,因为Decal是PCB设计的基础,它代表了实际电路板上的物理元件。下面我们将深入探讨这一主题。 Decal是PADS Layout中的一个关键...

    Simple Decal System.unitypackage

    Simple Decal System a simply and convenient Decal System.

    Decal Master Advanced Deferred Decals v1.24

    Decal Master 是一款功能强大并且使用简单的 Unity 贴花系统。 贴花放置工具提供简单易用的工作流程以便在游戏世界的各种表面放置贴花。 主要功能: * PBR 贴花着色器(反照率 、法线 、镜面闪光泽 、辐射) * ...

    Easy Decal 1.65 - 在模型表面上贴花的专用插件.unitypackage

    Easy Decal provides you with an easy-to-use workflow for putting decals on all types of surfaces in your game world. Enrich your virtual world with details and lift your game environment to the next ...

    Easy Decal For Unity

    想要在Unity中轻松制作UE4里的贴画效果,这个插件就能帮你实现

    Simple decal system.unitypackage

    Simple decal system.unitypackage 延迟贴花系统

    DecalGraph.shadergraph

    自定义ShaderGraph

    Easy Decal 1.6.3.txt

    Easy Decal为提供了一个易于使用的工作流程,可将贴图放置在游戏世界的所有模型类型的表面上,丰富虚拟世界的细节,并提升游戏环境到一个新的水平,要求Unity 4.7.2或更高版本

    Easy Decal 2020.2.5.zip

    EasyDecal是一款专门用于处理Unity3D中贴花(Decal)的插件,它极大地简化了3D场景中动态贴图的管理过程。在2020.2.5这个版本中,开发者可以期待更稳定、高效的性能,以及更多优化的功能。 1. **易用性增强** ...

    Decalicious – Deferred Decal System v1.5

    Limit Decal to Game Object: Choose whether a Decal should be drawn on every surface in its bounds, or be restricted to a specific GameObject's surfaces. Works with Terrain: Add detail to your ...

    Easy Decal 插件

    贴花纸为你提供了一个易于使用的工作流将所有类型的表面贴花在你的游戏世界。 丰富你的虚拟世界与细节,提升你的游戏环境下一个水平。

    DGL:Delphi泛型库--DGL(The Delphi Generic Library)

    那时候想在Delphi里寻找C++中类似的STL的替代品,但调查了一圈都很失望:其它现有的Delphi容器和算法库实现中,主要的实现途径有利用Delphi中的array of const和variant(相当于弱类型,而且对结构的支持差,如Decal);...

    UVPaint skinned mesh Decal System 1.7a

    Unity 中基于skinnedMesh的 贴图插件, 非常方便使用 ,

    UVPaint (Skinned Mesh Decal System) 1.84e.unitypackage

    UVPaint (Skinned Mesh Decal System) 1.84e 下载后为unitypackage 无需解压

Global site tag (gtag.js) - Google Analytics