Ejemplo n.º 1
0
    explicit PriorityQueue(const _Compare& __comp = _Compare(),
			   const _Sequence& __s = _Sequence(),
			   const _Map& __m = _Map())
    : c(__s), m(__m), comp(__comp) 
    { 
	make_heap(c.begin(), c.end(), comp); 
    }
Ejemplo n.º 2
0
static bool _Evaluate(
const WQLOperand& lhs, 
const WQLOperand& rhs, 
WQLOperation op)
{
	switch (lhs.getType())
	{
		case WQLOperand::NULL_VALUE:
		{
			// return true if the op is WQL_EQ and the rhs is NULL
			// also if op is WQL_NE and rhs is not NULL
			return !(op == WQL_EQ) ^ (rhs.getType() == WQLOperand::NULL_VALUE);
			break;
		}
		case WQLOperand::INTEGER_VALUE:
		{
			return _Compare(
			lhs.getIntegerValue(),
			rhs.getIntegerValue(),
			op);
		}
		case WQLOperand::DOUBLE_VALUE:
		{
			return _Compare(
			lhs.getDoubleValue(),
			rhs.getDoubleValue(),
			op);
		}
		case WQLOperand::BOOLEAN_VALUE:
		{
			return _Compare(
			lhs.getBooleanValue(),
			rhs.getBooleanValue(),
			op);
		}
		case WQLOperand::STRING_VALUE:
		{
			return _Compare(
			lhs.getStringValue(),
			rhs.getStringValue(),
			op);
		}
		default:
		OW_ASSERT(0);
	}
	return false;
}
Ejemplo n.º 3
0
    PriorityQueue(_InputIterator __first, _InputIterator __last,
		  const _Compare& __comp = _Compare(), 
		  const _Sequence& __s = _Sequence(),
		  const _Map& __m = _Map()) 
    : c(__s), m(__m), comp(__comp) 
    {
	c.insert(c.end(), __first, __last);
	make_heap(c.begin(), c.end(), comp);
    }
