分享
 
 
 

Delhi泛型库DGL中的接口的声明

王朝other·作者佚名  2006-01-10
窄屏简体版  字體: |||超大  

DGL库中的接口(interface)的声明文件DGLIntf.inc_h:

/////////////////////////////////////////////////////////////////////////////////////////////////////////

/------------------------------------------------------------------------------

// Copyright (c) 2004

// Delhi泛型库--DGL(The Delphi Generic Library)

// Author: HouSisong

//------------------------------------------------------------------------------

// DGL库中的接口(interface)的声明

// Create by HouSisong, 2004.08.31

// LastUpdate by HouSisong, 2005.10.13

//------------------------------------------------------------------------------

//DGLIntf.inc_h

{$ifndef __DGLIntf_inc_h_}

{$define __DGLIntf_inc_h_}

type

//迭代器(iterator)的统一说明

//----------------------------------------------------------------------------

// 作用描述: 用来遍历容器里面的元素

// 主要方法:Value属性:用来读写迭代器引用的值

// IsEqual方法:判断两个迭代器是否指向同一个位置

// Distance方法: 返回自身位置减去传入的迭代器指向位置的差值

// Assign方法:使自身与传入的迭代器指向同一个容器和引用位置

// Next方法:指向下一个位置

// Previous方法:指向上一个位置

// Clone方法:创建一个新的迭代器,与自己指向同一个位置

// GetSelfObj方法:返回接口存在的原始对象(self指针),内部使用

// Items属性: 根据偏移量快速的访问值(对于随机迭代器才有常数时间)

// 使用方式:

// 注意事项: 如果实现了单向链表,则其迭代器不会实现Previous方法,会触发异常

// Distance方法在某些迭代器中的实现 时间复杂度可能为O(n);

// 作 者: HouSisong ,2004.08.31

// [相关资料]: (如果有的话)

// [维护记录]: (类发布后,其修改需要记录下来:修改人、时间、主要原因内容)

//----------------------------------------------------------------------------

//迭代器分成_IIterator结构和_DGL_TObjIterator类来实现是为了优化用纯接口(+类实现)实现迭代器的创建和销毁的开销

//实际测试中速度大幅提升! 2005.10.13

_DGL_TObjIterator = class;

_DGL_TObjIteratorClass = class of _DGL_TObjIterator;

_IIterator = object

private

_ObjIteratorClass : _DGL_TObjIteratorClass;

_Data0 : integer;

_Data1 : integer;

_Data2 : integer;

//如果库有需要可以继续扩展

//_InfData : IInterface;

//_DataArray : array[0..2] of integer;

public

procedure SetIteratorNil();

procedure SetValue(const aValue: _ValueType);

function GetValue(): _ValueType;

function GetNextValue(const Step:integer): _ValueType;

procedure SetNextValue(const Step:integer;const aValue:_ValueType);

property Value: _ValueType read GetValue write SetValue;

property NextValue[const Index:integer]: _ValueType read GetNextValue write SetNextValue;

function IsEqual(const Iterator:_IIterator):boolean;

function Distance(const Iterator:_IIterator):integer;

procedure Assign (const Iterator:_IIterator);

procedure Next();overload;

procedure Next(const Step:integer);overload;

procedure Previous();

function Clone():_IIterator; overload;

function Clone(const NextStep:integer):_IIterator;overload;

end;

_DGL_TObjIterator = class(TObject)

public

class procedure SetValue(const SelfItData:_IIterator;const Value: _ValueType); virtual; abstract;

class function GetValue(const SelfItData:_IIterator): _ValueType; virtual; abstract;

class function GetNextValue(const SelfItData:_IIterator;const Step:integer): _ValueType; virtual; abstract;

class procedure SetNextValue(const SelfItData:_IIterator;const Step:integer;const Value:_ValueType); virtual; abstract;

class function IsEqual(const SelfItData:_IIterator;const Iterator:_IIterator):boolean; virtual; abstract;

class function Distance(const SelfItData:_IIterator;const Iterator:_IIterator):integer; virtual; abstract;

class procedure Assign (var SelfItData:_IIterator;const Iterator:_IIterator); virtual; abstract;

class procedure Next(var SelfItData:_IIterator);overload; virtual; abstract;

