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

#include <C4FindObject.h>

Inheritance diagram for C4SortObject:
[legend]

Public Member Functions

 C4SortObject ()=default
 
virtual ~C4SortObject ()=default
 
virtual int32_t Compare (C4Object *pObj1, C4Object *pObj2)=0
 
virtual bool PrepareCache (const C4ValueArray *pObjs)
 
virtual int32_t CompareCache (int32_t iObj1, int32_t iObj2, C4Object *pObj1, C4Object *pObj2)
 
void SortObjects (C4ValueArray *pArray)
 

Static Public Member Functions

static C4SortObjectCreateByValue (const C4Value &Data, const C4Object *context=nullptr)
 
static C4SortObjectCreateByValue (int32_t iType, const C4ValueArray &Data, const C4Object *context=nullptr)
 

Detailed Description

Definition at line 401 of file C4FindObject.h.

Constructor & Destructor Documentation

C4SortObject::C4SortObject ( )
default
virtual C4SortObject::~C4SortObject ( )
virtualdefault

Member Function Documentation

virtual int32_t C4SortObject::Compare ( C4Object pObj1,
C4Object pObj2 
)
pure virtual

Implemented in C4SortObjectMultiple, C4SortObjectReverse, and C4SortObjectByValue.

Referenced by C4SortObjectReverse::Compare(), CompareCache(), C4FindObject::Find(), and C4SortObjectSTL::operator()().

Here is the caller graph for this function:

virtual int32_t C4SortObject::CompareCache ( int32_t  iObj1,
int32_t  iObj2,
C4Object pObj1,
C4Object pObj2 
)
inlinevirtual

Reimplemented in C4SortObjectMultiple, C4SortObjectReverse, and C4SortObjectByValue.

Definition at line 412 of file C4FindObject.h.

References Compare().

Referenced by C4SortObjectReverse::CompareCache(), and C4SortObjectSTLCache::operator()().

412 { return Compare(pObj1, pObj2); }
virtual int32_t Compare(C4Object *pObj1, C4Object *pObj2)=0

Here is the call graph for this function:

Here is the caller graph for this function:

C4SortObject * C4SortObject::CreateByValue ( const C4Value Data,
const C4Object context = nullptr 
)
static

Definition at line 824 of file C4FindObject.cpp.

References C4Value::getArray().

Referenced by C4FindObject::CreateByValue(), and CreateByValue().

825 {
826  // Must be an array
827  const C4ValueArray *pArray = C4Value(DataVal).getArray();
828  if (!pArray) return nullptr;
829  const C4ValueArray &Data = *pArray;
830  int32_t iType = Data[0].getInt();
831  return CreateByValue(iType, Data, context);
832 }
C4ValueArray * getArray() const
Definition: C4Value.h:118
static C4SortObject * CreateByValue(const C4Value &Data, const C4Object *context=nullptr)

Here is the call graph for this function:

Here is the caller graph for this function:

C4SortObject * C4SortObject::CreateByValue ( int32_t  iType,
const C4ValueArray Data,
const C4Object context = nullptr 
)
static

Definition at line 834 of file C4FindObject.cpp.

References C4SO_Distance, C4SO_Func, C4SO_Mass, C4SO_Multiple, C4SO_Random, C4SO_Reverse, C4SO_Speed, C4SO_Value, CreateByValue(), C4ValueArray::GetSize(), C4Object::GetX(), C4Object::GetY(), iSize, and C4SortObjectFunc::SetPar().

835 {
836  switch (iType)
837  {
838  case C4SO_Reverse:
839  {
840  // create child sort
841  C4SortObject *pChildSort = C4SortObject::CreateByValue(Data[1], context);
842  if (!pChildSort) return nullptr;
843  // wrap
844  return new C4SortObjectReverse(pChildSort);
845  }
846 
847  case C4SO_Multiple:
848  {
849  // Trivial case (one sort)
850  if (Data.GetSize() == 2)
851  {
852  return C4SortObject::CreateByValue(Data[1], context);
853  }
854  // Create all children
855  int32_t i;
856  C4SortObject **ppSorts = new C4SortObject *[Data.GetSize() - 1];
857  for (i = 0; i < Data.GetSize() - 1; i++)
858  {
859  ppSorts[i] = C4SortObject::CreateByValue(Data[i+1], context);
860  }
861  // Count real entries, move them to start of list
862  int32_t iSize = 0;
863  for (i = 0; i < Data.GetSize() - 1; i++)
864  if (ppSorts[i])
865  if (iSize++ != i)
866  ppSorts[iSize-1] = ppSorts[i];
867  // Create
868  return new C4SortObjectMultiple(iSize, ppSorts);
869  }
870 
871  case C4SO_Distance:
872  {
873  int32_t x = Data[1].getInt();
874  int32_t y = Data[2].getInt();
875  if (context)
876  {
877  x += context->GetX();
878  y += context->GetY();
879  }
880  return new C4SortObjectDistance(x, y);
881  }
882 
883  case C4SO_Random:
884  return new C4SortObjectRandom();
885 
886  case C4SO_Speed:
887  return new C4SortObjectSpeed();
888 
889  case C4SO_Mass:
890  return new C4SortObjectMass();
891 
892  case C4SO_Value:
893  return new C4SortObjectValue();
894 
895  case C4SO_Func:
896  {
897  // Get function name
898  C4String *pStr = Data[1].getStr();
899  if (!pStr) return nullptr;
900  // Construct
901  C4SortObjectFunc *pSO = new C4SortObjectFunc(pStr);
902  // Add parameters
903  for (int i = 2; i < Data.GetSize(); i++)
904  pSO->SetPar(i - 2, Data[i]);
905  // Done
906  return pSO;
907  }
908 
909  }
910  return nullptr;
911 }
int32_t GetY() const
Definition: C4Object.h:287
int32_t GetX() const
Definition: C4Object.h:286
int32_t GetSize() const
Definition: C4ValueArray.h:36
static C4SortObject * CreateByValue(const C4Value &Data, const C4Object *context=nullptr)
void SetPar(int i, const C4Value &val)
int iSize
Definition: TstC4NetIO.cpp:32

Here is the call graph for this function:

virtual bool C4SortObject::PrepareCache ( const C4ValueArray pObjs)
inlinevirtual

Reimplemented in C4SortObjectMultiple, C4SortObjectReverse, and C4SortObjectByValue.

Definition at line 411 of file C4FindObject.h.

Referenced by C4SortObjectReverse::PrepareCache(), and C4ValueArray::Sort().

411 { return false; }

Here is the caller graph for this function:

void C4SortObject::SortObjects ( C4ValueArray pArray)

Definition at line 913 of file C4FindObject.cpp.

References C4ValueArray::Sort().

Referenced by C4FindObject::FindMany().

914 {
915  pArray->Sort(*this);
916 }
void Sort(class C4SortObject &rSort)

Here is the call graph for this function:

Here is the caller graph for this function:


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