Ejemplo n.º 4
0
void* max(void* _First, void* _Second, int (*_Compare)(void*, void*))
{
   /* if _First is less than _Second, return _Second */

   if (_Compare(_First, _Second)) return _Second;

   /* else return _First */
   
   else return _First;
}
Ejemplo n.º 5
0
void* LnkLstSearch(struct LinkedList* _List, const void* _Data, int (*_Compare)(const void*, const void*)) {
	struct LnkLst_Node* _Node = _List->Front;

	while(_Node != NULL) {
		if(_Compare(_Data, _Node->Data) == 0)
			return _Node->Data;
		_Node = _Node->Next;
	}
	return NULL;
}
Ejemplo n.º 6
0
/*********************************************************************
*
*       _BubbleSort
*
* Purpose:
*   Bubble sort algorithm.
*/
static void _BubbleSort(unsigned lb, unsigned ub, SORT_OBJECT * pSortObject) {
    int Swapped;
    do {
        unsigned i;
        Swapped = 0;
        for (i = ub; i > lb; i--) {
            if (_Compare(i - 1, i, pSortObject) > 0) {
                _Swap(i - 1, i, pSortObject);
                Swapped = 1;
            }
        }
    } while (Swapped);
}
static Boolean _Evaluate(
    const WQLOperand& lhs,
    const WQLOperand& rhs,
    WQLOperation op)
{
    switch (lhs.getType())
    {
        case WQLOperand::NULL_VALUE:
        {
#ifdef PEGASUS_SNIA_EXTENSIONS
            return (rhs.getType() == WQLOperand::NULL_VALUE);
#else
            // This cannot happen since expressions of the form
            // OPERAND OPERATOR NULL are converted to unary form.
            // For example: "count IS NULL" is treated as a unary
            // operation in which IS_NULL is the unary operation
            // and count is the the unary operand.

            PEGASUS_ASSERT(0);
            break;
#endif
        }

        case WQLOperand::INTEGER_VALUE:
        {
            return _Compare(
            lhs.getIntegerValue(),
            rhs.getIntegerValue(),
            op);
        }

        case WQLOperand::DOUBLE_VALUE:
        {
            return _Compare(
            lhs.getDoubleValue(),
            rhs.getDoubleValue(),
            op);
        }

        case WQLOperand::BOOLEAN_VALUE:
        {
            return _Compare(
            lhs.getBooleanValue(),
            rhs.getBooleanValue(),
            op);
        }

        case WQLOperand::STRING_VALUE:
        {
            if(op != WQL_LIKE) {
                return _Compare(
                lhs.getStringValue(),
                rhs.getStringValue(),
                op);
            }
            else {
                CString lhsstr = lhs.getStringValue().getCString();
                CString rhsstr = rhs.getStringValue().getCString();
                const char* lhscs = (const char *)lhsstr;
                const char* rhscs = (const char *)rhsstr;
                return _LikeEvaluate((const char *)lhsstr, (const char *)rhsstr);
            }
        }

        default:
            PEGASUS_ASSERT(0);
    }

    return false;
}
Ejemplo n.º 8
0
void MapGridCtrl::Sort(SortKey vertical, SortKey horizontal, bool vertical_direction, bool horizontal_direction)
{
	if (m_maps.empty())
		return;

	// Always start by sorting on name, to get duplicate maps together.
	SortKey keys[3] = {SortKey_Name, vertical, horizontal};
	bool dirs[3] = {false, vertical_direction, horizontal_direction};

	// This looks like common antipattern 'loop switch sequence', however here
	// it's the best way I found to prevent duplication of the switch statement,
	// which will probably require most (all?) changes and possibly grow big.

	for (int i = 0; i < 3; ++i) {
		// Do nothing if current sortkey is same as previous one.
		if (i > 0 && keys[i] == keys[i - 1] && dirs[i] == dirs[i - 1])
			continue;
		// Sort dimension i on sortkey keys[i].
		const bool d = dirs[i];
		switch (keys[i]) {
			case SortKey_Name:
				_Sort(i, _Compare(d, CompareName));
				break;
			case SortKey_TidalStrength:
				_Sort(i, _Compare(d, CompareTidalStrength));
				break;
			case SortKey_Gravity:
				_Sort(i, _Compare(d, CompareGravity));
				break;
			case SortKey_MaxMetal:
				_Sort(i, _Compare(d, CompareMaxMetal));
				break;
			case SortKey_ExtractorRadius:
				_Sort(i, _Compare(d, CompareExtractorRadius));
				break;
			case SortKey_MinWind:
				_Sort(i, _Compare(d, CompareMinWind));
				break;
			case SortKey_MaxWind:
				_Sort(i, _Compare(d, CompareMaxWind));
				break;
			case SortKey_Wind:
				_Sort(i, _Compare(d, CompareWind));
				break;
			case SortKey_Area:
				_Sort(i, _Compare(d, CompareArea));
				break;
			case SortKey_AspectRatio:
				_Sort(i, _Compare(d, CompareAspectRatio));
				break;
			case SortKey_PosCount:
				_Sort(i, _Compare(d, ComparePosCount));
				break;
			default:
				ASSERT_EXCEPTION(false, _T("unimplemented SortKey in MapGridCtrl::Sort"));
				break;
		}
	}
}
Ejemplo n.º 9
0
HRESULT KG3DScenePvsEditor::ProcessMessage(UINT message, WPARAM wParam, LPARAM lParam)//<PROCESS_MESSAGE>
{
    switch (message)
    {
    case WM_LBUTTONUP :
        Place2Pvs();
        break;
    case WM_KEYDOWN :
        {
            switch (wParam)
            {
            case VK_SHIFT :
                {
                    if (!m_bSwitchObj && m_listPlaceObj.size() > 0)
                    {
                        m_itorListObj = m_listPlaceObj.end();
                        --m_itorListObj;
                    }
                    m_bSwitchObj = true;
                }
                break;
            case VK_TAB :
                {
					KG3DSceneSelectionTool& selTool = this->GetSelectionTool();
                    //if (m_listSelectedEntity.size() <= 0)
                    //    break;

					if(selTool.GetSelectionCount() <= 0)
						break;


                    if (m_listSelTabEntity.size() == 0)
                    {
                        //KG3DSceneEntity frontEntity = m_listSelectedEntity.front();
						selTool.GetSelectionAccessProxy().Begin();
						KG3DSceneEntity frontEntity = selTool.GetSelectionAccessProxy().GetCur();	//注意前面做了选择非空的判断,不然这里是有问题的

                        //m_listSelTabEntity = m_listSelectableEntity;
						/*2009-1-8 新的选择工具不支持直接复制内部的选择体,但是支持创建选择组。但是这里问题比较严重,因为需要sort,而选择
						工具内部维护的选择表有自己的结构,不一定能支持sort,所以这里把选择表复制出来*/
						selTool.GetSelectableList(m_listSelTabEntity);

                        m_listSelTabEntity.sort(_Compare(frontEntity));
                        m_itorTabSel = m_listSelTabEntity.begin();
                    }

                    if (++m_itorTabSel == m_listSelTabEntity.end())
                        m_itorTabSel = m_listSelTabEntity.begin();

                    //ClearSelectedEntity();
					this->GetSelectionTool().ClearSelection();
                    
					//AddSelectedEntity(*m_itorTabSel);
					this->GetSelectionTool().SetSelected(*m_itorTabSel, TRUE);

      //              switch (this->GetEditState())
      //              {
      //              //case SCENESTATE_MOVE :
						////OnToggleStateMove();//<OnToggleStateMove Refactor>//SceneSelectBase会监视SetEditState,在内部改变状态
      //                 // break;
      //              //case SCENESTATE_ROTATE :
      //                  //OnToggleStateRotation();//<OnToggleStateRotation Refactor>//SceneSelectBase会监视SetEditState,在内部改变状态
      //                 // break;
      //             /* case SCENESTATE_SCALE :
				  // OnToggleStateScaling();//<OnToggleStateScaling Refactor>//SceneSelectBase会监视SetEditState,在内部改变状态
      //                  break;*/
      //              default :
      //                  break;
      //              }
                    
                }
                break;
            default :
                break;
            }
        }
        break;
    case WM_KEYUP :
        {
            switch (wParam)
            {
            case VK_SHIFT :
                {
                    if (m_listPlaceObj.size() > MAX_PLACE_OBJ_HISTORY_SIZE)
                    {
                        list<string>::iterator ito = m_listPlaceObj.begin();
                        advance(ito, MAX_PLACE_OBJ_HISTORY_SIZE / 10);
                        m_listPlaceObj.erase(m_listPlaceObj.begin(), ito);
                    }
                    m_bSwitchObj = false;
                }
                break;
            default :
                break;
            }
        }
        break;
    case WM_MOUSEWHEEL :
        {
            short wheel = static_cast<short>(HIWORD(wParam));

            if (m_bSwitchObj && m_listPlaceObj.size() > 0)
            {
                list<string>::iterator last = m_listPlaceObj.end();
                --last;

                if (wheel < 0 && m_itorListObj != last)
                    ++m_itorListObj;

                if (wheel > 0 && m_itorListObj != m_listPlaceObj.begin())
                    --m_itorListObj;

                SetHandObject((*m_itorListObj).c_str());
            }

            if (m_bSwitchObj)
                return S_OK;
        }
        break;
    case WM_RBUTTONDOWN :
        {
            if (m_bRunMode && m_pRunder)
                m_pRunder->ProcessRButtonDn(wParam, lParam);
        }
        break;
    case WM_RBUTTONUP :
        {
            if (m_bRunMode && m_pRunder)
                m_pRunder->ProcessRButtonUp(wParam, lParam);
        }
        break;
    default :
        break;
    }

    KG3DSceneEditorBase::ProcessMessage(message, wParam, lParam);

    return S_OK;
}