class procedure Next(var SelfItData:_IIterator;const Step:integer);overload; virtual; abstract;

class procedure Previous(var SelfItData:_IIterator); virtual; abstract;

class function Clone(const SelfItData:_IIterator):_IIterator;overload; virtual; abstract;

class function Clone(const SelfItData:_IIterator;const NextStep:integer):_IIterator;overload; virtual; abstract;

class function map_GetKey(const SelfItData:_IIterator): _KeyType; virtual; abstract;

end;

//容器(Container)的统一说明

//----------------------------------------------------------------------------

// 作用描述: 用来保存和组织多个数据,是抽象出的存储概念,和实现无关

// 主要方法:ItBegin方法:返回指向容器里第一个元素的 迭代器

// ItEnd方法:返回指向容器里最后一个元素的后面一个位置的 迭代器

// Clear方法:清空容器中的所有数据

// Size方法:容器中的元素个数

// IsEmpty方法:容器是否为空,返回值等价于(0=Size());

// GetSelfObj方法:返回接口存在的原始对象(self指针),内部使用

// Erase方法: 删除容器中值等于参数Value的元素,返回删除的元素个数

// Erase方法: 从容器中删除迭代器指向的元素

// Insert方法: 在容器指定位置插入一个或多个元素

// Assign方法: 整个容器清空重新赋值

// Clone方法:创建一个新的容器,并拥有和自身一样的元素

// 使用方式:

// 注意事项:

// 作 者: HouSisong ,2004.08.31

// [相关资料]: (如果有的话)

// [维护记录]: (类发布后,其修改需要记录下来:修改人、时间、主要原因内容)

//----------------------------------------------------------------------------

_IContainer = interface

function GetSelfObj():TObject;

function ItBegin(): _IIterator;

function ItEnd(): _IIterator;

procedure Clear();

function Size(): Integer;

function IsEmpty(): Boolean;

function EraseValue(const Value:_ValueType):integer; overload;

procedure Erase(const ItPos:_IIterator); overload;

procedure Erase(const ItBegin,ItEnd: _IIterator); overload;

procedure Insert(const Value:_ValueType); overload;

procedure Insert(const ItPos:_IIterator;const Value:_ValueType); overload;

procedure Insert(const ItPos:_IIterator;const num:integer;const Value:_ValueType); overload;

procedure Insert(const ItPos:_IIterator;const ItBegin,ItEnd:_IIterator);overload;

procedure Assign(const num:integer;const Value: _ValueType);overload;

procedure Assign(const ItBegin,ItEnd:_IIterator);overload;

function Clone():_IContainer;

end;

//序列容器(SerialContainer)的统一说明

//----------------------------------------------------------------------------

// 作用描述: 元素按顺序储存的容器

// 主要方法:(参见_IContainer)

// PushBack方法:在容器后部插入一个或多个元素

// PopBack方法: 弹出最后一个元素

// Back方法: 返回最后一个元素

// PushFront方法:在容器的最前面插入一个元素

// PopFront方法: 弹出第一个元素

// Front方法: 返回第一个元素

// IsEquals方法:判断两个容器中的元素是否完全相等

// 使用方式:

// 注意事项:

// 作 者: HouSisong ,2004.09.09

// [相关资料]: (如果有的话)

// [维护记录]: (类发布后,其修改需要记录下来:修改人、时间、主要原因内容)

//----------------------------------------------------------------------------

_ISerialContainer = interface(_IContainer)

procedure PushBack(const Value: _ValueType); overload;

procedure PushBack(const num:integer;Value: _ValueType); overload;

procedure PushBack(const ItBegin,ItEnd: _IIterator); overload;

procedure PopBack();

function Back():_ValueType;

procedure PushFront(const Value: _ValueType);overload ;

procedure PushFront(const num:integer;Value: _ValueType); overload;

procedure PushFront(const ItBegin,ItEnd: _IIterator); overload;

procedure PopFront();

function Front():_ValueType;

function IsEquals(const AContainer: _IContainer): Boolean;

procedure Resize(const num:integer); overload;

procedure Resize(const num:integer;const Value:_ValueType); overload;

end;

//向量(Vector)的统一说明

//----------------------------------------------------------------------------

// 作用描述: 用线性的内存空间(数组)来组织数据,容器的一个具体实现

