OpenClonk
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros
C4FindObject Class Referenceabstract

#include <C4FindObject.h>

Inheritance diagram for C4FindObject:
[legend]

Public Member Functions

 C4FindObject ()=default
 
virtual ~C4FindObject ()
 
int32_t Count (const C4ObjectList &Objs)
 
C4ObjectFind (const C4ObjectList &Objs)
 
C4ValueArrayFindMany (const C4ObjectList &Objs)
 
int32_t Count (const C4ObjectList &Objs, const C4LSectors &Sct)
 
C4ObjectFind (const C4ObjectList &Objs, const C4LSectors &Sct)
 
C4ValueArrayFindMany (const C4ObjectList &Objs, const C4LSectors &Sct)
 
void SetSort (C4SortObject *pToSort)
 

Static Public Member Functions

static C4FindObjectCreateByValue (const C4Value &Data, C4SortObject **ppSortObj=nullptr, const C4Object *context=nullptr, bool *has_layer_check=nullptr)
 

Protected Member Functions

virtual bool Check (C4Object *pObj)=0
 
virtual C4RectGetBounds ()
 
virtual bool UseShapes ()
 
virtual bool IsImpossible ()
 
virtual bool IsEnsured ()
 

Friends

class C4FindObjectNot
 
class C4FindObjectAnd
 
class C4FindObjectOr
 

Detailed Description

Definition at line 68 of file C4FindObject.h.

Constructor & Destructor Documentation

C4FindObject::C4FindObject ( )
default
C4FindObject::~C4FindObject ( )
virtual

Definition at line 28 of file C4FindObject.cpp.

29 {
30  delete pSort;
31 }

Member Function Documentation

int32_t C4FindObject::Count ( const C4ObjectList Objs)

Definition at line 241 of file C4FindObject.cpp.

References Check(), IsEnsured(), IsImpossible(), and C4ObjectList::ObjectCount().

Referenced by Count().

242 {
243  // Trivial cases
244  if (IsImpossible())
245  return 0;
246  if (IsEnsured())
247  return Objs.ObjectCount();
248  // Count
249  int32_t iCount = 0;
250  for (C4Object *obj : Objs)
251  if (obj->Status && Check(obj))
252  iCount++;
253  return iCount;
254 }
virtual bool IsEnsured()
Definition: C4FindObject.h:97
virtual bool IsImpossible()
Definition: C4FindObject.h:96
int ObjectCount(C4ID id=C4ID::None) const
virtual bool Check(C4Object *pObj)=0

Here is the call graph for this function:

Here is the caller graph for this function:

int32_t C4FindObject::Count ( const C4ObjectList Objs,
const C4LSectors Sct 
)

Definition at line 308 of file C4FindObject.cpp.

References Check(), Count(), C4LArea::FirstObjects(), C4LArea::FirstObjectShapes(), GetBounds(), C4GameObjects::GetNextMarker(), IsEnsured(), IsImpossible(), C4LArea::Next(), C4LArea::NextObjects(), C4LArea::NextObjectShapes(), C4ObjectList::ObjectCount(), Objects, C4LSector::ObjectShapes, C4GameObjects::Sectors, and UseShapes().

309 {
310  // Trivial cases
311  if (IsImpossible())
312  return 0;
313  if (IsEnsured())
314  return Objs.ObjectCount();
315  // Check bounds
316  C4Rect *pBounds = GetBounds();
317  if (!pBounds)
318  return Count(Objs);
319  else if (UseShapes())
320  {
321  // Get area
322  C4LArea Area(&::Objects.Sectors, *pBounds); C4LSector *pSct;
323  C4ObjectList *pLst = Area.FirstObjectShapes(&pSct);
324  // Check if a single-sector check is enough
325  if (!Area.Next(pSct))
326  return Count(pSct->ObjectShapes);
327  // Create marker, count over all areas
328  uint32_t iMarker = ::Objects.GetNextMarker();
329  int32_t iCount = 0;
330  for (; pLst; pLst=Area.NextObjectShapes(pLst, &pSct))
331  for (C4Object *obj : Objs)
332  if (obj->Status)
333  if (obj->Marker != iMarker)
334  {
335  obj->Marker = iMarker;
336  if (Check(obj))
337  iCount++;
338  }
339  return iCount;
340  }
341  else
342  {
343  // Count objects per area
344  C4LArea Area(&::Objects.Sectors, *pBounds); C4LSector *pSct;
345  int32_t iCount = 0;
346  for (C4ObjectList *pLst=Area.FirstObjects(&pSct); pLst; pLst=Area.NextObjects(pLst, &pSct))
347  iCount += Count(*pLst);
348  return iCount;
349  }
350 }
virtual bool UseShapes()
Definition: C4FindObject.h:95
virtual bool IsEnsured()
Definition: C4FindObject.h:97
Definition: C4Rect.h:27
virtual C4Rect * GetBounds()
Definition: C4FindObject.h:94
uint32_t GetNextMarker()
virtual bool IsImpossible()
Definition: C4FindObject.h:96
C4ObjectList ObjectShapes
Definition: C4Sector.h:49
int32_t Count(const C4ObjectList &Objs)
C4LSectors Sectors
Definition: C4GameObjects.h:42
int ObjectCount(C4ID id=C4ID::None) const
virtual bool Check(C4Object *pObj)=0
C4GameObjects Objects
Definition: C4Globals.cpp:48

