Beispiel #1
0
int
QueryElemMatch(char* key,BSONElem* objElem,BSONElem* query) {
   bson_iterator oItr;
   char* k = key;
   bson obj;
   bson so; 
   BSONElem tmpVal;
   BSONElem valElem;
   BSONElemItr it1;
   bson_iterator_init(&oItr,&obj);

   if (!objElem) {
      BSONElemInit(&tmpVal,BSON_EOO,NULL,0,NULL);
      return CompareValue(&tmpVal,query);
   }
   BSONElemItrInit(&it1,objElem);
   if (*k) {
      BSONElem soElem;
      BSONElem* elemPtr = NULL;
      bson_iterator sItr;
      bson b;

      char* keyEnd = strchr(key,'.');
      //printf("Key in new elem '%s','%s'\n",key,keyEnd);
      if (keyEnd) {
         *keyEnd = '\0';
         keyEnd ++;
      } else {
         //printf("No dot \n");
         keyEnd = key+strlen(key);
      }
      while (BSONElemItrNext(&it1,&tmpVal)) {
         if (tmpVal.type != BSON_OBJECT) {
            continue;
         }
         bson_iterator_subobject(tmpVal.itr,&b);
         bson_iterator_init(&sItr,&b);
         if (bson_find(&sItr,&b,key)) {
            BSONElemInitFromItr(&soElem,&sItr);
            elemPtr = &soElem;
         }
         if (QueryElemMatch(keyEnd,elemPtr,query)) {
            return True;
         }
      }
   } else {
      // end of the string
      if (query->type == BSON_ARRAY || query->type == BSON_OBJECT) {
         return CompareValue(objElem,query);
      }
      while (BSONElemItrNext(&it1,&tmpVal)) {
         if (CompareValue(&tmpVal,query)) {
            return True;
         }
      }
      return False;
   }

   return False;
}
static int CompareAddress(const IPAddress &Address1, const IPAddress &Address2)
{
	if (Address1.Type != Address2.Type)
		return CompareValue(Address1.Type, Address2.Type);
	if (Address1.Type == IP_ADDRESS_V4)
		return CompareValue(Address1.V4.Address, Address2.V4.Address);
	return ::memcmp(Address1.V6.Bytes, Address2.V6.Bytes, 16);
}
Beispiel #3
0
	int CFileListView::CFileListItem::Compare(int ID,const CItem *pItem) const
	{
		const CFileListItem *pFileItem=static_cast<const CFileListItem*>(pItem);
		int Cmp=0;

		switch (ID) {
		case COLUMN_TIME:
			Cmp=CompareSystemTime(m_RecFileInfo.startTime,
								  pFileItem->m_RecFileInfo.startTime);
			if (Cmp==0)
				CompareValue(m_RecFileInfo.durationSecond,
							 pFileItem->m_RecFileInfo.durationSecond);
			break;

		case COLUMN_TITLE:
			//Cmp=m_RecFileInfo.title.compare(pFileItem->m_RecFileInfo.title);
			Cmp=::lstrcmpW(m_RecFileInfo.title.c_str(),
						   pFileItem->m_RecFileInfo.title.c_str());
			break;

		case COLUMN_SERVICE:
			//Cmp=m_RecFileInfo.serviceName.compare(pFileItem->m_RecFileInfo.serviceName);
			Cmp=::lstrcmpW(m_RecFileInfo.serviceName.c_str(),
						   pFileItem->m_RecFileInfo.serviceName.c_str());
			break;

		case COLUMN_RESULT:
			Cmp=CompareValue(m_RecFileInfo.recStatus,
							 pFileItem->m_RecFileInfo.recStatus);
			break;

		case COLUMN_FILE:
			/*
			Cmp=::lstrcmpiW(m_RecFileInfo.recFilePath.c_str(),
							pFileItem->m_RecFileInfo.recFilePath.c_str());
			*/
			Cmp=::StrCmpLogicalW(m_RecFileInfo.recFilePath.c_str(),
								 pFileItem->m_RecFileInfo.recFilePath.c_str());
			break;
		}

		if (Cmp==0) {
			if (ID!=COLUMN_TIME) {
				Cmp=CompareSystemTime(m_RecFileInfo.startTime,
									  pFileItem->m_RecFileInfo.startTime);
				if (Cmp==0)
					CompareValue(m_RecFileInfo.durationSecond,
								 pFileItem->m_RecFileInfo.durationSecond);
			}
			if (Cmp==0)
				Cmp=CompareValue(m_RecFileInfo.id,
								 pFileItem->m_RecFileInfo.id);
		}

		return Cmp;
	}