// 主要方法:IndexOf方法:返回元素在容器中的位置

// Items属性:以序号的方式快速的访问容器中的元素,时间复杂度O(1)

// Reserve方法: 容器预留一些空间(减少动态分配)

// Resize方法: 改变容器大小

// 使用方式:

// 注意事项:

// 作 者: HouSisong ,2004.08.31

// [相关资料]: (如果有的话)

// [维护记录]: (类发布后,其修改需要记录下来:修改人、时间、主要原因内容)

//----------------------------------------------------------------------------

_IVector = interface(_ISerialContainer)

function GetItemValue(const Index: Integer): _ValueType;

procedure SetItemValue(const Index: Integer;const Value: _ValueType);

function IndexOf(const Value: _ValueType): Integer;

procedure InsertByIndex(const Index: Integer;const Value: _ValueType);

function NewIterator(const Index: Integer):_IIterator;

property Items[const Index: Integer]: _ValueType read GetItemValue write SetItemValue;

procedure Reserve(const ReserveSize: integer);

procedure EraseByIndex(const Index: integer); overload;

end;

//链表(List)的统一说明

//----------------------------------------------------------------------------

// 作用描述: 数据以数据接点串连的方式组织,容器的一个具体实现

// 主要方法:Unique方法:若相邻元素相同,只留下一个

// Splice方法:将AContainer内的元素转移到自己的Pos处

// Merge方法: 将AContainer内的已序元素转移到已序的自己,并且自己仍保持有序

// Reverse方法: 将元素反序

// 使用方式:

// 注意事项:

// 作 者: HouSisong ,2004.08.31

// [相关资料]: (如果有的话)

// [维护记录]: (类发布后,其修改需要记录下来:修改人、时间、主要原因内容)

//----------------------------------------------------------------------------

_IList = interface(_ISerialContainer)

procedure Unique();

procedure Splice(const ItPos:_IIterator; AContainer:_IList); overload; //全部转移

procedure Splice(const ItPos:_IIterator; AContainer:_IList;const ACItPos:_IIterator); overload;//转移ACItPos一个

procedure Splice(const ItPos:_IIterator; AContainer:_IList;const ACItBegin,ACItEnd:_IIterator); overload;

//procedure Merge(AContainer:_IList);

procedure Reverse();

//todo: procedure Unique(const Op:TBoolOP1);

//todo: procedure Sort();

//todo: procedure Sort(const Op:TBoolOP1);

//todo: procedure Merge(AContainer:_IList;const Op:TBoolOP1);

end;

//队列(Deque)的统一说明

//----------------------------------------------------------------------------

// 作用描述: 与Vector相仿并能够在前端也快速插入和删除元素,容器的一个具体实现

// 主要方法:

// 使用方式:

// 注意事项:

// 作 者: HouSisong ,2004.08.31

// [相关资料]: (如果有的话)

// [维护记录]: (类发布后,其修改需要记录下来:修改人、时间、主要原因内容)

//----------------------------------------------------------------------------

_IDeque = interface(_IVector)

end;

//对堆栈(Stack)的统一说明

//----------------------------------------------------------------------------

// 作用描述: 容器配接器的一种,一端开口,先进后出队列

// 主要方法:Push方法:压入一个元素

// Pop方法:弹出元素

// Top方法:返回开口处的当前值

// Clear方法:清空容器中的数据

// Size方法:返回容器中的元素个数

// IsEmpty方法:判断容器是否为空

// IsEquals方法:判断两个容器中的元素是否完全相等

// Clone方法:创建一个新的容器,并拥有和自身一样的元素

// Assign方法: 整个容器清空重新赋值

// GetSelfObj方法:返回接口存在的原始对象(self指针),内部使用

// 使用方式:

// 注意事项:

// 作 者: HouSisong ,2004.08.31

// [相关资料]: (如果有的话)

// [维护记录]: (类发布后,其修改需要记录下来:修改人、时间、主要原因内容)

//----------------------------------------------------------------------------

_IStack = interface

function GetSelfObj():TObject;

procedure Push(const Value: _ValueType);

procedure Pop();

function Top(): _ValueType;

procedure Clear();

function Size(): Integer;

function IsEmpty(): Boolean;