Here is the call graph for this function:

C4FindObject * C4FindObject::CreateByValue ( const C4Value Data,
C4SortObject **  ppSortObj = nullptr,
const C4Object context = nullptr,
bool *  has_layer_check = nullptr 
)
static

Definition at line 33 of file C4FindObject.cpp.

References C4FindObjectAnd, C4FindObjectNot, C4FindObjectOr, C4FO_Action, C4FO_ActionTarget, C4FO_And, C4FO_AnyContainer, C4FO_AnyLayer, C4FO_AtPoint, C4FO_AtRect, C4FO_Category, C4FO_Container, C4FO_Controller, C4FO_Distance, C4FO_Exclude, C4FO_Func, C4FO_ID, C4FO_InArray, C4FO_InRect, C4FO_Layer, C4FO_Not, C4FO_OCF, C4FO_OnLine, C4FO_Or, C4FO_Owner, C4FO_Procedure, C4FO_Property, C4SO_First, C4SO_Last, Clamp(), C4SortObject::CreateByValue(), C4Value::getArray(), C4String::GetCStr(), C4ValueArray::GetSize(), C4Object::GetX(), C4Object::GetY(), iSize, and C4FindObjectFunc::SetPar().

Referenced by CreateCriterionsFromPars().

34 {
35  // Must be an array
36  C4ValueArray *pArray = C4Value(DataVal).getArray();
37  if (!pArray) return nullptr;
38 
39  const C4ValueArray &Data = *pArray;
40  int32_t iType = Data[0].getInt();
41  if (Inside<int32_t>(iType, C4SO_First, C4SO_Last))
42  {
43  // this is not a FindObject but a sort condition!
44  // sort condition not desired here?
45  if (!ppSortObj) return nullptr;
46  // otherwise, create it!
47  *ppSortObj = C4SortObject::CreateByValue(iType, Data, context);
48  // done
49  return nullptr;
50  }
51 
52  switch (iType)
53  {
54  case C4FO_Not:
55  {
56  // Create child condition
57  C4FindObject *pCond = C4FindObject::CreateByValue(Data[1], nullptr, context, has_layer_check);
58  if (!pCond) return nullptr;
59  // wrap
60  return new C4FindObjectNot(pCond);
61  }
62 
63  case C4FO_And: case C4FO_Or:
64  {
65  // Trivial case (one condition)
66  if (Data.GetSize() == 2)
67  return C4FindObject::CreateByValue(Data[1], nullptr, context, has_layer_check);
68  // Create all childs
69  int32_t i;
70  C4FindObject **ppConds = new C4FindObject *[Data.GetSize() - 1];
71  for (i = 0; i < Data.GetSize() - 1; i++)
72  ppConds[i] = C4FindObject::CreateByValue(Data[i + 1], nullptr, context, has_layer_check);
73  // Count real entries, move them to start of list
74  int32_t iSize = 0;
75  for (i = 0; i < Data.GetSize() - 1; i++)
76  if (ppConds[i])
77  if (iSize++ != i)
78  ppConds[iSize-1] = ppConds[i];
79  // Create
80  if (iType == C4FO_And)
81  return new C4FindObjectAnd(iSize, ppConds);
82  else
83  return new C4FindObjectOr(iSize, ppConds);
84  }
85 
86  case C4FO_Exclude:
87  return new C4FindObjectExclude(Data[1].getObj());
88 
89  case C4FO_ID:
90  return new C4FindObjectDef(Data[1].getPropList());
91 
92 
93  // #973: For all criteria using coordinates: If FindObject et al. are called in object context, offset by object center
94  case C4FO_InRect:
95  {
96  int32_t x = Data[1].getInt();
97  int32_t y = Data[2].getInt();
98  int32_t w = Data[3].getInt();
99  int32_t h = Data[4].getInt();
100  if (context)
101  {
102  x += context->GetX();
103  y += context->GetY();
104  }
105  return new C4FindObjectInRect(C4Rect(x, y, w, h));
106  }
107 
108  case C4FO_AtPoint:
109  {
110  int32_t x = Data[1].getInt();
111  int32_t y = Data[2].getInt();
112  if (context)
113  {
114  x += context->GetX();
115  y += context->GetY();
116  }
117  return new C4FindObjectAtPoint(x, y);
118  }
119 
120  case C4FO_AtRect:
121  {
122  int32_t x = Data[1].getInt();
123  int32_t y = Data[2].getInt();
124  int32_t w = Data[3].getInt();
125  int32_t h = Data[4].getInt();
126  if (context)
127  {
128  x += context->GetX();
129  y += context->GetY();
130  }
131  return new C4FindObjectAtRect(x, y, w, h);
132  }
133 
134  case C4FO_OnLine:
135  {
136  int32_t x1 = Data[1].getInt();
137  int32_t y1 = Data[2].getInt();
138  int32_t x2 = Data[3].getInt();
139  int32_t y2 = Data[4].getInt();
140  if (context)
141  {
142  x1 += context->GetX();
143  x2 += context->GetX();
144  y1 += context->GetY();
145  y2 += context->GetY();
146  }
147  return new C4FindObjectOnLine(x1, y1, x2, y2);
148  }
149 
150  case C4FO_Distance:
151  {
152  int32_t x = Data[1].getInt();
153  int32_t y = Data[2].getInt();
154  if (context)
155  {
156  x += context->GetX();
157  y += context->GetY();
158  }
159  return new C4FindObjectDistance(x, y, Data[3].getInt());
160  }
161 
162  case C4FO_OCF:
163  return new C4FindObjectOCF(Data[1].getInt());
164 
165  case C4FO_Category:
166  return new C4FindObjectCategory(Data[1].getInt());
167 
168  case C4FO_Action:
169  {
170  C4String *pStr = Data[1].getStr();
171  if (!pStr) return nullptr;
172  // Don't copy, it should be safe
173  return new C4FindObjectAction(pStr->GetCStr());
174  }
175 
176  case C4FO_Func:
177  {
178  // Get function name
179  C4String *pStr = Data[1].getStr();
180  if (!pStr) return nullptr;
181  // Construct
182  C4FindObjectFunc *pFO = new C4FindObjectFunc(pStr);
183  // Add parameters
184  for (int i = 2; i < Data.GetSize(); i++)
185  pFO->SetPar(i - 2, Data[i]);
186  // Done
187  return pFO;
188  }
189 
190  case C4FO_ActionTarget:
191  {
192  int index = 0;
193  if (Data.GetSize() >= 3)
194  index = Clamp(Data[2].getInt(), 0, 1);
195  return new C4FindObjectActionTarget(Data[1].getObj(), index);
196  }
197 
198  case C4FO_Procedure:
199  return new C4FindObjectProcedure(Data[1].getStr());
200 
201  case C4FO_Container:
202  return new C4FindObjectContainer(Data[1].getObj());
203 
204  case C4FO_AnyContainer:
205  return new C4FindObjectAnyContainer();
206 
207  case C4FO_Owner:
208  return new C4FindObjectOwner(Data[1].getInt());
209 
210  case C4FO_Controller:
211  return new C4FindObjectController(Data[1].getInt());
212 
213  case C4FO_Layer:
214  // explicit layer check given. do not add implicit layer check
215  if (has_layer_check) *has_layer_check = true;
216  return new C4FindObjectLayer(Data[1].getObj());
217 
218  case C4FO_InArray:
219  return new C4FindObjectInArray(Data[1].getArray());
220 
221  case C4FO_Property:
222  {
223  // Get property name
224  C4String *pStr = Data[1].getStr();
225  if (!pStr) return nullptr;
226  // Construct
228  // Done
229  return pFO;
230  }
231 
232  case C4FO_AnyLayer:
233  // do not add implicit layer check
234  if (has_layer_check) *has_layer_check = true;
235  return nullptr;
236 
237  }
238  return nullptr;
239 }
int32_t GetY() const
Definition: C4Object.h:287
friend class C4FindObjectNot
Definition: C4FindObject.h:70
static C4FindObject * CreateByValue(const C4Value &Data, C4SortObject **ppSortObj=nullptr, const C4Object *context=nullptr, bool *has_layer_check=nullptr)
const char * GetCStr() const
Definition: C4StringTable.h:49
Definition: C4Rect.h:27
T Clamp(T bval, T lbound, T rbound)
Definition: Standard.h:44
friend class C4FindObjectAnd
Definition: C4FindObject.h:71
int32_t GetX() const
Definition: C4Object.h:286
C4ValueArray * getArray() const
Definition: C4Value.h:118
int32_t GetSize() const
Definition: C4ValueArray.h:36
void SetPar(int i, const C4Value &val)
friend class C4FindObjectOr
Definition: C4FindObject.h:72
static C4SortObject * CreateByValue(const C4Value &Data, const C4Object *context=nullptr)
int iSize
Definition: TstC4NetIO.cpp:32

