summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog20
-rw-r--r--src/gui/button.cpp60
-rw-r--r--src/gui/button.h7
-rw-r--r--src/gui/checkbox.cpp6
-rw-r--r--src/gui/equipmentwindow.cpp4
-rw-r--r--src/gui/itemcontainer.cpp4
-rw-r--r--src/gui/linkhandler.h2
-rw-r--r--src/gui/minimap.cpp4
-rw-r--r--src/gui/radiobutton.cpp2
-rw-r--r--src/gui/scrollarea.cpp16
-rw-r--r--src/gui/slider.cpp12
-rw-r--r--src/gui/textfield.cpp2
-rw-r--r--src/gui/updatewindow.cpp17
-rw-r--r--src/gui/updatewindow.h5
-rw-r--r--src/gui/viewport.cpp2
-rw-r--r--src/gui/windowlistener.h4
-rw-r--r--src/logindata.h2
-rw-r--r--src/particle.cpp2
-rw-r--r--src/particle.h3
-rw-r--r--src/resources/monsterdb.h2
-rw-r--r--src/resources/monsterinfo.cpp10
-rw-r--r--src/sound.cpp16
-rw-r--r--src/sound.h5
-rw-r--r--src/utils/trim.h2
24 files changed, 120 insertions, 89 deletions
diff --git a/ChangeLog b/ChangeLog
index 8bc7efdf..92a283d8 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -275,6 +275,17 @@
src/CMakeLists.txt: Switch to upstream CMake modules for libxml2 and
curl.
+2007-07-27 Guillaume Melquiond <guillaume.melquiond@gmail.com>
+
+ * src/resources/image.cpp: Added support for subimages of subimages.
+ * src/gui/equipmentwindow.cpp, src/gui/button.cpp, src/gui/slider.cpp,
+ src/gui/widgets/resizegrip.cpp, src/gui/widgets/dropdown.cpp,
+ src/gui/progressbar.cpp, src/gui/browserbox.cpp, src/gui/gui.cpp,
+ src/gui/radiobutton.cpp, src/gui/textfield.cpp, src/gui/playerbox.cpp,
+ src/gui/itemcontainer.cpp, src/gui/checkbox.cpp, src/gui/minimap.cpp,
+ src/gui/scrollarea.cpp, src/gui/popupmenu.cpp: Removed useless yet
+ costly dynamic casts.
+
2007-07-25 Joshua Langley <joshlangley[at]optusnet.com.au>
* src/gui/setup.cpp, src/gui/setup_keyboard.cpp,
@@ -1638,6 +1649,11 @@
src/player.h, src/being.cpp, src/being.h, data/items.xml: Added scythe
as a permanent weapon (ID: 623)
+2006-11-04 Björn Steinbrink <B.Steinbrink@gmx.de>
+
+ * src/gui/updatewindow.cpp, src/gui/updatewindow.h: Removed useless
+ addRow method.
+
2006-11-04 Bjørn Lindeijer <bjorn@lindeijer.nl>
* data/maps/new_1-1.tmx.gz, data/maps/new_10-1.tmx.gz,
@@ -2441,10 +2457,6 @@
* data/graphics/sprites/item003.png, data/graphics/sprites/item003.xml:
Added the leather shirt
-2007-07-25 Guillaume Melquiond <guillaume.melquiond@gmail.com>
-
- * src/resources/image.cpp: Added support for subimages of subimages.
-
2006-07-25 Bjørn Lindeijer <bjorn@lindeijer.nl>
* src/log.cpp, src/log.h: Added support for writing log to standard
diff --git a/src/gui/button.cpp b/src/gui/button.cpp
index a9212e83..0379ebc0 100644
--- a/src/gui/button.cpp
+++ b/src/gui/button.cpp
@@ -34,9 +34,32 @@
#include "../utils/dtor.h"
-ImageRect Button::button[4];
int Button::mInstances = 0;
+enum{
+ BUTTON_STANDARD, // 0
+ BUTTON_HIGHLIGHTED, // 1
+ BUTTON_PRESSED, // 2
+ BUTTON_DISABLED, // 3
+ BUTTON_COUNT // 4 - Must be last.
+};
+
+struct ButtonData
+{
+ char const *file;
+ int gridX;
+ int gridY;
+};
+
+static ButtonData const data[BUTTON_COUNT] = {
+ {"graphics/gui/button.png", 0, 0},
+ {"graphics/gui/buttonhi.png", 9, 4},
+ {"graphics/gui/buttonpress.png", 16, 19},
+ {"graphics/gui/button_disabled.png", 25, 23}
+};
+
+ImageRect Button::button[BUTTON_COUNT];
+
Button::Button():
mIsLogged(false)
{
@@ -63,24 +86,20 @@ void Button::init()
{
// Load the skin
ResourceManager *resman = ResourceManager::getInstance();
- Image *btn[4];
- btn[0] = resman->getImage("graphics/gui/button.png");
- btn[1] = resman->getImage("graphics/gui/buttonhi.png");
- btn[2] = resman->getImage("graphics/gui/buttonpress.png");
- btn[3] = resman->getImage("graphics/gui/button_disabled.png");
- int bgridx[4] = {0, 9, 16, 25};
- int bgridy[4] = {0, 4, 19, 24};
+ Image *btn[BUTTON_COUNT];
+
int a, x, y, mode;
- for (mode = 0; mode < 4; mode++)
+ for (mode = 0; mode < BUTTON_COUNT; mode++)
{
+ btn[mode] = resman->getImage(data[mode].file);
a = 0;
for (y = 0; y < 3; y++) {
for (x = 0; x < 3; x++) {
button[mode].grid[a] = btn[mode]->getSubImage(
- bgridx[x], bgridy[y],
- bgridx[x + 1] - bgridx[x] + 1,
- bgridy[y + 1] - bgridy[y] + 1);
+ data[x].gridX, data[y].gridY,
+ data[x + 1].gridX - data[x].gridX + 1,
+ data[y + 1].gridY - data[y].gridY + 1);
a++;
}
}
@@ -96,7 +115,7 @@ Button::~Button()
if (mInstances == 0)
{
- for (int mode = 0; mode < 4; mode++)
+ for (int mode = 0; mode < BUTTON_COUNT; mode++)
{
for_each(button[mode].grid, button[mode].grid + 9, dtor<Image*>());
}
@@ -109,21 +128,20 @@ Button::draw(gcn::Graphics *graphics)
int mode;
if (!isEnabled()) {
- mode = 3;
+ mode = BUTTON_DISABLED;
}
else if (isPressed() || mIsLogged) {
- mode = 2;
+ mode = BUTTON_PRESSED;
}
- else if (mHasMouse) {
- mode = 1;
+ else if (mHasMouse || isFocused()) {
+ mode = BUTTON_HIGHLIGHTED;
}
else {
- mode = 0;
+ mode = BUTTON_STANDARD;
}
- dynamic_cast<Graphics*>(graphics)->drawImageRect(0, 0,
- getWidth(), getHeight(),
- button[mode]);
+ static_cast<Graphics*>(graphics)->
+ drawImageRect(0, 0, getWidth(), getHeight(), button[mode]);
graphics->setColor(getForegroundColor());
diff --git a/src/gui/button.h b/src/gui/button.h
index 68831d5a..d12173b2 100644
--- a/src/gui/button.h
+++ b/src/gui/button.h
@@ -37,9 +37,14 @@ class ImageRect;
*/
class Button : public gcn::Button {
public:
+ /**
+ * Default constructor.
+ */
Button();
+
/**
- * Constructor, sets the caption of the button to the given string.
+ * Constructor, sets the caption of the button to the given string and
+ * adds the given action listener.
*/
Button(const std::string& caption, const std::string &actionEventId,
gcn::ActionListener *listener);
diff --git a/src/gui/checkbox.cpp b/src/gui/checkbox.cpp
index ec7eb578..fab4780c 100644
--- a/src/gui/checkbox.cpp
+++ b/src/gui/checkbox.cpp
@@ -66,7 +66,7 @@ CheckBox::~CheckBox()
void CheckBox::drawBox(gcn::Graphics* graphics)
{
- Image *box = NULL;
+ Image *box;
if (mMarked) {
if (isEnabled()) {
@@ -80,7 +80,5 @@ void CheckBox::drawBox(gcn::Graphics* graphics)
box = checkBoxDisabled;
}
- if (box != NULL) {
- dynamic_cast<Graphics*>(graphics)->drawImage(box, 2, 2);
- }
+ static_cast<Graphics*>(graphics)->drawImage(box, 2, 2);
}
diff --git a/src/gui/equipmentwindow.cpp b/src/gui/equipmentwindow.cpp
index 78727ff8..4df18b19 100644
--- a/src/gui/equipmentwindow.cpp
+++ b/src/gui/equipmentwindow.cpp
@@ -66,7 +66,7 @@ void EquipmentWindow::draw(gcn::Graphics *graphics)
}
image = item->getInfo().getImage();
- dynamic_cast<Graphics*>(graphics)->drawImage(
+ static_cast<Graphics*>(graphics)->drawImage(
image, 36 * (i % 4) + 10, 36 * (i / 4) + 25);
}
@@ -78,7 +78,7 @@ void EquipmentWindow::draw(gcn::Graphics *graphics)
image = item->getInfo().getImage();
- dynamic_cast<Graphics*>(graphics)->drawImage(image, 160, 25);
+ static_cast<Graphics*>(graphics)->drawImage(image, 160, 25);
graphics->drawText(toString(item->getQuantity()), 170, 62,
gcn::Graphics::CENTER);
}
diff --git a/src/gui/itemcontainer.cpp b/src/gui/itemcontainer.cpp
index 43de8db3..0e203905 100644
--- a/src/gui/itemcontainer.cpp
+++ b/src/gui/itemcontainer.cpp
@@ -110,7 +110,7 @@ ItemContainer::draw(gcn::Graphics *graphics)
// Draw selection image below selected item
if (mSelectedItem == item)
{
- dynamic_cast<Graphics*>(graphics)->drawImage(
+ static_cast<Graphics*>(graphics)->drawImage(
mSelImg, itemX, itemY);
}
@@ -118,7 +118,7 @@ ItemContainer::draw(gcn::Graphics *graphics)
Image* image;
if ((image = item->getInfo().getImage()) != NULL)
{
- dynamic_cast<Graphics*>(graphics)->drawImage(
+ static_cast<Graphics*>(graphics)->drawImage(
image, itemX, itemY);
}
diff --git a/src/gui/linkhandler.h b/src/gui/linkhandler.h
index 33416ec7..3a32f825 100644
--- a/src/gui/linkhandler.h
+++ b/src/gui/linkhandler.h
@@ -24,6 +24,8 @@
#ifndef _TMW_LINK_HANDLER_H_
#define _TMW_LINK_HANDLER_H_
+#include <string>
+
/**
* A simple interface to windows that need to handle links from BrowserBox
* widget.
diff --git a/src/gui/minimap.cpp b/src/gui/minimap.cpp
index 69c5eb6e..2720225d 100644
--- a/src/gui/minimap.cpp
+++ b/src/gui/minimap.cpp
@@ -72,8 +72,8 @@ void Minimap::draw(gcn::Graphics *graphics)
if (mMapImage != NULL)
{
- dynamic_cast<Graphics*>(graphics)->drawImage(
- mMapImage, getPadding(), getTitleBarHeight());
+ static_cast<Graphics*>(graphics)->
+ drawImage(mMapImage, getPadding(), getTitleBarHeight());
}
Beings &beings = beingManager->getAll();
diff --git a/src/gui/radiobutton.cpp b/src/gui/radiobutton.cpp
index bbebe48f..e318116a 100644
--- a/src/gui/radiobutton.cpp
+++ b/src/gui/radiobutton.cpp
@@ -80,6 +80,6 @@ void RadioButton::drawBox(gcn::Graphics* graphics)
}
if (box != NULL) {
- dynamic_cast<Graphics*>(graphics)->drawImage(box, 2, 2);
+ static_cast<Graphics*>(graphics)->drawImage(box, 2, 2);
}
}
diff --git a/src/gui/scrollarea.cpp b/src/gui/scrollarea.cpp
index 903ec95d..816f94a8 100644
--- a/src/gui/scrollarea.cpp
+++ b/src/gui/scrollarea.cpp
@@ -228,8 +228,8 @@ void ScrollArea::drawBorder(gcn::Graphics *graphics)
int h = getHeight() + bs * 2;
if (mOpaque) {
- dynamic_cast<Graphics*>(graphics)->drawImageRect(0, 0, w, h,
- background);
+ static_cast<Graphics*>(graphics)->
+ drawImageRect(0, 0, w, h, background);
}
}
@@ -269,8 +269,8 @@ void ScrollArea::drawButton(gcn::Graphics *graphics, BUTTON_DIR dir)
break;
}
- dynamic_cast<Graphics*>(graphics)->drawImage(
- buttons[dir][state], dim.x, dim.y);
+ static_cast<Graphics*>(graphics)->
+ drawImage(buttons[dir][state], dim.x, dim.y);
}
void ScrollArea::drawUpButton(gcn::Graphics *graphics)
@@ -313,14 +313,14 @@ void ScrollArea::drawVMarker(gcn::Graphics *graphics)
{
gcn::Rectangle dim = getVerticalMarkerDimension();
- dynamic_cast<Graphics*>(graphics)->drawImageRect(
- dim.x, dim.y, dim.width, dim.height, vMarker);
+ static_cast<Graphics*>(graphics)->
+ drawImageRect(dim.x, dim.y, dim.width, dim.height, vMarker);
}
void ScrollArea::drawHMarker(gcn::Graphics *graphics)
{
gcn::Rectangle dim = getHorizontalMarkerDimension();
- dynamic_cast<Graphics*>(graphics)->drawImageRect(
- dim.x, dim.y, dim.width, dim.height, vMarker);
+ static_cast<Graphics*>(graphics)->
+ drawImageRect(dim.x, dim.y, dim.width, dim.height, vMarker);
}
diff --git a/src/gui/slider.cpp b/src/gui/slider.cpp
index 98efc409..f0170a1b 100644
--- a/src/gui/slider.cpp
+++ b/src/gui/slider.cpp
@@ -109,22 +109,22 @@ void Slider::draw(gcn::Graphics *graphics)
int x = 0;
int y = (h - hStart->getHeight()) / 2;
- dynamic_cast<Graphics*>(graphics)->drawImage(hStart, x, y);
+ static_cast<Graphics*>(graphics)->drawImage(hStart, x, y);
w -= hStart->getWidth() + hEnd->getWidth();
x += hStart->getWidth();
- dynamic_cast<Graphics*>(graphics)->drawImagePattern(
- hMid, x, y, w, hMid->getHeight());
+ static_cast<Graphics*>(graphics)->
+ drawImagePattern(hMid, x, y, w, hMid->getHeight());
x += w;
- dynamic_cast<Graphics*>(graphics)->drawImage(hEnd, x, y);
+ static_cast<Graphics*>(graphics)->drawImage(hEnd, x, y);
drawMarker(graphics);
}
void Slider::drawMarker(gcn::Graphics *graphics)
{
- dynamic_cast<Graphics*>(graphics)->drawImage(hGrip,
- getMarkerPosition(), (getHeight() - hGrip->getHeight()) / 2);
+ static_cast<Graphics*>(graphics)->
+ drawImage(hGrip, getMarkerPosition(), (getHeight() - hGrip->getHeight()) / 2);
}
diff --git a/src/gui/textfield.cpp b/src/gui/textfield.cpp
index adf41a9a..ce7f6d5f 100644
--- a/src/gui/textfield.cpp
+++ b/src/gui/textfield.cpp
@@ -98,5 +98,5 @@ void TextField::drawBorder(gcn::Graphics *graphics)
w = getWidth() + bs * 2;
h = getHeight() + bs * 2;
- dynamic_cast<Graphics*>(graphics)->drawImageRect(0, 0, w, h, skin);
+ static_cast<Graphics*>(graphics)->drawImageRect(0, 0, w, h, skin);
}
diff --git a/src/gui/updatewindow.cpp b/src/gui/updatewindow.cpp
index 183adc93..73dbd604 100644
--- a/src/gui/updatewindow.cpp
+++ b/src/gui/updatewindow.cpp
@@ -211,12 +211,6 @@ void UpdaterWindow::loadNews()
mScrollArea->setVerticalScrollAmount(0);
}
-void UpdaterWindow::addRow(const std::string &row)
-{
- mBrowserBox->addRow(row);
- mScrollArea->setVerticalScrollAmount(mScrollArea->getVerticalMaxScroll());
-}
-
int UpdaterWindow::updateProgress(void *ptr,
double dt, double dn, double ut, double un)
{
@@ -418,11 +412,12 @@ void UpdaterWindow::logic()
}
mThread = NULL;
}
- addRow("");
- addRow("##1 The update process is incomplete.");
- addRow("##1 It is strongly recommended that");
- addRow("##1 you try again later");
- addRow(mCurlError);
+ mBrowserBox->addRow("");
+ mBrowserBox->addRow("##1 The update process is incomplete.");
+ mBrowserBox->addRow("##1 It is strongly recommended that");
+ mBrowserBox->addRow("##1 you try again later");
+ mBrowserBox->addRow(mCurlError);
+ mScrollArea->setVerticalScrollAmount(mScrollArea->getVerticalMaxScroll());
mDownloadStatus = UPDATE_COMPLETE;
break;
case UPDATE_NEWS:
diff --git a/src/gui/updatewindow.h b/src/gui/updatewindow.h
index adc96078..b5f6a6df 100644
--- a/src/gui/updatewindow.h
+++ b/src/gui/updatewindow.h
@@ -81,11 +81,6 @@ class UpdaterWindow : public Window, public gcn::ActionListener
void action(const gcn::ActionEvent &event);
- /**
- * Add a row to the message field.
- */
- void addRow(const std::string &row);
-
void logic();
int updateState;
diff --git a/src/gui/viewport.cpp b/src/gui/viewport.cpp
index 4c64c627..a39db509 100644
--- a/src/gui/viewport.cpp
+++ b/src/gui/viewport.cpp
@@ -309,7 +309,7 @@ Viewport::drawTargetCursor(Graphics *graphics)
int rangeY = abs(target->mY - player_node->mY);
int attackRange = player_node->getAttackRange();
- // get the correct target cursors graphic
+ // Get the correct target cursors graphic
Being::TargetCursorSize cursorSize = target->getTargetCursorSize();
Image* targetCursor;
if (rangeX > attackRange || rangeY > attackRange)
diff --git a/src/gui/windowlistener.h b/src/gui/windowlistener.h
index 08aab71d..24f6a7b8 100644
--- a/src/gui/windowlistener.h
+++ b/src/gui/windowlistener.h
@@ -73,12 +73,12 @@ class WindowListener
/**
* Called whenever the window is moved.
*/
- virtual void windowMoved(const WindowEvent &event) {}
+ virtual void windowMoved(const WindowEvent &) {}
/**
* Called whenever the window is resized.
*/
- virtual void windowResized(const WindowEvent &event) {}
+ virtual void windowResized(const WindowEvent &) {}
};
typedef std::list<WindowListener*> WindowListeners;
diff --git a/src/logindata.h b/src/logindata.h
index 1ee9927d..8513428f 100644
--- a/src/logindata.h
+++ b/src/logindata.h
@@ -24,6 +24,8 @@
#ifndef _TMW_LOGINDATA_H
#define _TMW_LOGINDATA_H
+#include <string>
+
struct LoginData
{
std::string username;
diff --git a/src/particle.cpp b/src/particle.cpp
index 148bbf6f..cdd6af41 100644
--- a/src/particle.cpp
+++ b/src/particle.cpp
@@ -81,6 +81,8 @@ Particle::setupEngine()
logger->log("Particle engine set up");
}
+void Particle::draw(Graphics *, int, int) const {}
+
bool
Particle::update()
{
diff --git a/src/particle.h b/src/particle.h
index dd7c5ee2..045ab9b9 100644
--- a/src/particle.h
+++ b/src/particle.h
@@ -89,8 +89,7 @@ class Particle : public Sprite
/**
* Draws the particle image.
*/
- virtual void
- draw(Graphics *graphics, int offsetX, int offsetY) const {}
+ virtual void draw(Graphics *graphics, int offsetX, int offsetY) const;
/**
* Necessary for sorting with the other sprites.
diff --git a/src/resources/monsterdb.h b/src/resources/monsterdb.h
index f0cd7d08..46a33b06 100644
--- a/src/resources/monsterdb.h
+++ b/src/resources/monsterdb.h
@@ -18,7 +18,7 @@
* along with The Mana World; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
- * $Id:
+ * $Id$
*/
#ifndef _TMW_MONSTER_DB_H
diff --git a/src/resources/monsterinfo.cpp b/src/resources/monsterinfo.cpp
index 7b7bad70..9b841058 100644
--- a/src/resources/monsterinfo.cpp
+++ b/src/resources/monsterinfo.cpp
@@ -33,15 +33,15 @@ MonsterInfo::MonsterInfo():
MonsterInfo::~MonsterInfo()
{
- //kill vectors in mSoundEffects
- for_each ( mSounds.begin(), mSounds.end(),
- make_dtor(mSounds));
+ // kill vectors in mSoundEffects
+ for_each (mSounds.begin(), mSounds.end(),
+ make_dtor(mSounds));
mSounds.clear();
}
void
-MonsterInfo::addSound (MonsterSoundEvent event, std::string filename)
+MonsterInfo::addSound(MonsterSoundEvent event, std::string filename)
{
if (mSounds.find(event) == mSounds.end())
{
@@ -53,7 +53,7 @@ MonsterInfo::addSound (MonsterSoundEvent event, std::string filename)
std::string
-MonsterInfo::getSound (MonsterSoundEvent event) const
+MonsterInfo::getSound(MonsterSoundEvent event) const
{
std::map<MonsterSoundEvent, std::vector<std::string>* >::const_iterator i;
diff --git a/src/sound.cpp b/src/sound.cpp
index 8ba8fe99..cf77cfab 100644
--- a/src/sound.cpp
+++ b/src/sound.cpp
@@ -126,7 +126,7 @@ void Sound::setSfxVolume(int volume)
Mix_Volume(-1, volume);
}
-void Sound::playMusic(const char *path, int loop)
+void Sound::playMusic(const std::string &path, int loop)
{
if (!mInstalled) return;
@@ -134,9 +134,10 @@ void Sound::playMusic(const char *path, int loop)
stopMusic();
}
- logger->log("Sound::startMusic() Playing \"%s\" %i times", path, loop);
+ logger->log("Sound::startMusic() Playing \"%s\" %i times", path.c_str(),
+ loop);
- mMusic = Mix_LoadMUS(path);
+ mMusic = Mix_LoadMUS(path.c_str());
if (mMusic) {
Mix_PlayMusic(mMusic, loop);
}
@@ -158,7 +159,7 @@ void Sound::stopMusic()
}
}
-void Sound::fadeInMusic(const char *path, int loop, int ms)
+void Sound::fadeInMusic(const std::string &path, int loop, int ms)
{
if (!mInstalled) return;
@@ -166,10 +167,11 @@ void Sound::fadeInMusic(const char *path, int loop, int ms)
stopMusic();
}
- logger->log("Sound::fadeInMusic() Fading \"%s\" %i times (%i ms)", path,
- loop, ms);
+ logger->log("Sound::fadeInMusic() Fading \"%s\" %i times (%i ms)",
+ path.c_str(),
+ loop, ms);
- mMusic = Mix_LoadMUS(path);
+ mMusic = Mix_LoadMUS(path.c_str());
if (mMusic) {
Mix_FadeInMusic(mMusic, loop, ms);
}
diff --git a/src/sound.h b/src/sound.h
index 34490d9a..ebcd6442 100644
--- a/src/sound.h
+++ b/src/sound.h
@@ -65,7 +65,7 @@ class Sound {
* @param path The full path to the music file.
* @param loop The number of times the song is played (-1 = infinite)
*/
- void playMusic(const char *path, int loop = -1);
+ void playMusic(const std::string &path, int loop = -1);
/**
* Stops currently running background music track.
@@ -79,7 +79,8 @@ class Sound {
* @param loop The number of times the song is played (-1 = infinite)
* @param ms Duration of fade-in effect (ms)
*/
- void fadeInMusic(const char *path, int loop = -1, int ms = 2000);
+ void fadeInMusic(const std::string &path, int loop = -1,
+ int ms = 2000);
/**
* Fades out currently running background music track.
diff --git a/src/utils/trim.h b/src/utils/trim.h
index 1b5311e6..fec99100 100644
--- a/src/utils/trim.h
+++ b/src/utils/trim.h
@@ -31,7 +31,7 @@
*
* @param str the string to trim spaces off
*/
-static void trim(std::string &str)
+inline void trim(std::string &str)
{
std::string::size_type pos = str.find_last_not_of(' ');
if (pos != std::string::npos)