-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathHashSet.inc_h
130 lines (117 loc) · 7.04 KB
/
HashSet.inc_h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
(*
* DGL(The Delphi Generic Library)
*
* Copyright (c) 2004
*
* This material is provided "as is", with absolutely no warranty expressed
* or implied. Any use is at your own risk.
*
* Permission to use or copy this software for any purpose is hereby granted
* without fee, provided the above notices are retained on all copies.
* Permission to modify the code and to distribute modified code is granted,
* provided the above notices are retained, and a notice that the code was
* modified is included with the above copyright notice.
*
*)
//------------------------------------------------------------------------------
// _THashSetIterator\_THashSet\_THashMultiSet的声明
// Create by HouSisong, 2004.09.08
//------------------------------------------------------------------------------
{$ifndef __HashSet_inc_h_}
{$define __HashSet_inc_h_}
//HashSet.inc_h , HashSet.inc_pas
{$I DGLIntf.inc_h}
{$I _HashTable.inc_h}
type
//----------------------------------------------------------------------------
// 作用描述: _THashSet的迭代器
// 主要方法:(参见_Iterator的说明)
// 使用方式:
// 注意事项:
// 作 者: HouSisong , 2004.09.08
// [相关资料]: (如果有的话)
// [维护记录]: (类发布后,其修改需要记录下来:修改人、时间、主要原因内容)
//----------------------------------------------------------------------------
//hash Iterator
_THashSetIterator = class(_THashBaseIterator)
public
class procedure ItCreate(var SelfItData:_IIterator;const base:_THashTableBase;const NodeIt:_TTagHashIterator);overload; //{$ifdef _DGL_Inline} inline; {$endif}
class function GetValue(const SelfItData:_IIterator): _HashValueType;override;
class procedure SetValue(const SelfItData:_IIterator;const Value: _HashValueType); override;
class procedure Assign (var SelfItData:_IIterator;const Iterator:_IIterator);override;
class function Clone(const SelfItData:_IIterator):_IIterator; override;
end;
_THashSet_Base = class(_TInterfacedObject)
protected
FHashTable : _THashTableBase;
public
function ItBegin(): _IIterator; {$ifdef _DGL_Inline} inline; {$endif}
function ItEnd(): _IIterator; {$ifdef _DGL_Inline} inline; {$endif}
procedure Clear(); {$ifdef _DGL_Inline} inline; {$endif}
function Size(): Integer; {$ifdef _DGL_Inline} inline; {$endif}
function IsEmpty(): Boolean; {$ifdef _DGL_Inline} inline; {$endif}
function EraseValue(const Value:_ValueType):integer; overload; {$ifdef _DGL_Inline} inline; {$endif}
procedure Erase(const ItPos:_IIterator); overload; //{$ifdef _DGL_Inline} inline; {$endif}
procedure Erase(const ItBegin,ItEnd: _IIterator); overload;
function Count(const Value:_ValueType):integer; {$ifdef _DGL_Inline} inline; {$endif}
function Find(const Value:_ValueType):_IIterator; {$ifdef _DGL_Inline} inline; {$endif}
function LowerBound(const Value:_ValueType):_IIterator; {$ifdef _DGL_Inline} inline; {$endif}
function UpperBound(const Value:_ValueType):_IIterator; {$ifdef _DGL_Inline} inline; {$endif}
procedure EqualRange(const Value:_ValueType;out ItBegin,ItEnd:_IIterator); {$ifdef _DGL_Inline} inline; {$endif}
function GetSelfObj():TObject; {$ifdef _DGL_Inline} inline; {$endif}
public
procedure Reserve(const ReserveSize: integer); {$ifdef _DGL_Inline} inline; {$endif}
constructor Create(); overload;
destructor Destroy(); override;
end;
//----------------------------------------------------------------------------
// 作用描述: 底部利用_THashTableBase实现的Set
// 主要方法:(参见_ISet的说明)
// 使用方式:
// 注意事项:
// 作 者: HouSisong , 2004.09.10
// [相关资料]: (如果有的话)
// [维护记录]: (类发布后,其修改需要记录下来:修改人、时间、主要原因内容)
//----------------------------------------------------------------------------
_THashSet = class(_THashSet_Base,_ISet,_IContainer)
public
procedure Insert(const Value:_ValueType); overload; {$ifdef _DGL_Inline} inline; {$endif}
procedure Insert(const ItPos:_IIterator;const Value:_ValueType); overload; //{$ifdef _DGL_Inline} inline; {$endif}
procedure Insert(const ItPos:_IIterator;const num:integer;const Value:_ValueType); overload; //{$ifdef _DGL_Inline} inline; {$endif}
procedure Insert(const ItPos:_IIterator;const ItBegin,ItEnd:_IIterator);overload; //
procedure Assign(const num:integer;const Value: _ValueType);overload; {$ifdef _DGL_Inline} inline; {$endif}
procedure Assign(const ItBegin,ItEnd:_IIterator);overload; //{$ifdef _DGL_Inline} inline; {$endif}
function Clone():_IContainer; {$ifdef _DGL_Inline} inline; {$endif}
procedure CloneToInterface(out NewContainer); {$ifdef _DGL_Inline} inline; {$endif}
public
constructor Create(); overload;
constructor Create(const ItBegin,ItEnd:_IIterator);overload;
constructor Create(const ASet:_THashSet);overload;
end;
//----------------------------------------------------------------------------
// 作用描述: 底部利用_THashTableBase实现的MultiSet , 以继承方式重用了_THashSet_Base的部分代码
// 主要方法:(参见_IMultiSet的说明)
// 使用方式:
// 注意事项:
// 作 者: HouSisong , 2004.09.10
// [相关资料]: (如果有的话)
// [维护记录]: (类发布后,其修改需要记录下来:修改人、时间、主要原因内容)
//----------------------------------------------------------------------------
_THashMultiSet = class(_THashSet_Base,_IMultiSet,_ISet,_IContainer)
public
procedure Insert(const Value:_HashValueType);overload; {$ifdef _DGL_Inline} inline; {$endif}
procedure Insert(const ItPos:_IIterator;const Value:_HashValueType); overload; // {$ifdef _DGL_Inline} inline; {$endif}
procedure Insert(const ItPos:_IIterator;const num:integer;const Value:_HashValueType); overload; //{$ifdef _DGL_Inline} inline; {$endif}
procedure Insert(const ItPos:_IIterator;const ItBegin,ItEnd:_IIterator);overload; //
procedure Assign(const num:integer;const Value: _HashValueType);overload; {$ifdef _DGL_Inline} inline; {$endif}
procedure Assign(const ItBegin,ItEnd:_IIterator);overload; //
function Clone: _IContainer; {$ifdef _DGL_Inline} inline; {$endif}
procedure CloneToInterface(out NewContainer); {$ifdef _DGL_Inline} inline; {$endif}
public
constructor Create(); overload;
constructor Create(const ItBegin,ItEnd:_IIterator);overload;
constructor Create(const ASet:_THashMultiSet);overload;
constructor Create(const num:integer;const Value: _HashValueType);overload;
end;
{$endif } // __HashSet_inc_h_