From f59eb3b2194826c73f56161497f4004b2313efa2 Mon Sep 17 00:00:00 2001 From: Max Horn Date: Thu, 5 Feb 2004 00:19:57 +0000 Subject: renamed (Const)Iterator to (const_)iterator; changed size() to return an uint svn-id: r12722 --- backends/dc/selector.cpp | 4 ++-- backends/fs/fs.h | 14 +++++++------- backends/wince/CELauncherDialog.cpp | 2 +- backends/wince/CEgui/Panel.cpp | 6 +++--- base/gameDetector.cpp | 8 ++++---- base/plugins.cpp | 6 +++--- common/config-manager.cpp | 8 ++++---- common/list.h | 14 +++++++------- common/map.h | 16 ++++++++-------- common/str.h | 2 +- gui/EditTextWidget.cpp | 4 ++-- gui/EditTextWidget.h | 1 - gui/ListWidget.cpp | 6 +++--- gui/ListWidget.h | 1 - gui/PopUpWidget.cpp | 2 +- gui/TabWidget.cpp | 8 ++++---- gui/browser.h | 3 +-- gui/chooser.h | 1 - gui/launcher.cpp | 6 +++--- gui/message.h | 6 +----- gui/newgui.cpp | 4 ++-- queen/queen.cpp | 2 +- scumm/scummvm.cpp | 2 +- simon/simon.cpp | 2 +- sky/sky.cpp | 2 +- sword1/sword1.cpp | 2 +- sword2/sword2.cpp | 2 +- 27 files changed, 63 insertions(+), 71 deletions(-) diff --git a/backends/dc/selector.cpp b/backends/dc/selector.cpp index 2b65a9e7cb..38f7ebf024 100644 --- a/backends/dc/selector.cpp +++ b/backends/dc/selector.cpp @@ -167,7 +167,7 @@ static const char *checkDetect(const FilesystemNode *entry) DetectedGameList candidates; const PluginList &plugins = PluginManager::instance().getPlugins(); - PluginList::ConstIterator iter = plugins.begin(); + PluginList::const_iterator iter = plugins.begin(); for (iter = plugins.begin(); iter != plugins.end(); ++iter) { candidates.push_back((*iter)->detectGames(files)); } @@ -278,7 +278,7 @@ static int findGames(Game *games, int max) dirs[curr_dir].deficon[0] = '\0'; FSList *fslist = dirs[curr_dir++].node->listDir(FilesystemNode::kListAll); if (fslist != NULL) { - for (FSList::ConstIterator entry = fslist->begin(); entry != fslist->end(); + for (FSList::const_iterator entry = fslist->begin(); entry != fslist->end(); ++entry) { if (entry->isDirectory()) { if(num_dirs < MAX_DIR && strcasecmp(entry->displayName().c_str(), diff --git a/backends/fs/fs.h b/backends/fs/fs.h index 36c7429828..45abea5192 100644 --- a/backends/fs/fs.h +++ b/backends/fs/fs.h @@ -151,14 +151,14 @@ public: */ class FSList : Common::List { public: - class ConstIterator { + class const_iterator { friend class FSList; FilesystemNode **_data; - ConstIterator(FilesystemNode **data) : _data(data) { } + const_iterator(FilesystemNode **data) : _data(data) { } public: const FilesystemNode &operator *() const { return **_data; } const FilesystemNode *operator->() const { return *_data; } - bool operator !=(const ConstIterator &iter) const { return _data != iter._data; } + bool operator !=(const const_iterator &iter) const { return _data != iter._data; } void operator ++() { ++_data; } }; @@ -187,12 +187,12 @@ public: int size() const { return _size; } - ConstIterator begin() const { - return ConstIterator(_data); + const_iterator begin() const { + return const_iterator(_data); } - ConstIterator end() const { - return ConstIterator(_data + _size); + const_iterator end() const { + return const_iterator(_data + _size); } }; diff --git a/backends/wince/CELauncherDialog.cpp b/backends/wince/CELauncherDialog.cpp index fc2d6d513f..7c432f5a20 100644 --- a/backends/wince/CELauncherDialog.cpp +++ b/backends/wince/CELauncherDialog.cpp @@ -99,7 +99,7 @@ void CELauncherDialog::automaticScanDirectory(const FilesystemNode *node) { addCandidate(node->path(), candidates); // Then recurse on the subdirectories FSList *dirs = node->listDir(FilesystemNode::kListDirectoriesOnly); - for (FSList::ConstIterator currentDir = dirs->begin(); currentDir != dirs->end(); ++currentDir) + for (FSList::const_iterator currentDir = dirs->begin(); currentDir != dirs->end(); ++currentDir) automaticScanDirectory(&(*currentDir)); } diff --git a/backends/wince/CEgui/Panel.cpp b/backends/wince/CEgui/Panel.cpp index d29f4004e2..2c7514af09 100644 --- a/backends/wince/CEgui/Panel.cpp +++ b/backends/wince/CEgui/Panel.cpp @@ -42,7 +42,7 @@ namespace CEGUI { } bool Panel::draw(SDL_Surface *surface) { - ItemMap::ConstIterator iterator; + ItemMap::const_iterator iterator; if (!_drawn && _visible) { GUIElement::draw(surface); for (iterator = _itemsMap.begin(); iterator != _itemsMap.end(); ++iterator) { @@ -55,14 +55,14 @@ namespace CEGUI { } void Panel::forceRedraw() { - ItemMap::ConstIterator iterator; + ItemMap::const_iterator iterator; GUIElement::forceRedraw(); for (iterator = _itemsMap.begin(); iterator != _itemsMap.end(); ++iterator) ((GUIElement*)(iterator->_value))->forceRedraw(); } bool Panel::action(int x, int y, bool pushed) { - ItemMap::ConstIterator iterator; + ItemMap::const_iterator iterator; bool result = false; if (!checkInside(x, y)) return false; diff --git a/base/gameDetector.cpp b/base/gameDetector.cpp index e59727d45d..9a7b9c7cdb 100644 --- a/base/gameDetector.cpp +++ b/base/gameDetector.cpp @@ -159,10 +159,10 @@ void listGames() { printf("Game ID Full Title \n" "-------------------- ------------------------------------------------------\n"); - PluginList::ConstIterator iter = plugins.begin(); + PluginList::const_iterator iter = plugins.begin(); for (iter = plugins.begin(); iter != plugins.end(); ++iter) { GameList list = (*iter)->getSupportedGames(); - for (GameList::Iterator v = list.begin(); v != list.end(); ++v) { + for (GameList::iterator v = list.begin(); v != list.end(); ++v) { printf("%-20s %s\n", v->name, v->description); } } @@ -176,7 +176,7 @@ void listTargets() { printf("Target Description \n" "-------------------- ------------------------------------------------------\n"); - ConfigManager::DomainMap::ConstIterator iter = domains.begin(); + ConfigManager::DomainMap::const_iterator iter = domains.begin(); for (iter = domains.begin(); iter != domains.end(); ++iter) { String name(iter->_key); String description(iter->_value.get("description")); @@ -196,7 +196,7 @@ GameSettings GameDetector::findGame(const String &gameName, const Plugin **plugi const PluginList &plugins = PluginManager::instance().getPlugins(); GameSettings result = {NULL, NULL, 0}; - PluginList::ConstIterator iter = plugins.begin(); + PluginList::const_iterator iter = plugins.begin(); for (iter = plugins.begin(); iter != plugins.end(); ++iter) { result = (*iter)->findGame(gameName.c_str()); if (result.name) { diff --git a/base/plugins.cpp b/base/plugins.cpp index ca2fd6136f..c106f52d69 100644 --- a/base/plugins.cpp +++ b/base/plugins.cpp @@ -53,7 +53,7 @@ GameSettings Plugin::findGame(const char *gameName) const { assert(gameName); GameList games = getSupportedGames(); GameSettings result = {NULL, NULL, 0}; - for (GameList::Iterator g = games.begin(); g != games.end(); ++g) { + for (GameList::iterator g = games.begin(); g != games.end(); ++g) { if (!scumm_stricmp(g->name, gameName)) { result = *g; break; @@ -254,7 +254,7 @@ void PluginManager::loadPlugins() { } void PluginManager::unloadPlugins() { - int i; + uint i; for (i = 0; i < _plugins.size(); i++) { _plugins[i]->unloadPlugin(); delete _plugins[i]; @@ -281,7 +281,7 @@ DetectedGameList PluginManager::detectGames(const FSList &fslist) const { // Iterate over all known games and for each check if it might be // the game in the presented directory. - PluginList::ConstIterator iter; + PluginList::const_iterator iter; for (iter = _plugins.begin(); iter != _plugins.end(); ++iter) { candidates.push_back((*iter)->detectGames(fslist)); } diff --git a/common/config-manager.cpp b/common/config-manager.cpp index 7f3f45d540..299d3c817e 100644 --- a/common/config-manager.cpp +++ b/common/config-manager.cpp @@ -171,7 +171,7 @@ void ConfigManager::flushToDisk() { if (!(cfg_file = fopen(_filename.c_str(), "w"))) { warning("Unable to write configuration file: %s.\n", _filename.c_str()); } else { - DomainMap::ConstIterator d; + DomainMap::const_iterator d; // First write the global domains for (d = _globalDomains.begin(); d != _globalDomains.end(); ++d) { @@ -193,7 +193,7 @@ void ConfigManager::writeDomain(FILE *file, const String &name, const Domain &do fprintf(file, "[%s]\n", name.c_str()); - Domain::ConstIterator x; + Domain::const_iterator x; for (x = domain.begin(); x != domain.end(); ++x) { const String &value = x->_value; if (!value.isEmpty()) @@ -218,7 +218,7 @@ bool ConfigManager::hasKey(const String &key) const { if (!_activeDomain.isEmpty() && _gameDomains[_activeDomain].contains(key)) return true; - DomainMap::ConstIterator iter; + DomainMap::const_iterator iter; for (iter = _globalDomains.begin(); iter != _globalDomains.end(); ++iter) { if (iter->_value.contains(key)) return true; @@ -273,7 +273,7 @@ const String & ConfigManager::get(const String &key, const String &domain) const if (!dom.isEmpty() && _gameDomains.contains(dom) && _gameDomains[dom].contains(key)) return _gameDomains[dom][key]; - DomainMap::ConstIterator iter; + DomainMap::const_iterator iter; for (iter = _globalDomains.begin(); iter != _globalDomains.end(); ++iter) { if (iter->_value.contains(key)) return iter->_value[key]; diff --git a/common/list.h b/common/list.h index c06008a8c9..b4fea866ff 100644 --- a/common/list.h +++ b/common/list.h @@ -34,8 +34,8 @@ protected: T *_data; public: - typedef T *Iterator; - typedef const T *ConstIterator; + typedef T *iterator; + typedef const T *const_iterator; public: List() : _capacity(0), _size(0), _data(0) {} @@ -103,7 +103,7 @@ public: return *this; } - int size() const { + uint size() const { return _size; } @@ -121,19 +121,19 @@ public: } - Iterator begin() { + iterator begin() { return _data; } - Iterator end() { + iterator end() { return _data + _size; } - ConstIterator begin() const { + const_iterator begin() const { return _data; } - ConstIterator end() const { + const_iterator end() const { return _data + _size; } diff --git a/common/map.h b/common/map.h index f1fb3c398e..8f08b79b58 100644 --- a/common/map.h +++ b/common/map.h @@ -68,19 +68,19 @@ private: Map &operator =(const Map &map); public: - class ConstIterator { + class const_iterator { friend class Map; protected: Node *_node; - ConstIterator(Node *node) : _node(node) {} + const_iterator(Node *node) : _node(node) {} public: - ConstIterator() : _node(0) {} + const_iterator() : _node(0) {} Node &operator *() { assert(_node != 0); return *_node; } const Node &operator *() const { assert(_node != 0); return *_node; } const Node *operator->() const { assert(_node != 0); return _node; } - bool operator !=(const ConstIterator &iter) const { return _node != iter._node; } + bool operator !=(const const_iterator &iter) const { return _node != iter._node; } void operator ++() { if (!_node) return; @@ -203,17 +203,17 @@ public: merge(map._root); } - ConstIterator begin() const { + const_iterator begin() const { Node *node = _root; if (node) { while (node->_left) node = node->_left; } - return ConstIterator(node); + return const_iterator(node); } - ConstIterator end() const { - return ConstIterator(); + const_iterator end() const { + return const_iterator(); } protected: diff --git a/common/str.h b/common/str.h index e47fb8f8c1..2534dabd90 100644 --- a/common/str.h +++ b/common/str.h @@ -67,7 +67,7 @@ public: } const char *c_str() const { return _str ? _str : ""; } - int size() const { return _len; } + uint size() const { return _len; } bool isEmpty() const { return (_len == 0); } }; diff --git a/gui/EditTextWidget.cpp b/gui/EditTextWidget.cpp index dd451870a5..daa0bfd5b0 100644 --- a/gui/EditTextWidget.cpp +++ b/gui/EditTextWidget.cpp @@ -59,7 +59,7 @@ void EditTextWidget::handleMouseDown(int x, int y, int button, int clickCount){ x += _labelOffset; int width = 0; - int i; + uint i; for (i = 0; i < _label.size(); ++i) { width += gui->getCharWidth(_label[i]); @@ -112,7 +112,7 @@ bool EditTextWidget::handleKeyDown(uint16 ascii, int keycode, int modifiers) { } break; case 256 + 19: // right arrow - if (_pos < _label.size()) { + if (_pos < (int)_label.size()) { _pos++; dirty = adjustOffset(); } diff --git a/gui/EditTextWidget.h b/gui/EditTextWidget.h index ccbc49c83b..505982743d 100644 --- a/gui/EditTextWidget.h +++ b/gui/EditTextWidget.h @@ -23,7 +23,6 @@ #include "gui/widget.h" #include "common/str.h" -#include "common/list.h" namespace GUI { diff --git a/gui/ListWidget.cpp b/gui/ListWidget.cpp index afd7d37b15..aba5abcd23 100644 --- a/gui/ListWidget.cpp +++ b/gui/ListWidget.cpp @@ -97,7 +97,7 @@ void ListWidget::handleMouseDown(int x, int y, int button, int clickCount) { if (isEnabled()) { int oldSelectedItem = _selectedItem; _selectedItem = (y - 1) / kLineHeight + _currentPos; - if (_selectedItem > _list.size() - 1) + if (_selectedItem > (int)_list.size() - 1) _selectedItem = -1; if (oldSelectedItem != _selectedItem) { @@ -183,7 +183,7 @@ bool ListWidget::handleKeyDown(uint16 ascii, int keycode, int modifiers) { _selectedItem--; break; case 256+18: // down arrow - if (_selectedItem < _list.size() - 1) + if (_selectedItem < (int)_list.size() - 1) _selectedItem++; break; case 256+24: // pageup @@ -193,7 +193,7 @@ bool ListWidget::handleKeyDown(uint16 ascii, int keycode, int modifiers) { break; case 256+25: // pagedown _selectedItem += _entriesPerPage - 1; - if (_selectedItem >= _list.size() ) + if (_selectedItem >= (int)_list.size() ) _selectedItem = _list.size() - 1; break; case 256+22: // home diff --git a/gui/ListWidget.h b/gui/ListWidget.h index 5522972a24..5a7827c57f 100644 --- a/gui/ListWidget.h +++ b/gui/ListWidget.h @@ -23,7 +23,6 @@ #include "gui/widget.h" #include "common/str.h" -#include "common/list.h" namespace GUI { diff --git a/gui/PopUpWidget.cpp b/gui/PopUpWidget.cpp index 34fce93b31..9527db6491 100644 --- a/gui/PopUpWidget.cpp +++ b/gui/PopUpWidget.cpp @@ -307,7 +307,7 @@ void PopUpWidget::clearEntries() { void PopUpWidget::setSelected(int item) { // FIXME if (item != _selectedItem) { - if (item >= 0 && item < _entries.size()) { + if (item >= 0 && item < (int)_entries.size()) { _selectedItem = item; } else { _selectedItem = -1; diff --git a/gui/TabWidget.cpp b/gui/TabWidget.cpp index dc39d2a624..c914515adf 100644 --- a/gui/TabWidget.cpp +++ b/gui/TabWidget.cpp @@ -45,7 +45,7 @@ TabWidget::TabWidget(GuiObject *boss, int x, int y, int w, int h) } TabWidget::~TabWidget() { - for (int i = 0; i < _tabs.size(); ++i) { + for (uint i = 0; i < _tabs.size(); ++i) { delete _tabs[i].firstWidget; _tabs[i].firstWidget = 0; } @@ -81,7 +81,7 @@ int TabWidget::addTab(const String &title) { } void TabWidget::setActiveTab(int tabID) { - assert(0 <= tabID && tabID < _tabs.size()); + assert(0 <= tabID && tabID < (int)_tabs.size()); if (_activeTab != tabID) { // Exchange the widget lists, and switch to the new tab if (_activeTab != -1) @@ -101,7 +101,7 @@ void TabWidget::handleMouseDown(int x, int y, int button, int clickCount) { x -= kTabLeftOffset; if (x >= 0 && x % (_tabWidth + kTabSpacing) < _tabWidth) { tabID = x / (_tabWidth + kTabSpacing); - if (tabID >= _tabs.size()) + if (tabID >= (int)_tabs.size()) tabID = -1; } @@ -126,7 +126,7 @@ void TabWidget::drawWidget(bool hilite) { // Iterate over all tabs and draw them int i, x = _x + kTabLeftOffset; - for (i = 0; i < _tabs.size(); ++i) { + for (i = 0; i < (int)_tabs.size(); ++i) { NewGuiColor color = (i == _activeTab) ? gui->_color : gui->_shadowcolor; int yOffset = (i == _activeTab) ? 0 : 2; gui->box(x, _y + yOffset, _tabWidth, kTabHeight - yOffset, color, color); diff --git a/gui/browser.h b/gui/browser.h index a6dd191764..10940fd94c 100644 --- a/gui/browser.h +++ b/gui/browser.h @@ -21,9 +21,8 @@ #ifndef BROWSER_DIALOG_H #define BROWSER_DIALOG_H -#include "dialog.h" +#include "gui/dialog.h" #include "common/str.h" -#include "common/list.h" #ifdef MACOSX #include diff --git a/gui/chooser.h b/gui/chooser.h index b79b138c8e..d2b84d64e0 100644 --- a/gui/chooser.h +++ b/gui/chooser.h @@ -22,7 +22,6 @@ #define CHOOSER_DIALOG_H #include "common/str.h" -#include "common/list.h" #include "gui/dialog.h" namespace GUI { diff --git a/gui/launcher.cpp b/gui/launcher.cpp index 2510eb7a52..2a53406536 100644 --- a/gui/launcher.cpp +++ b/gui/launcher.cpp @@ -356,7 +356,7 @@ void LauncherDialog::updateListing() { // Retrieve a list of all games defined in the config file _domains.clear(); const ConfigManager::DomainMap &domains = ConfMan.getGameDomains(); - ConfigManager::DomainMap::ConstIterator iter = domains.begin(); + ConfigManager::DomainMap::const_iterator iter = domains.begin(); for (iter = domains.begin(); iter != domains.end(); ++iter) { String name(iter->_value.get("gameid")); String description(iter->_value.get("description")); @@ -417,14 +417,14 @@ void LauncherDialog::addGame() { } else { // Display the candidates to the user and let her/him pick one StringList list; - for (idx = 0; idx < candidates.size(); idx++) + for (idx = 0; idx < (int)candidates.size(); idx++) list.push_back(candidates[idx].description); ChooserDialog dialog("Pick the game:"); dialog.setList(list); idx = dialog.runModal(); } - if (0 <= idx && idx < candidates.size()) { + if (0 <= idx && idx < (int)candidates.size()) { DetectedGame result = candidates[idx]; // The auto detector or the user made a choice. diff --git a/gui/message.h b/gui/message.h index 7760622bea..30a2c6bfa0 100644 --- a/gui/message.h +++ b/gui/message.h @@ -22,11 +22,7 @@ #define MESSAGE_DIALOG_H #include "gui/dialog.h" - -namespace Common { - class String; - class StringList; -} +#include "common/str.h" namespace GUI { diff --git a/gui/newgui.cpp b/gui/newgui.cpp index ed60deb024..1745ee3838 100644 --- a/gui/newgui.cpp +++ b/gui/newgui.cpp @@ -459,7 +459,7 @@ void NewGui::drawChar(byte chr, int xx, int yy, NewGuiColor color) { int NewGui::getStringWidth(const String &str) { int space = 0; - for (int i = 0; i < str.size(); ++i) + for (uint i = 0; i < str.size(); ++i) space += getCharWidth(str[i]); return space; } @@ -483,7 +483,7 @@ int NewGui::getCharWidth(byte c) { void NewGui::drawString(const String &s, int x, int y, int w, NewGuiColor color, int align, int deltax, bool useEllipsis) { const int leftX = x, rightX = x + w; - int i; + uint i; int width = getStringWidth(s); String str; diff --git a/queen/queen.cpp b/queen/queen.cpp index 628c7079de..8e105126bc 100644 --- a/queen/queen.cpp +++ b/queen/queen.cpp @@ -69,7 +69,7 @@ DetectedGameList Engine_QUEEN_detectGames(const FSList &fslist) { DetectedGameList detectedGames; // Iterate over all files in the given directory - for (FSList::ConstIterator file = fslist.begin(); file != fslist.end(); ++file) { + for (FSList::const_iterator file = fslist.begin(); file != fslist.end(); ++file) { const char *gameName = file->displayName().c_str(); if (0 == scumm_stricmp("queen.1", gameName) || 0 == scumm_stricmp("queen.1c", gameName)) { diff --git a/scumm/scummvm.cpp b/scumm/scummvm.cpp index 02710b9d08..3051fe9600 100644 --- a/scumm/scummvm.cpp +++ b/scumm/scummvm.cpp @@ -2914,7 +2914,7 @@ DetectedGameList Engine_SCUMM_detectGames(const FSList &fslist) { } // Iterate over all files in the given directory - for (FSList::ConstIterator file = fslist.begin(); file != fslist.end(); ++file) { + for (FSList::const_iterator file = fslist.begin(); file != fslist.end(); ++file) { const char *name = file->displayName().c_str(); if ((0 == scumm_stricmp(detectName, name)) || diff --git a/simon/simon.cpp b/simon/simon.cpp index 95eab95924..0705c37a19 100644 --- a/simon/simon.cpp +++ b/simon/simon.cpp @@ -98,7 +98,7 @@ DetectedGameList Engine_SIMON_detectGames(const FSList &fslist) { strcat(detectName2, "."); // Iterate over all files in the given directory - for (FSList::ConstIterator file = fslist.begin(); file != fslist.end(); ++file) { + for (FSList::const_iterator file = fslist.begin(); file != fslist.end(); ++file) { const char *name = file->displayName().c_str(); if ((0 == scumm_stricmp(detectName, name)) || diff --git a/sky/sky.cpp b/sky/sky.cpp index 57e7e7d4ae..08d7b40c1c 100644 --- a/sky/sky.cpp +++ b/sky/sky.cpp @@ -88,7 +88,7 @@ GameList Engine_SKY_gameList() { DetectedGameList Engine_SKY_detectGames(const FSList &fslist) { DetectedGameList detectedGames; // Iterate over all files in the given directory - for (FSList::ConstIterator file = fslist.begin(); file != fslist.end(); ++file) { + for (FSList::const_iterator file = fslist.begin(); file != fslist.end(); ++file) { const char *fileName = file->displayName().c_str(); if (0 == scumm_stricmp("sky.dsk", fileName)) { diff --git a/sword1/sword1.cpp b/sword1/sword1.cpp index a59025521c..13927327c8 100644 --- a/sword1/sword1.cpp +++ b/sword1/sword1.cpp @@ -57,7 +57,7 @@ DetectedGameList Engine_SWORD1_detectGames(const FSList &fslist) { DetectedGameList detectedGames; // Iterate over all files in the given directory - for (FSList::ConstIterator file = fslist.begin(); file != fslist.end(); ++file) { + for (FSList::const_iterator file = fslist.begin(); file != fslist.end(); ++file) { const char *gameName = file->displayName().c_str(); if ((0 == scumm_stricmp("swordres.rif", gameName)) || diff --git a/sword2/sword2.cpp b/sword2/sword2.cpp index 0d69d6720d..5d6a092014 100644 --- a/sword2/sword2.cpp +++ b/sword2/sword2.cpp @@ -68,7 +68,7 @@ DetectedGameList Engine_SWORD2_detectGames(const FSList &fslist) { for (g = sword2_settings; g->name; ++g) { // Iterate over all files in the given directory - for (FSList::ConstIterator file = fslist.begin(); file != fslist.end(); ++file) { + for (FSList::const_iterator file = fslist.begin(); file != fslist.end(); ++file) { const char *gameName = file->displayName().c_str(); if (0 == scumm_stricmp(g->detectname, gameName)) { -- cgit v1.2.3