function IsEquals(const AContainer: _IStack): Boolean;

function Clone():_IStack;

procedure Assign(const num:integer;const Value: _ValueType);overload;

procedure Assign(const ItBegin,ItEnd:_IIterator);overload;

end;

//双端队列(Queue)的统一说明

//----------------------------------------------------------------------------

// 作用描述: 容器配接器的一种,两端开口

// 主要方法:Push方法:在容器后边压入一个元素

// Pop方法:弹出最前面一个元素

// Back方法:返回最后面元素的当前值

// Front方法:返回最前面元素的当前值

// Clear方法:清空容器中的数据

// Size方法:返回容器中的元素个数

// IsEmpty方法:判断容器是否为空

// IsEquals方法:判断两个容器中的元素是否完全相等

// Clone方法:创建一个新的容器,并拥有和自身一样的元素

// Assign方法: 整个容器清空重新赋值

// GetSelfObj方法:返回接口存在的原始对象(self指针),内部使用

// 使用方式:

// 注意事项:

// 作 者: HouSisong ,2004.08.31

// [相关资料]: (如果有的话)

// [维护记录]: (类发布后,其修改需要记录下来:修改人、时间、主要原因内容)

//----------------------------------------------------------------------------

_IQueue = interface

function GetSelfObj():TObject;

procedure Push(const Value: _ValueType);

procedure Pop();

function Front(): _ValueType;

function Back(): _ValueType;

procedure Clear();

function Size(): Integer;

function IsEmpty(): Boolean;

function IsEquals(const AContainer: _IQueue): Boolean;

function Clone():_IQueue;

procedure Assign(const num:integer;const Value: _ValueType);overload;

procedure Assign(const ItBegin,ItEnd:_IIterator);overload;

end;

//优先级队列(PriorityQueue)的统一说明

//----------------------------------------------------------------------------

// 作用描述: 容器配接器的一种

// 主要方法:Push方法:向容器中压入一个元素

// Pop方法:弹出最优先的一个元素

// Top方法:返回最优先的值

// Clear方法:清空容器中的数据

// Size方法:返回容器中的元素个数

// IsEmpty方法:判断容器是否为空

// IsEquals方法:判断两个容器中的元素是否完全相等

// Clone方法:创建一个新的容器,并拥有和自身一样的元素

// Assign方法: 整个容器清空重新赋值

// GetSelfObj方法:返回接口存在的原始对象(self指针),内部使用

// 使用方式:

// 注意事项:

// 作 者: HouSisong ,2005.03.26

// [相关资料]: (如果有的话)

// [维护记录]: (类发布后,其修改需要记录下来:修改人、时间、主要原因内容)

_IPriorityQueue = interface

function GetSelfObj():TObject;

procedure Push(const Value: _ValueType);

procedure Pop();

function Top(): _ValueType;

procedure Clear();

function Size(): Integer;

function IsEmpty(): Boolean;

function IsEquals(const AContainer: _IPriorityQueue): Boolean;

function Clone():_IPriorityQueue;

procedure Assign(const num:integer;const Value: _ValueType);overload;

procedure Assign(const ItBegin,ItEnd:_IIterator);overload;

end;

//Set,MultiSet的统一说明

//----------------------------------------------------------------------------

// 作用描述: 元素集合 (Set不允许有重复元素,MultiSet允许有重复元素)

// 主要方法:(参见_IContainer的说明)

// Count方法: 统计某元素的个数

// Find方法: 查找某个元素的第一次出现位置

// LowerBound方法: 返回某值的第一个可安插位置

// UpperBound方法: 返回某值的最后一个可安插位置

// EqualRange方法: 返回某值的可安插的第一个和最后一个位置

// 使用方式:

// 注意事项:

// 作 者: HouSisong ,2004.09.08

// [相关资料]: (如果有的话)

// [维护记录]: (类发布后,其修改需要记录下来:修改人、时间、主要原因内容)

//----------------------------------------------------------------------------

_ISet = interface(_IContainer)

function Count(const Value:_ValueType):integer;

function Find(const Value:_ValueType):_IIterator;

function LowerBound(const Value:_ValueType):_IIterator;

function UpperBound(const Value:_ValueType):_IIterator;

procedure EqualRange(const Value:_ValueType;out ItBegin,ItEnd:_IIterator);