Here is the call graph for this function:

Here is the caller graph for this function:

C4Object * C4FindObject::Find ( const C4ObjectList Objs)

Definition at line 256 of file C4FindObject.cpp.

References Check(), C4SortObject::Compare(), and IsImpossible().

Referenced by Find().

257 {
258  // Trivial case
259  if (IsImpossible())
260  return nullptr;
261  // Search
262  // Double-check object status, as object might be deleted after Check()!
263  C4Object *pBestResult = nullptr;
264  for (C4Object *obj : Objs)
265  if (obj->Status)
266  if (Check(obj))
267  if (obj->Status)
268  {
269  // no sorting: Use first object found
270  if (!pSort) return obj;
271  // Sorting: Check if found object is better
272  if (!pBestResult || pSort->Compare(obj, pBestResult) > 0)
273  if (obj->Status)
274  pBestResult = obj;
275  }
276  return pBestResult;
277 }
virtual int32_t Compare(C4Object *pObj1, C4Object *pObj2)=0
virtual bool IsImpossible()
Definition: C4FindObject.h:96
virtual bool Check(C4Object *pObj)=0

Here is the call graph for this function:

Here is the caller graph for this function:

C4Object * C4FindObject::Find ( const C4ObjectList Objs,
const C4LSectors Sct 
)