Beispiel #4
0
int DeleteL(char* num, pnode *hashtable, int htsize, pnode_town start_town)
{
    pnode temp;
    int n = BKDRHash(num)%htsize;
    if(hashtable[n] == NULL)
    {
        printf("Phone number %s not found.\n", num);
        return 0;
    }
    else
    {
        if(CompareValue(hashtable[n]->data, num) == 1)
        {
            DeleteI(hashtable[n]->data, start_town);
            if(hashtable[n]->next == NULL)
            {
                free(hashtable[n]);
                hashtable[n] = NULL;
                printf("Phone number %s deleted successfully.\n", num);
                return 1;
            }
            temp = hashtable[n];
            hashtable[n] = temp->next;
            hashtable[n]->previous = NULL;
            free(temp);
            printf("Phone number %s deleted successfully.\n", num);
            return 1;
        }
        temp = hashtable[n];
        while(temp->next != NULL)
        {
            temp = temp->next;
            if(CompareValue(temp->data, num) == 1)
            {
                if(temp->next == NULL)
                {
                    temp->previous->next = NULL;
                }
                else
                {
                    (temp->next)->previous = temp->previous;
                    (temp->previous)->next = temp->next;
                }
                DeleteI(temp->data, start_town);
                free(temp);
                printf("Phone number %s deleted successfully.\n", num);
                return 1;
            }
        }
    }
    printf("Phone number %s not found.\n", num);
    return 0;
}
Beispiel #5
0
PRBool nsAbIPCCard::Same(nsABCOMCardStruct * card, PRBool isUnicode)
{
    if(!card)
        return PR_FALSE;

    if(mRecordId && card->dwRecordId) 
        return (mRecordId == card->dwRecordId);

    if(CompareValue(isUnicode, card->firstName, m_FirstName))
        if(CompareValue(isUnicode, card->lastName, m_LastName))
            if(CompareValue(isUnicode, card->displayName, m_DisplayName))
                if(CompareValue(isUnicode, card->nickName, m_NickName))
                    return PR_TRUE;

    return PR_FALSE;
}
Beispiel #6
0
int SearchL(char* num, pnode* hashtable, int htsize, MyRecord* rec)
{
    int n = BKDRHash(num)%htsize;
    if(hashtable[n] == NULL)
        return 0;
    if(CompareValue(hashtable[n]->data, num) == 1)
    {
        //WriteValue(hashtable[n]->data);
        RecSetVal(rec, hashtable[n]->data);
        return 1;
    }
    pnode temp = hashtable[n];
    while(temp->next != NULL)
    {
        temp = temp->next;
        if(CompareValue(temp->data, num) == 1)
        {
            //WriteValue(temp->data);
            RecSetVal(rec, temp->data);
            return 1;
        }
    }
    return 0;
}
Beispiel #7
0
INT32 QsortCompare( const void *pNum1, const void *pNum2)
{
	UINT8 Num1 = *(UINT8*)pNum1;
	UINT8 Num2 = *(UINT8*)pNum2;

	switch( gubCurrentSortMode )
	{
		//Price						INT16	uiWeeklySalary
		case 0:
			return( CompareValue((INT32)gMercProfiles[ Num1 ].uiWeeklySalary,  (INT32)gMercProfiles[Num2].uiWeeklySalary ) );
			break;
		//Experience			INT16	bExpLevel
		case 1:
			return( CompareValue((INT32)gMercProfiles[ Num1 ].bExpLevel,  (INT32)gMercProfiles[Num2].bExpLevel) );
			break;
		//Marksmanship		INT16	bMarksmanship
		case 2:
			return( CompareValue((INT32)gMercProfiles[ Num1 ].bMarksmanship,  (INT32)gMercProfiles[Num2].bMarksmanship ) );
			break;
		//Medical					INT16	bMedical
		case 3:
			return( CompareValue((INT32)gMercProfiles[ Num1 ].bMedical,  (INT32)gMercProfiles[Num2].bMedical ) );
			break;
		//Explosives			INT16	bExplosive
		case 4:
			return( CompareValue((INT32)gMercProfiles[ Num1 ].bExplosive,  (INT32)gMercProfiles[Num2].bExplosive ) );
			break;
		//Mechanical			INT16	bMechanical
		case 5:
			return( CompareValue((INT32)gMercProfiles[ Num1 ].bMechanical,  (INT32)gMercProfiles[Num2].bMechanical ) );
			break;

		default:
			Assert( 0 );
			return( 0 );
			break;
	}
}
Beispiel #8
0
	int CReserveListView::CReserveListItem::Compare(int ID,const CItem *pItem) const
	{
		const CReserveListItem *pReserveItem=static_cast<const CReserveListItem*>(pItem);
		int Cmp=0;

		switch (ID) {
		case COLUMN_TITLE:
			//Cmp=m_pReserveData->title.compare(pReserveItem->m_pReserveData->title);
			Cmp=::lstrcmpW(m_pReserveData->title.c_str(),
						   pReserveItem->m_pReserveData->title.c_str());
			break;

		case COLUMN_TIME:
			Cmp=CompareSystemTime(m_pReserveData->startTime,
								  pReserveItem->m_pReserveData->startTime);
			if (Cmp==0)
				Cmp=CompareValue(m_pReserveData->durationSecond,
								 pReserveItem->m_pReserveData->durationSecond);
			break;

		case COLUMN_SERVICE:
			//Cmp=m_pReserveData->stationName.compare(pReserveItem->m_pReserveData->stationName);
			Cmp=::lstrcmpW(m_pReserveData->stationName.c_str(),
						   pReserveItem->m_pReserveData->stationName.c_str());
			break;

		case COLUMN_STATUS:
			if (m_pReserveData->recSetting.recMode==RECMODE_NO) {
				if (pReserveItem->m_pReserveData->recSetting.recMode==RECMODE_NO)
					Cmp=0;
				else
					Cmp=1;
			} else {
				if (pReserveItem->m_pReserveData->recSetting.recMode==RECMODE_NO)
					Cmp=-1;
				else
					Cmp=CompareValue(m_pReserveData->overlapMode,
									 pReserveItem->m_pReserveData->overlapMode);
			}
			break;

		case COLUMN_RECMODE:
			Cmp=CompareValue(m_pReserveData->recSetting.recMode,
							 pReserveItem->m_pReserveData->recSetting.recMode);
			break;

		case COLUMN_PRIORITY:
			Cmp=CompareValue(m_pReserveData->recSetting.priority,
							 pReserveItem->m_pReserveData->recSetting.priority);
			break;
		}

		if (Cmp==0) {
			if (ID!=COLUMN_TIME) {
				Cmp=CompareSystemTime(m_pReserveData->startTime,
									  pReserveItem->m_pReserveData->startTime);
				if (Cmp==0)
					Cmp=CompareValue(m_pReserveData->durationSecond,
									 pReserveItem->m_pReserveData->durationSecond);
			}
			if (Cmp==0)
				Cmp=CompareValue(m_pReserveData->reserveID,
								 pReserveItem->m_pReserveData->reserveID);
		}

		return Cmp;
	}
Beispiel #9
0
  static void
PrintValues( Widget window, char *label )
{
  int n;
  Arg Args[MAX_ARGS];
  Widget VerticalSB;
  Widget HorizontalSB;
  Pixel  SBbackground, SWbackground;
  Pixel  SBbottomShadowColor, SWbottomShadowColor;
  Pixel  SBtopShadowColor, SWtopShadowColor;
  Pixmap SBbackgroundPixmap, SWbackgroundPixmap;
  Pixmap SBbottomShadowPixmap, SWbottomShadowPixmap;
  Pixmap SBtopShadowPixmap, SWtopShadowPixmap;

  (void)printf( "%s\n", label );

  VerticalSB = XtNameToWidget( window, "VertScrollBar" );
  HorizontalSB = XtNameToWidget( window, "VertScrollBar" );

  n = 0;
  XtSetArg( Args[n], XmNbackground, &SBbackground );                 n++;
  XtSetArg( Args[n], XmNbottomShadowColor, &SBbottomShadowColor );   n++;
  XtSetArg( Args[n], XmNtopShadowColor, &SBtopShadowColor );         n++;
  XtSetArg( Args[n], XmNbackgroundPixmap, &SBbackgroundPixmap );     n++;
  XtSetArg( Args[n], XmNbottomShadowPixmap, &SBbottomShadowPixmap ); n++;
  XtSetArg( Args[n], XmNtopShadowPixmap, &SBtopShadowPixmap );       n++;
  XtGetValues( VerticalSB, Args, n );

  n = 0;
  XtSetArg( Args[n], XmNbackground, &SWbackground );                 n++;
  XtSetArg( Args[n], XmNbottomShadowColor, &SWbottomShadowColor );   n++;
  XtSetArg( Args[n], XmNtopShadowColor, &SWtopShadowColor );         n++;
  XtSetArg( Args[n], XmNbackgroundPixmap, &SWbackgroundPixmap );     n++;
  XtSetArg( Args[n], XmNbottomShadowPixmap, &SWbottomShadowPixmap ); n++;
  XtSetArg( Args[n], XmNtopShadowPixmap, &SWtopShadowPixmap );       n++;
  XtGetValues( window, Args, n );

#define CompareValue(desc) \
  (void)printf( "\tVertical ScrollBar " #desc " is %s\n", \
		(SW ## desc == SB ## desc) ? "identical" : "different" )

  CompareValue(background);
  CompareValue(bottomShadowColor);
  CompareValue(topShadowColor);
  CompareValue(backgroundPixmap);
  CompareValue(bottomShadowPixmap);
  CompareValue(topShadowPixmap);

#undef CompareValue

  n = 0;
  XtSetArg( Args[n], XmNbackground, &SBbackground );                 n++;
  XtSetArg( Args[n], XmNbottomShadowColor, &SBbottomShadowColor );   n++;
  XtSetArg( Args[n], XmNtopShadowColor, &SBtopShadowColor );         n++;
  XtSetArg( Args[n], XmNbackgroundPixmap, &SBbackgroundPixmap );     n++;
  XtSetArg( Args[n], XmNbottomShadowPixmap, &SBbottomShadowPixmap ); n++;
  XtSetArg( Args[n], XmNtopShadowPixmap, &SBtopShadowPixmap );       n++;
  XtGetValues( HorizontalSB, Args, n );
  (void)printf( "\n" );

#define CompareValue(desc) \
  (void)printf( "\tHorizontal ScrollBar " #desc " is %s\n", \
		(SW ## desc == SB ## desc) ? "identical" : "different" )

  CompareValue(background);
  CompareValue(bottomShadowColor);
  CompareValue(topShadowColor);
  CompareValue(backgroundPixmap);
  CompareValue(bottomShadowPixmap);
  CompareValue(topShadowPixmap);

#undef CompareValue

  (void)printf( "\n" );

  return;
}
Beispiel #10
0
// Default implementation for RFX functions
void CDaoFieldExchange::Default(LPCTSTR lpszName, void* pv,
	DWORD dwColumnType, DWORD dwBindOptions)
{
	switch (m_nOperation)
	{
	case AddToParameterList:
		if (m_nParam != 1)
			m_prs->m_strSQL += ",";
		m_prs->m_strSQL += lpszName;
		AppendParamType(m_prs->m_strSQL, dwColumnType);
		return;

	case AddToSelectList:
		if (m_nField != 1)
			m_prs->m_strSQL += ",";
		m_prs->m_strSQL += lpszName;
		return;

	case BindField:
		{
			// Query parser needs "[" & "]", GetRows can't tolerate them.
			LPTSTR lpszNoBracketName = new TCHAR[lstrlen(lpszName) + 1];
			m_prs->StripBrackets(lpszName, lpszNoBracketName);

			// Finish setting up column binding info struct
			LPDAOCOLUMNBINDING pcb =
				&m_prs->m_prgDaoColBindInfo[m_nField-1];
			pcb->cbInfoOffset =
				(DWORD)&m_prs->m_pulColumnLengths[m_nField-1];
#ifndef _UNICODE
			pcb->columnID.dwKind = DAOCOLKIND_STR;
			pcb->columnID.lpstr = lpszNoBracketName;
#else
			pcb->columnID.dwKind = DAOCOLKIND_WSTR;
			pcb->columnID.lpwstr = lpszNoBracketName;
#endif

			// Setup the field index map (and store value as void ptr)
			m_prs->m_pMapFieldIndex->SetAt(pv, (void*)m_nField);
		}
		return;

	case BindParam:
		{
			COleVariant* pvar = NULL;

			TRY
			{
				// NULL params not supported, use IS NULL in SQL
				// (i.e. - m_strFilter = _T("Foo IS NULL");
				FillVariant(pv, dwColumnType, &pvar);
				m_prs->m_pQueryDef->SetParamValue(lpszName, *pvar);
			}
			CATCH_ALL(e)
			{
				if (pvar != NULL)
					pvar->Clear();
				delete pvar;
				pvar = NULL;
				THROW_LAST();
			}
			END_CATCH_ALL

			pvar->Clear();
			delete pvar;
			pvar = NULL;
		}
		return;

	case Fixup:
		if (m_prs->GetFieldLength(m_nField-1) == DAO_NULL)
		{
			// Set the value to PSEUDO NULL and mark the status NULL
			SetNullValue(pv, dwColumnType);
			m_prs->SetNullFieldStatus(m_nField-1);
		}
		return;

	case AllocCache:
		if (dwBindOptions & AFX_DAO_ENABLE_FIELD_CACHE)
		{
			CDaoFieldCache* pCache;

			// Allocate new storage and add to map
			AllocCacheValue(pCache, dwColumnType);
			m_prs->m_pMapFieldCache->SetAt(pv, pCache);
		}
		return;

	case StoreField:
		if (dwBindOptions & AFX_DAO_ENABLE_FIELD_CACHE)
		{
			CDaoFieldCache* pCache = GetCacheValue(m_prs, pv);

			// Copy the data to the cache
			if (dwBindOptions & AFX_DAO_CACHE_BY_VALUE)
				CopyValue(pv, (void*)&pCache->m_pvData, dwColumnType);
			else
				CopyValue(pv, pCache->m_pvData, dwColumnType);

			// Cache the NULL status
			if (m_prs->IsFieldStatusNull(m_nField-1))
				pCache->m_nStatus |= AFX_DAO_FIELD_FLAG_NULL;
			else
				pCache->m_nStatus &= ~AFX_DAO_FIELD_FLAG_NULL;
		}
		return;

	case LoadField:
		if (dwBindOptions & AFX_DAO_ENABLE_FIELD_CACHE)
		{
			CDaoFieldCache* pCache = GetCacheValue(m_prs, pv);

			// Copy the data from the cache
			if (dwBindOptions & AFX_DAO_CACHE_BY_VALUE)
				CopyValue((void*)&pCache->m_pvData, pv, dwColumnType);
			else
				CopyValue(pCache->m_pvData, pv, dwColumnType);

			// Set the NULL status from the cache
			if (pCache->m_nStatus & AFX_DAO_FIELD_FLAG_NULL)
				m_prs->SetNullFieldStatus(m_nField-1);
			else
				m_prs->ClearNullFieldStatus(m_nField-1);
		}
		return;

	case SetFieldNull:
		// Setting field NOT NULL doesn't require field exchange
		if ((m_pvField == NULL && m_nFieldType == outputColumn)
			|| m_pvField == pv)
		{
			SetNullValue(pv, dwColumnType);

			// Also set the status array if not a parameter
			if (m_nFieldType == outputColumn)
				m_prs->SetNullFieldStatus(m_nField-1);

#ifdef _DEBUG
			m_nFieldFound = m_nField;
#endif
		}
		return;

	case MarkForAddNew:
		if (dwBindOptions & AFX_DAO_ENABLE_FIELD_CACHE)
		{
			// Don't need to do anything if field marked dirty
			if (!m_prs->IsFieldStatusDirty(m_nField-1))
			{
				// Mark dirty & not NULL if not set to pseudo NULL value
				if (!IsNullValue(pv, dwColumnType))
				{
					m_prs->SetDirtyFieldStatus(m_nField-1);
					m_prs->ClearNullFieldStatus(m_nField-1);
				}
			}
		}
		return;

	case MarkForEdit:
		if (dwBindOptions & AFX_DAO_ENABLE_FIELD_CACHE)
		{
			// If value not pseudo NULL value, clear NULL status
			if (!IsNullValue(pv, dwColumnType))
				m_prs->ClearNullFieldStatus(m_nField-1);

			// If field already marked dirty, don't need to check cache
			if (!m_prs->IsFieldStatusDirty(m_nField-1))
			{
				CDaoFieldCache* pCache = GetCacheValue(m_prs, pv);

				BOOL bNullField = m_prs->IsFieldStatusNull(m_nField-1);
				BOOL bNullCache = pCache->m_nStatus & AFX_DAO_FIELD_FLAG_NULL;

				void* pvData;
				if (dwBindOptions & AFX_DAO_CACHE_BY_VALUE)
					pvData = &pCache->m_pvData;
				else
					pvData = pCache->m_pvData;

				// Mark dirty if NULL status differs or value differs
				if ( (bNullCache && !bNullField) ||
					(!bNullCache && bNullField) ||
					CompareValue(pv, pvData, dwColumnType))
				{
					m_prs->SetDirtyFieldStatus(m_nField-1);
				}
			}
		}
		return;

	case SetDirtyField:
		if (m_prs->IsFieldStatusDirty(m_nField-1))
		{
			COleVariant* pvar = NULL;

			TRY
			{
				// If field is NULL don't set the value
				if (!m_prs->IsFieldStatusNull(m_nField-1))
					FillVariant(pv, dwColumnType, &pvar);
				else
				{
					pvar = new COleVariant;
					pvar->vt = VT_NULL;
				}

				// SetFieldValue (put_Collect) doesn't like brackets
				// Assumes no brackets if first char not a bracket
				LPTSTR lpszModifiedName = NULL;
				if (*lpszName == '[')
				{
					lpszModifiedName = new TCHAR[_tcslen(lpszName) + 1];

					// Copy the name with no brackets, and reset lpszName
					m_prs->StripBrackets(lpszName, lpszModifiedName);
					lpszName = lpszModifiedName;
				}

				m_prs->SetFieldValue(lpszName, *pvar);
				delete lpszModifiedName;
			}
			CATCH_ALL(e)
			{
				if (pvar != NULL)
					pvar->Clear();
				delete pvar;
				pvar = NULL;
				THROW_LAST();
			}
			END_CATCH_ALL

			pvar->Clear();
			delete pvar;
			pvar = NULL;
		}
		return;

	default:
		ASSERT(FALSE);
		return;
	}
Beispiel #11
0
INT32 QsortCompare( const void *pNum1, const void *pNum2)
{
	UINT8 Num1 = *(UINT8*)pNum1;
	UINT8 Num2 = *(UINT8*)pNum2;

	switch( gubCurrentSortMode )
	{
		//Price						INT16	uiWeeklySalary
		case 0:
			return( CompareValue((INT32)gMercProfiles[ Num1 ].uiWeeklySalary,	(INT32)gMercProfiles[Num2].uiWeeklySalary ) );
			break;
		//Experience			INT16	bExpLevel
		case 1:
			return( CompareValue((INT32)gMercProfiles[ Num1 ].bExpLevel,	(INT32)gMercProfiles[Num2].bExpLevel) );
			break;
		//Marksmanship		INT16	bMarksmanship
		case 2:
			return( CompareValue((INT32)gMercProfiles[ Num1 ].bMarksmanship,	(INT32)gMercProfiles[Num2].bMarksmanship ) );
			break;
		//Mechanical			INT16	bMechanical
		case 3:
			return( CompareValue((INT32)gMercProfiles[ Num1 ].bMechanical,	(INT32)gMercProfiles[Num2].bMechanical ) );
			break;
		//Explosives			INT16	bExplosive
		case 4:
			return( CompareValue((INT32)gMercProfiles[ Num1 ].bExplosive,	(INT32)gMercProfiles[Num2].bExplosive ) );
			break;
		//Medical					INT16	bMedical
		case 5:
			return( CompareValue((INT32)gMercProfiles[ Num1 ].bMedical,	(INT32)gMercProfiles[Num2].bMedical ) );
			break;
		//Health					INT16	bLifeMax
		case 6:
			return( CompareValue((INT32)gMercProfiles[ Num1 ].bLifeMax,	(INT32)gMercProfiles[Num2].bLifeMax ) );
			break;
		//Agility					INT16	bAgility
		case 7:
			return( CompareValue((INT32)gMercProfiles[ Num1 ].bAgility,	(INT32)gMercProfiles[Num2].bAgility ) );
			break;
		//Dexterity					INT16	bDexterity
		case 8:
			return( CompareValue((INT32)gMercProfiles[ Num1 ].bDexterity,	(INT32)gMercProfiles[Num2].bDexterity ) );
			break;
		//Strength					INT16	bStrength
		case 9:
			return( CompareValue((INT32)gMercProfiles[ Num1 ].bStrength,	(INT32)gMercProfiles[Num2].bStrength ) );
			break;
		//Leadership				INT16	bLeadership
		case 10:
			return( CompareValue((INT32)gMercProfiles[ Num1 ].bLeadership,	(INT32)gMercProfiles[Num2].bLeadership ) );
			break;
		//Wisdom					INT16	bWisdom
		case 11:
			return( CompareValue((INT32)gMercProfiles[ Num1 ].bWisdom,	(INT32)gMercProfiles[Num2].bWisdom ) );
			break;
		//Name						CHAR16	zNickname
		case 12:
			return( wcscmp(gMercProfiles[ Num1 ].zNickname, gMercProfiles[Num2].zNickname ) );
			break;

		default:
			Assert( 0 );
			return( 0 );
			break;
	}
}
Beispiel #12
0
int 
QueryMatch2(BinaryStr* query, BinaryStr* obj ) {
   bson_iterator q,o;
   bson_type qType,tType;
   bson qBson,oBson;

   bson_iterator_from_buffer(&q, query->data);
   bson_iterator_from_buffer(&o, obj->data);
   bson_init_finished_data(&qBson,(char*)query->data);
   bson_init_finished_data(&oBson,(char*)obj->data);

   while((qType = bson_iterator_next(&q))) {
      // for all keys in query
      const char* key = bson_iterator_key(&q);
      //printf("Key %s \n",key);
      BSONElem val1,val2;

      BSONElemInit(&val1,bson_iterator_type(&q),(char*) bson_iterator_value(&q),0,&q);
      tType = bson_find(&o,&oBson,key); 
      if (!tType) {

         BSONElemInit(&val2,BSON_EOO,NULL,0,NULL);
         if (!CompareValue(&val2,&val1)) {
            return False;
         }
         continue;
      } else if (tType == BSON_OBJECT && qType == BSON_OBJECT) {
         BinaryStr qData,oData;
         qData.data = (char*) bson_iterator_value(&q);
         oData.data = (char*) bson_iterator_value(&o);
         if (!QueryMatch(&qData,&oData)) {
            return False;
         }
      } else if (tType == BSON_ARRAY && qType != BSON_OBJECT && qType != BSON_ARRAY) {
         bson_iterator si;
         bson_type t;
         bson_iterator_subiterator(&o,&si);
         uint8_t found = False; 
         while ((t=bson_iterator_next(&si))){
            //BSONElemInit(&val2,bson_iterator_type(&si),(char*) bson_iterator_value(&si),0,&si);
            BSONElemInitFromItr(&val2,&si);
            //BSONElemInit(&val2,bson_iterator_type(&si),(char*) bson_iterator_value(&si),0,&si);
            if (CompareValue(&val2,&val1)) {
               found = True;
               break;
            }
         }
         if (!found) {
            return False;
         } 
      } else {

         //BSONElemInit(&val2,bson_iterator_type(&o),(char*) bson_iterator_value(&o),0,&o);
         BSONElemInitFromItr(&val2,&o);
         if (!CompareValue(&val2,&val1)) {
            return False;
         }
      }
   }

   return True;
}