diff --git a/core/src/fxcrt/fx_basic_maps.cpp b/core/src/fxcrt/fx_basic_maps.cpp
index f8a0390..f7d127f 100644
--- a/core/src/fxcrt/fx_basic_maps.cpp
+++ b/core/src/fxcrt/fx_basic_maps.cpp
@@ -7,6 +7,13 @@
 #include "core/include/fxcrt/fx_basic.h"
 #include "plex.h"
 
+namespace {
+
+const uint8_t kFreeLength = 0xfe;
+const uint8_t kHasAllocatedBufferLength = 0xff;
+
+}  // namespace
+
 CFX_MapPtrToPtr::CFX_MapPtrToPtr(int nBlockSize)
     : m_pHashTable(NULL),
       m_nHashTableSize(17),
@@ -165,7 +172,7 @@
   uint8_t* m_pBuffer;
 };
 static void _CompactStringRelease(_CompactString* pCompact) {
-  if (pCompact->m_CompactLen == 0xff) {
+  if (pCompact->m_CompactLen == kHasAllocatedBufferLength) {
     FX_Free(pCompact->m_pBuffer);
   }
 }
@@ -178,7 +185,7 @@
     }
     return FXSYS_memcmp(&pCompact->m_LenHigh, pStr, len) == 0;
   }
-  if (pCompact->m_CompactLen != 0xff ||
+  if (pCompact->m_CompactLen != kHasAllocatedBufferLength ||
       pCompact->m_LenHigh * 256 + pCompact->m_LenLow != len) {
     return FALSE;
   }
@@ -192,18 +199,18 @@
     FXSYS_memcpy(&pCompact->m_LenHigh, pStr, len);
     return;
   }
-  pCompact->m_CompactLen = 0xff;
+  pCompact->m_CompactLen = kHasAllocatedBufferLength;
   pCompact->m_LenHigh = len / 256;
   pCompact->m_LenLow = len % 256;
   pCompact->m_pBuffer = FX_Alloc(uint8_t, len);
   FXSYS_memcpy(pCompact->m_pBuffer, pStr, len);
 }
 static CFX_ByteStringC _CompactStringGet(_CompactString* pCompact) {
-  if (pCompact->m_CompactLen == 0xff) {
+  if (pCompact->m_CompactLen == kHasAllocatedBufferLength) {
     return CFX_ByteStringC(pCompact->m_pBuffer,
                            pCompact->m_LenHigh * 256 + pCompact->m_LenLow);
   }
-  if (pCompact->m_CompactLen == 0xfe) {
+  if (pCompact->m_CompactLen == kFreeLength) {
     return CFX_ByteStringC();
   }
   return CFX_ByteStringC(&pCompact->m_LenHigh, pCompact->m_CompactLen);
@@ -228,7 +235,7 @@
   int size = m_Buffer.GetSize();
   for (int i = 0; i < size; i++) {
     _CompactString* pKey = (_CompactString*)m_Buffer.GetAt(i);
-    if (pKey->m_CompactLen != 0xfe) {
+    if (pKey->m_CompactLen != kFreeLength) {
       return (FX_POSITION)(uintptr_t)(i + 1);
     }
   }
@@ -248,7 +255,7 @@
   int size = m_Buffer.GetSize();
   while (index < size) {
     pKey = (_CompactString*)m_Buffer.GetAt(index);
-    if (pKey->m_CompactLen != 0xfe) {
+    if (pKey->m_CompactLen != kFreeLength) {
       rNextPosition = (FX_POSITION)(uintptr_t)(index + 1);
       return;
     }
@@ -267,7 +274,7 @@
   int size = m_Buffer.GetSize();
   while (index < size) {
     pKey = (_CompactString*)m_Buffer.GetAt(index);
-    if (pKey->m_CompactLen != 0xfe) {
+    if (pKey->m_CompactLen != kFreeLength) {
       rNextPosition = (FX_POSITION)(uintptr_t)(index + 1);
       return rValue;
     }
@@ -304,7 +311,7 @@
   }
   for (int index = 0; index < size; index++) {
     _CompactString* pKey = (_CompactString*)m_Buffer.GetAt(index);
-    if (pKey->m_CompactLen) {
+    if (pKey->m_CompactLen != kFreeLength) {
       continue;
     }
     _CompactStringStore(pKey, key.GetPtr(), key_len);
@@ -331,7 +338,7 @@
       continue;
     }
     _CompactStringRelease(pKey);
-    pKey->m_CompactLen = 0xfe;
+    pKey->m_CompactLen = kFreeLength;
     return;
   }
 }
@@ -340,7 +347,7 @@
   int size = m_Buffer.GetSize();
   for (int i = 0; i < size; i++) {
     _CompactString* pKey = (_CompactString*)m_Buffer.GetAt(i);
-    if (pKey->m_CompactLen != 0xfe) {
+    if (pKey->m_CompactLen != kFreeLength) {
       count++;
     }
   }