Definition at line 352 of file C4FindObject.cpp.

References C4SortObject::Compare(), Find(), C4LArea::FirstObjects(), C4LArea::FirstObjectShapes(), GetBounds(), IsImpossible(), C4LArea::NextObjects(), C4LArea::NextObjectShapes(), Objects, C4GameObjects::Sectors, C4PropList::Status, and UseShapes().

353 {
354  // Trivial case
355  if (IsImpossible())
356  return nullptr;
357  C4Object *pBestResult = nullptr;
358  // Check bounds
359  C4Rect *pBounds = GetBounds();
360  if (!pBounds)
361  return Find(Objs);
362  // Traverse areas, return first matching object w/o sort or best with sort
363  else if (UseShapes())
364  {
365  C4LArea Area(&::Objects.Sectors, *pBounds); C4LSector *pSct;
366  C4Object *pObj;
367  for (C4ObjectList *pLst=Area.FirstObjectShapes(&pSct); pLst; pLst=Area.NextObjectShapes(pLst, &pSct))
368  if ((pObj = Find(*pLst)))
369  {
370  if (!pSort)
371  return pObj;
372  else if (!pBestResult || pSort->Compare(pObj, pBestResult) > 0)
373  if (pObj->Status)
374  pBestResult = pObj;
375  }
376  }
377  else
378  {
379  C4LArea Area(&::Objects.Sectors, *pBounds); C4LSector *pSct;
380  C4Object *pObj;
381  for (C4ObjectList *pLst=Area.FirstObjects(&pSct); pLst; pLst=Area.NextObjects(pLst, &pSct))
382  {
383  if ((pObj = Find(*pLst)))
384  {
385  if (!pSort)
386  return pObj;
387  else if (!pBestResult || pSort->Compare(pObj, pBestResult) > 0)
388  if (pObj->Status)
389  pBestResult = pObj;
390  }
391  }
392  }
393  return pBestResult;
394 }
virtual bool UseShapes()
Definition: C4FindObject.h:95
Definition: C4Rect.h:27
virtual C4Rect * GetBounds()
Definition: C4FindObject.h:94
virtual int32_t Compare(C4Object *pObj1, C4Object *pObj2)=0
virtual bool IsImpossible()
Definition: C4FindObject.h:96
int32_t Status
Definition: C4PropList.h:168
C4LSectors Sectors
Definition: C4GameObjects.h:42
C4Object * Find(const C4ObjectList &Objs)
C4GameObjects Objects
Definition: C4Globals.cpp:48

