public CellElement getPointerWithPolicy(int policy) {

        if (m_pointers.size() == 0) {
           return null;
        }

        CellElement retCell = null;

        switch (policy) {
           case POINTER_POLICY_ANY:

              retCell = (CellElement) m_pointers.firstElement();
              break;

           case POINTER_POLICY_CLOCKWISE:

              // Clockwise:
              // 1. bottom
              // 2. diag
              // 3. left

              retCell = getPositionalPointer(POINTERPOS_BOTTOM);

              if (retCell == null) {
                 retCell = getPositionalPointer(POINTERPOS_DIAG);
              }

              if (retCell == null) {
                 retCell = getPositionalPointer(POINTERPOS_LEFT);
              }

              break;

           case POINTER_POLICY_COUNTERCLOCKWISE:

              // Clockwise:
              // 1. Left
              // 2. diag
              // 3. bottom
              retCell = getPositionalPointer(POINTERPOS_LEFT);

              if (retCell == null) {
                 retCell = getPositionalPointer(POINTERPOS_DIAG);
              }

              if (retCell == null) {
                 retCell = getPositionalPointer(POINTERPOS_BOTTOM);
              }

              break;

           case POINTER_POLICY_RANDOM:

              retCell = getPointer( (int) (Math.random() * m_pointers.size()));
        }

        return retCell;
   }