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 ()
 
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 ( )
inline

Definition at line 76 of file C4FindObject.h.

76 : pSort(nullptr) { }
C4FindObject::~C4FindObject ( )
virtual

Definition at line 29 of file C4FindObject.cpp.

30 {
31  delete pSort;
32 }

Member Function Documentation

int32_t C4FindObject::Count ( const C4ObjectList Objs)

Definition at line 242 of file C4FindObject.cpp.

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

Referenced by Count().

243 {
244  // Trivial cases
245  if (IsImpossible())
246  return 0;
247  if (IsEnsured())
248  return Objs.ObjectCount();
249  // Count
250  int32_t iCount = 0;
251  for (C4Object *obj : Objs)
252  if (obj->Status && Check(obj))
253  iCount++;
254  return iCount;
255 }
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 309 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().

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

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

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 257 of file C4FindObject.cpp.

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

Referenced by Find().

258 {
259  // Trivial case
260  if (IsImpossible())
261  return nullptr;
262  // Search
263  // Double-check object status, as object might be deleted after Check()!
264  C4Object *pBestResult = nullptr;
265  for (C4Object *obj : Objs)
266  if (obj->Status)
267  if (Check(obj))
268  if (obj->Status)
269  {
270  // no sorting: Use first object found
271  if (!pSort) return obj;
272  // Sorting: Check if found object is better
273  if (!pBestResult || pSort->Compare(obj, pBestResult) > 0)
274  if (obj->Status)
275  pBestResult = obj;
276  }
277  return pBestResult;
278 }
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 353 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().

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

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

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 398 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().

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

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 481 of file C4FindObject.cpp.

Referenced by CreateCriterionsFromPars().

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

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: