--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/webengine/wmlengine/src/hed/src/EntitySet.c Mon Mar 30 12:54:55 2009 +0300
@@ -0,0 +1,103 @@
+/*
+* Copyright (c) 2000 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+
+#include "nw_hed_entityseti.h"
+
+/* ------------------------------------------------------------------------- *
+ class definition
+ * ------------------------------------------------------------------------- */
+
+/* ------------------------------------------------------------------------- */
+const
+NW_HED_EntitySet_Class_t NW_HED_EntitySet_Class = {
+ { /* NW_Object_Core */
+ /* super */ &NW_Object_Base_Class,
+ /* queryInterface */ _NW_Object_Base_QueryInterface
+ },
+ { /* NW_HED_EntitySet */
+ /* numEntries */ 0,
+ /* numCaseInsensitiveEntries */ 0,
+ /* entries */ NULL,
+ /* getEntityChar */ _NW_HED_EntitySet_GetEntityChar
+ }
+};
+
+/* ------------------------------------------------------------------------- *
+ virtual methods
+ * ------------------------------------------------------------------------- */
+
+/* ------------------------------------------------------------------------- */
+NW_Ucs2
+_NW_HED_EntitySet_GetEntityChar (const NW_HED_EntitySet_t* entitySet,
+ NW_Ucs2 *name)
+{
+ NW_Int32 index;
+ const NW_HED_EntitySet_Entry_t* entry;
+
+ /* First do a binary search search in the case sensitive part of the array */
+ NW_Int32 low = 0;
+ NW_Int32 high = NW_HED_EntitySet_GetClassPart(entitySet).numEntries
+ - NW_HED_EntitySet_GetClassPart(entitySet).numCaseInsensitiveEntries - 1;
+ NW_Int32 res = 0;
+
+ while (low <= high ) {
+ index = (high + low) / 2;
+ entry = & (NW_HED_EntitySet_GetClassPart(entitySet).entries[index]);
+
+ /* do a case sensitive string comparison */
+ res = NW_Str_StrcmpConst( name, entry->name );
+
+ if ( res > 0 ) {
+ /* name is ahead of this slot. Increase low bound. */
+ low = index + 1;
+ } else if ( res < 0 ) {
+ /* name is behind this slot. Decrease high bound. */
+ high = index - 1;
+ } else {
+ /* Found the entity name. Return its value. */
+ return entry->value;
+ }
+ }
+
+ /* if no match was found search in the case insensitive part of the table. */
+ low = NW_HED_EntitySet_GetClassPart(entitySet).numEntries
+ - NW_HED_EntitySet_GetClassPart(entitySet).numCaseInsensitiveEntries;
+ high = NW_HED_EntitySet_GetClassPart(entitySet).numEntries - 1;
+ res = 0;
+ while (low <= high ) {
+ index = (high + low) / 2;
+ entry = & (NW_HED_EntitySet_GetClassPart(entitySet).entries[index]);
+
+ // do a case insensitive string comparison
+ res = NW_Str_StricmpConst( name, entry->name );
+
+ if ( res > 0 ) {
+ /* name is ahead of this slot. Increase low bound. */
+ low = index + 1;
+ } else if ( res < 0 ) {
+ /* name is behind this slot. Decrease high bound. */
+ high = index - 1;
+ } else {
+ /* Found the entity name. Return its value. */
+ return entry->value;
+ }
+ }
+
+ /* if no match were found we return 0 */
+ return 0;
+}