end;

_IMultiSet = interface(_ISet)

end;

//Map迭代器(Map Iterator)的统一说明

//----------------------------------------------------------------------------

// 作用描述: 用来遍历map容器里面的元素

// 主要方法:(参见对迭代器的统一说明)

// Key属性:用来访问(只读)迭代器引用的键值

// 使用方式:

// 注意事项:

// 作 者: HouSisong ,2004.09.09

// [相关资料]: (如果有的话)

// [维护记录]: (类发布后,其修改需要记录下来:修改人、时间、主要原因内容)

//----------------------------------------------------------------------------

_IMapIterator =object(_IIterator)

function GetKey(): _KeyType;

property Key: _KeyType read GetKey;

end;

//Map,MultiMap的统一说明

//----------------------------------------------------------------------------

// 作用描述: 键值/实值 映射 (Map不允许有键值重复,MultiMap允许有键值重复)

// 主要方法:ItBegin方法:返回指向容器里第一个元素的 迭代器

// ItEnd方法:返回指向容器里最后一个元素的后面一个位置的 迭代器

// Clear方法:清空容器中的所有数据

// Size方法:容器中的元素个数

// IsEmpty方法:容器是否为空,返回值等价于(0=Size());

// IsEquals方法:判断两个容器中的元素是否完全相等

// GetSelfObj方法:返回接口存在的原始对象(self指针),内部使用

// Erase方法: 删除容器中值等于参数Value的元素,返回删除的元素个数

// Erase方法: 从容器中删除迭代器指向的元素

// Insert方法: 在容器指定位置插入一个或多个元素

// Assign方法: 整个容器清空重新赋值

// Clone方法:创建一个新的容器,并拥有和自身一样的元素

// Count方法: 统计某键值的个数

// Find方法: 查找某键值的第一次出现位置

// LowerBound方法: 返回某键值的第一个可安插位置

// UpperBound方法: 返回某键值的最后一个可安插位置

// EqualRange方法: 返回某键值的可安插的第一个和最后一个位置

// Items属性:以Key为序号的方式访问容器中的元素

// 使用方式:

// 注意事项:

// 作 者: HouSisong ,2004.09.09

// [相关资料]: (如果有的话)

// [维护记录]: (类发布后,其修改需要记录下来:修改人、时间、主要原因内容)

//----------------------------------------------------------------------------

_IMap = interface

function GetSelfObj():TObject;

function GetItemValue(const Key: _KeyType): _ValueType;

procedure SetItemValue(const Key: _KeyType;const Value: _ValueType);

function ItBegin(): _IMapIterator;

function ItEnd(): _IMapIterator;

procedure Clear();

function Size(): Integer;

function IsEmpty(): Boolean;

function EraseValue(const Value:_ValueType):integer; overload;

function EraseValue(const Key:_KeyType;const Value:_ValueType):integer; overload;

function EraseKey(const Key:_KeyType):integer; overload;

procedure Erase(const ItPos:_IMapIterator); overload;

procedure Erase(const ItBegin,ItEnd: _IMapIterator); overload;

procedure Insert(const Key:_KeyType;const Value:_ValueType); overload;

procedure Insert(const ItPos:_IMapIterator;const Key:_KeyType;const Value:_ValueType); overload;

procedure Insert(const ItPos:_IMapIterator;const ItBegin,ItEnd:_IMapIterator);overload;

procedure Insert(const ItPos:_IMapIterator;const num:integer;const Key:_KeyType;const Value:_ValueType); overload;

procedure Assign(const ItBegin,ItEnd:_IMapIterator);overload;

procedure Assign(const num:integer;const Key:_KeyType;const Value: _ValueType);overload;

function Count(const Key:_KeyType):integer;

function Find(const Key:_KeyType):_IMapIterator;

function LowerBound(const Key:_KeyType):_IMapIterator;

function UpperBound(const Key:_KeyType):_IMapIterator;

procedure EqualRange(const Key:_KeyType;out ItBegin,ItEnd:_IMapIterator);

function Clone():_IMap;

property Items[const Key:_KeyType]: _ValueType read GetItemValue write SetItemValue;

end;

_IMultiMap = interface(_IMap)

end;

{$endif } // __DGLIntf_inc_h_

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有