Here is the call graph for this function:

C4ValueArray * C4FindObject::FindMany ( const C4ObjectList Objs)

Definition at line 280 of file C4FindObject.cpp.

References C4VObj(), Check(), C4ValueArray::GetSize(), IsImpossible(), iSize, C4ValueArray::SetSize(), and C4SortObject::SortObjects().

Referenced by C4EditCursor::DoContextMenu(), FindMany(), and C4Landscape::P::PrepareFreeShape().

281 {
282  // Trivial case
283  if (IsImpossible())
284  return new C4ValueArray();
285  // Set up array
286  C4ValueArray *pArray = new C4ValueArray(32);
287  int32_t iSize = 0;
288  // Search
289  for (C4Object *obj : Objs)
290  if (obj->Status)
291  if (Check(obj))
292  {
293  // Grow the array, if neccessary
294  if (iSize >= pArray->GetSize())
295  pArray->SetSize(iSize * 2);
296  // Add object
297  (*pArray)[iSize++] = C4VObj(obj);
298  }
299  // Shrink array
300  pArray->SetSize(iSize);
301  // Recheck object status (may shrink array again)
302  CheckObjectStatus(pArray);
303  // Apply sorting
304  if (pSort) pSort->SortObjects(pArray);
305  return pArray;
306 }
void SortObjects(C4ValueArray *pArray)
C4Value C4VObj(C4Object *pObj)
Definition: C4Value.cpp:88
void SetSize(int32_t inSize)
virtual bool IsImpossible()
Definition: C4FindObject.h:96
int32_t GetSize() const
Definition: C4ValueArray.h:36
virtual bool Check(C4Object *pObj)=0
int iSize
Definition: TstC4NetIO.cpp:32

Here is the call graph for this function:

Here is the caller graph for this function:

C4ValueArray * C4FindObject::FindMany ( const C4ObjectList Objs,
const C4LSectors Sct 
)

Definition at line 397 of file C4FindObject.cpp.

References C4VObj(), Check(), FindMany(), C4LArea::FirstObjects(), C4LArea::FirstObjectShapes(), GetBounds(), C4GameObjects::GetNextMarker(), C4ValueArray::GetSize(), IsImpossible(), iSize, C4LArea::Next(), C4LArea::NextObjects(), C4LArea::NextObjectShapes(), Objects, C4LSector::ObjectShapes, C4GameObjects::Sectors, C4ValueArray::SetSize(), C4SortObject::SortObjects(), and UseShapes().

398 {
399  // Trivial case
400  if (IsImpossible())
401  return new C4ValueArray();
402  C4Rect *pBounds = GetBounds();
403  if (!pBounds)
404  return FindMany(Objs);
405  // Prepare for array that may be generated
406  C4ValueArray *pArray; int32_t iSize;
407  // Check shape lists?
408  if (UseShapes())
409  {
410  // Get area
411  C4LArea Area(&::Objects.Sectors, *pBounds); C4LSector *pSct;
412  C4ObjectList *pLst = Area.FirstObjectShapes(&pSct);
413  // Check if a single-sector check is enough
414  if (!Area.Next(pSct))
415  return FindMany(pSct->ObjectShapes);
416  // Set up array
417  pArray = new C4ValueArray(32); iSize = 0;
418  // Create marker, search all areas
419  uint32_t iMarker = ::Objects.GetNextMarker();
420  for (; pLst; pLst=Area.NextObjectShapes(pLst, &pSct))
421  for (C4Object *obj : *pLst)
422  if (obj->Status)
423  if (obj->Marker != iMarker)
424  {
425  obj->Marker = iMarker;
426  if (Check(obj))
427  {
428  // Grow the array, if neccessary
429  if (iSize >= pArray->GetSize())
430  pArray->SetSize(iSize * 2);
431  // Add object
432  (*pArray)[iSize++] = C4VObj(obj);
433  }
434  }
435  }
436  else
437  {
438  // Set up array
439  pArray = new C4ValueArray(32); iSize = 0;
440  // Search
441  C4LArea Area(&::Objects.Sectors, *pBounds); C4LSector *pSct;
442  for (C4ObjectList *pLst=Area.FirstObjects(&pSct); pLst; pLst=Area.NextObjects(pLst, &pSct))
443  for (C4Object *obj : *pLst)
444  if (obj->Status)
445  if (Check(obj))
446  {
447  // Grow the array, if neccessary
448  if (iSize >= pArray->GetSize())
449  pArray->SetSize(iSize * 2);
450  // Add object
451  (*pArray)[iSize++] = C4VObj(obj);
452  }
453  }
454  // Shrink array
455  pArray->SetSize(iSize);
456  // Recheck object status (may shrink array again)
457  CheckObjectStatus(pArray);
458  // Apply sorting
459  if (pSort) pSort->SortObjects(pArray);
460  return pArray;
461 }
virtual bool UseShapes()
Definition: C4FindObject.h:95
void SortObjects(C4ValueArray *pArray)
Definition: C4Rect.h:27
virtual C4Rect * GetBounds()
Definition: C4FindObject.h:94
C4Value C4VObj(C4Object *pObj)
Definition: C4Value.cpp:88
C4ValueArray * FindMany(const C4ObjectList &Objs)
uint32_t GetNextMarker()
void SetSize(int32_t inSize)
virtual bool IsImpossible()
Definition: C4FindObject.h:96
C4ObjectList ObjectShapes
Definition: C4Sector.h:49
int32_t GetSize() const
Definition: C4ValueArray.h:36
C4LSectors Sectors
Definition: C4GameObjects.h:42
virtual bool Check(C4Object *pObj)=0
C4GameObjects Objects
Definition: C4Globals.cpp:48
int iSize
Definition: TstC4NetIO.cpp:32

