*/
#include <algorithm>
-#include <fstream>
#include <limits>
#include <msp/gl/rendermode.h>
#include <msp/gl/select.h>
#include <signal.h>
#include <cmath>
-#include <iostream>
#include <GL/gl.h>
#include <msp/gl/matrix.h>
#include <msp/gl/misc.h>
{
const Track &track = t3d->get_track();
const TrackType &ttype = track.get_type();
- ostringstream ss;
- ss.precision(2);
- ss<<ttype.get_article_number()<<' '<<ttype.get_description();
+ string info = format("%d %s", ttype.get_article_number(), ttype.get_description());
if(mode!=CATALOGUE && abs(track.get_slope())>1e-4)
- ss<<" (slope "<<abs(track.get_slope()/ttype.get_total_length()*100)<<"%)";
+ info += format(" (slope %.1f%%)", abs(track.get_slope()/ttype.get_total_length()*100));
if(track.get_turnout_id())
- ss<<" (turnout "<<track.get_turnout_id()<<')';
+ info += format(" (turnout %d)", track.get_turnout_id());
else if(track.get_sensor_id())
- ss<<" (sensor "<<track.get_sensor_id()<<')';
+ info += format(" (sensor %d)", track.get_sensor_id());
- set_tooltip(pointer_x, pointer_y, ss.str());
+ set_tooltip(pointer_x, pointer_y, info);
}
else
clear_tooltip();
float len = 0;
for(set<Track *>::const_iterator i=tracks.begin(); i!=tracks.end(); ++i)
len += (*i)->get_type().get_total_length();
- cout<<"Total length: "<<len<<"m\n";
+ IO::print("Total length: %.1fm\n", len);
}
else if(key==Msp::Input::KEY_L)
selection->select_linked();
Track *track = selection->get_track();
if(selection->size()==1 && track->get_type().get_n_paths()>1)
{
- ostringstream ss;
- ss<<track->get_turnout_id();
- input = new ::Input(*this, "Turnout ID", ss.str());
+ input = new ::Input(*this, "Turnout ID", lexical_cast(track->get_turnout_id()));
input->signal_cancel.connect(sigc::mem_fun(this, &Designer::input_dismiss));
input->signal_accept.connect(sigc::mem_fun(this, &Designer::turnout_id_accept));
mode = INPUT;
}
if(ok)
{
- ostringstream ss;
- if(id>=0)
- ss<<id;
- input = new ::Input(*this, "Sensor ID", ss.str());
+ input = new ::Input(*this, "Sensor ID", (id>=0 ? lexical_cast(id) : string()));
input->signal_cancel.connect(sigc::mem_fun(this, &Designer::input_dismiss));
input->signal_accept.connect(sigc::mem_fun(this, &Designer::sensor_id_accept));
mode = INPUT;
float perpd = measure->get_perpendicular_distance()*1000;
float d = sqrt(pard*pard+perpd*perpd);
float adiff = measure->get_angle_difference()*180/M_PI;
- ostringstream ss;
- ss.precision(3);
- ss<<"Par "<<pard<<"mm - Perp "<<perpd<<"mm - Total "<<d<<"mm - Angle "<<adiff<<"°";
- set_tooltip(pointer_x, pointer_y, ss.str());
+ string info = format("Par %.1fmm - Perp %.1fmm - Total %.1fmm - Angle %.1f°", pard, perpd, d, adiff);
+ set_tooltip(pointer_x, pointer_y, info);
}
void Designer::measure_done()
#include <algorithm>
#include <cmath>
#include <GL/gl.h>
+#include <msp/strings/formatter.h>
#include "3d/layout.h"
#include "libmarklin/tracktype.h"
#include "designer.h"
using namespace Marklin;
using namespace Msp;
-#include <iostream>
-
Manipulator::Manipulator(Designer &d):
designer(d),
selection(0),
{
float dz = (y-elev_origin)/1000.;
- ostringstream ss;
- ss.precision(3);
- ss<<"Elevation: "<<dz*1000<<"mm ("<<(center.z+dz)*1000<<"mm)";
- signal_status.emit(ss.str());
+ signal_status.emit(format("Elevation: %+.0fmm (%.0fmm)", dz*1000, (center.z+dz)*1000));
wrap_pos.z = center.z+dz;
for(vector<MTrack>::iterator i=tracks.begin(); i!=tracks.end(); ++i)
Distributed under the GPL
*/
-#include <iostream>
#include "control.h"
#include "block.h"
#include "tracktype.h"
return false;
}
-void Block::print_debug()
-{
- cout<<"Block "<<id;
- if((*tracks.begin())->get_sensor_id())
- cout<<", sensor="<<(*tracks.begin())->get_sensor_id();
- cout<<'\n';
- for(vector<Endpoint>::iterator i=endpoints.begin(); i!=endpoints.end(); ++i)
- {
- cout<<" Endpoint, link=";
- if(i->link)
- cout<<i->link->id;
- else
- cout<<"none";
- cout<<", paths="<<i->paths<<'\n';
- }
-}
-
void Block::find_paths(Track &track, unsigned track_ep, unsigned path, set<Track *> &visited)
{
visited.insert(&track);
#include <fcntl.h>
#include <termios.h>
#include <sys/poll.h>
-#include <iostream>
#include <msp/core/except.h>
+#include <msp/io/print.h>
#include <msp/time/units.h>
#include <msp/time/utils.h>
#include "command.h"
pollfd pfd = { serial_fd, POLLIN, 0 };
if(poll(&pfd, 1, 500)>0)
{
- cout<<"IB detected at "<<baud[i]<<" bits/s\n";
+ IO::print("IB detected at %d bits/s\n", baud[i]);
char buf[2];
p50 = (read(serial_fd, buf, 2)==2);
ok = true;
{
Reply reply = Reply::read(serial_fd, queue.front().get_command());
if(debug)
- cout<<"R: "<<reply<<'\n';
+ IO::print("R: %s\n", reply);
queue.front().signal_done.emit(reply);
queue.erase(queue.begin());
if(!queue.empty())
{
if(debug)
- cout<<"W: "<<queue.front()<<'\n';
+ IO::print("W: %s\n", queue.front());
if(serial_fd>=0)
queue.front().send(serial_fd);
{
unsigned addr = (data[i*2+1])+((data[i*2+2]&7)<<8);
bool status = !(data[i*2+2]&0x80);
- cout<<"Turnout "<<addr<<", status "<<status<<'\n';
+ IO::print("Turnout %d, status %d\n", addr, status);
signal_turnout_event.emit(addr, status);
}
}
{
unsigned module = data[i];
- cout<<"S88 module "<<module<<", status ";
- for(unsigned j=0; j<16; ++j)
- cout<<((data[i+1+j/8]>>(7-j%8))&1);
- cout<<'\n';
+ IO::print("S88 module %d, status %08b%08b\n", module, data[1], data[2]);
for(unsigned j=0; j<16; ++j)
signal_sensor_event.emit(module*16+j-15, (data[i+1+j/8]>>(7-j%8))&1);
Distributed under the GPL
*/
-#include <iostream>
#include <map>
#include <msp/core/getopt.h>
#include <msp/datafile/loader.h>
#include <msp/datafile/parser.h>
+#include <msp/io/print.h>
using namespace std;
using namespace Msp;
{
public:
ShoppingList(int, char **);
- void print(ostream &);
+ void print(IO::Base &);
private:
class InventoryLoader: public DataFile::Loader
{
int main(int argc, char **argv)
{
ShoppingList sl(argc, argv);
- sl.print(cout);
+ sl.print(IO::cout);
return 0;
}
ll.load(parser);
}
-void ShoppingList::print(ostream &out)
+void ShoppingList::print(IO::Base &out)
{
- out<<"// Need to get:\n";
+ IO::print(out, "// Need to get:\n");
for(map<unsigned, unsigned>::iterator i=layout.begin(); i!=layout.end(); ++i)
{
map<unsigned, unsigned>::iterator j=inventory.find(i->first);
if(j!=inventory.end())
{
if(j->second<i->second)
- out<<"track "<<i->first<<' '<<i->second-j->second<<";\n";
+ IO::print(out, "track %d %d;\n", i->first, i->second-j->second);
}
else
- out<<"track "<<i->first<<' '<<i->second<<";\n";
+ IO::print(out, "track %d %d;\n", i->first, i->second);
}
- out<<"// Pre-existing:\n";
+ IO::print(out, "// Pre-existing:\n");
for(map<unsigned, unsigned>::iterator i=layout.begin(); i!=layout.end(); ++i)
{
map<unsigned, unsigned>::iterator j=inventory.find(i->first);
if(j!=inventory.end())
- out<<"track "<<i->first<<' '<<min(i->second,j->second)<<";\n";
+ IO::print(out, "track %d %d;\n", i->first, min(i->second, j->second));
}
- out<<"// Unused:\n";
+ IO::print(out, "// Unused:\n");
for(map<unsigned, unsigned>::iterator i=inventory.begin(); i!=inventory.end(); ++i)
{
map<unsigned, unsigned>::iterator j=layout.find(i->first);
if(j!=layout.end())
{
if(j->second<i->second)
- out<<"track "<<i->first<<' '<<i->second-j->second<<";\n";
+ IO::print(out, "track %d %d;\n", i->first, i->second-j->second);
}
else
- out<<"track "<<i->first<<' '<<i->second<<";\n";
+ IO::print(out, "track %d %d;\n", i->first, i->second);
}
}