Here is the call graph for this function:

virtual C4Rect* C4FindObject::GetBounds ( )
inlineprotectedvirtual

Reimplemented in C4FindObjectDistance, C4FindObjectOnLine, C4FindObjectAtRect, C4FindObjectAtPoint, C4FindObjectInRect, C4FindObjectOr, and C4FindObjectAnd.

Definition at line 94 of file C4FindObject.h.

Referenced by C4FindObjectAnd::C4FindObjectAnd(), C4FindObjectOr::C4FindObjectOr(), Count(), Find(), and FindMany().

94 { return nullptr; }

Here is the caller graph for this function:

virtual bool C4FindObject::IsEnsured ( )
inlineprotectedvirtual

Reimplemented in C4FindObjectCategory, C4FindObjectOr, C4FindObjectAnd, and C4FindObjectNot.

Definition at line 97 of file C4FindObject.h.

Referenced by Count(), and C4FindObjectNot::IsImpossible().

97 { return false; }

Here is the caller graph for this function:

virtual bool C4FindObject::IsImpossible ( )
inlineprotectedvirtual

Reimplemented in C4FindObjectInArray, C4FindObjectLayer, C4FindObjectProperty, C4FindObjectFunc, C4FindObjectController, C4FindObjectOwner, C4FindObjectProcedure, C4FindObjectOCF, C4FindObjectInRect, C4FindObjectDef, C4FindObjectOr, C4FindObjectAnd, and C4FindObjectNot.

Definition at line 96 of file C4FindObject.h.

Referenced by Count(), Find(), FindMany(), and C4FindObjectNot::IsEnsured().

96 { return false; }

Here is the caller graph for this function:

void C4FindObject::SetSort ( C4SortObject pToSort)

Definition at line 480 of file C4FindObject.cpp.

Referenced by CreateCriterionsFromPars().

481 {
482  delete pSort;
483  pSort = pToSort;
484 }

Here is the caller graph for this function:

virtual bool C4FindObject::UseShapes ( )
inlineprotectedvirtual

Reimplemented in C4FindObjectOnLine, C4FindObjectAtRect, C4FindObjectAtPoint, C4FindObjectOr, and C4FindObjectAnd.

Definition at line 95 of file C4FindObject.h.

Referenced by C4FindObjectAnd::C4FindObjectAnd(), C4FindObjectOr::C4FindObjectOr(), Count(), Find(), and FindMany().

95 { return false; }

Here is the caller graph for this function:

Friends And Related Function Documentation

friend class C4FindObjectAnd
friend

Definition at line 71 of file C4FindObject.h.

Referenced by CreateByValue().

friend class C4FindObjectNot
friend

Definition at line 70 of file C4FindObject.h.

Referenced by CreateByValue().

friend class C4FindObjectOr
friend

Definition at line 72 of file C4FindObject.h.

Referenced by CreateByValue().


The documentation for this class was generated from the following files: