git-svn-id: svn://db.shs.com.ru/pip@6 12ceb7fc-bf1f-11e4-8940-5bc7170c53b5

This commit is contained in:
2015-02-28 18:37:44 +00:00
parent 02fdf8b415
commit 0891d1ba2d
319 changed files with 10557 additions and 0 deletions

View File

@@ -0,0 +1,63 @@
#include "pip.h"
void _() {
//! [0]
PIByteArray ba;
int i = -1, j = 2;
float f = 1.;
PIString text("123");
ba << i << j << f << text; // form binary data
piCout << "data =" << ba;
i = j = 0; // clear variables
f = 0; // clear variables
text.clear(); // clear variables
piCout << i << j << f << text; // show variables
ba >> i >> j >> f >> text; // restore data
piCout << i << j << f << text; // show variables
piCout << "data =" << ba;
//! [0]
//! [1]
struct MyType {
MyType(int i_ = 0, const PIString & t_ = PIString()) {
m_i = i_;
m_text = t_;
}
int m_i;
PIString m_text;
};
inline PIByteArray & operator <<(PIByteArray & s, const MyType & v) {s << v.m_i << v.m_text; return s;}
inline PIByteArray & operator >>(PIByteArray & s, MyType & v) {s >> v.m_i >> v.m_text; return s;}
PIByteArray ba;
PIVector<MyType> my_vec;
my_vec << MyType(1, "s1") << MyType(10, "s10"); // add to vector
ba << my_vec; // store to byte array
piCout << "data =" << ba;
my_vec.clear(); // clear vector
ba >> my_vec; // restore from byte array
//! [1]
//! [2]
PIByteArray ba;
const char * chars = "8 bytes";
ba << PIByteArray::RawData(chars, 8); // form binary data
piCout << "data =" << ba;
char rchars[16];
memset(rchars, 0, 16); // clear data
ba >> PIByteArray::RawData(rchars, 8); // restore data
piCout << rchars;
piCout << "data =" << ba;
//! [2]
//! [3]
PIByteArray ba, sba;
uchar uc(127);
sba << uc; // byte array with one byte
ba << sba; // stream operator
piCout << ba; // result
// {1, 0, 0, 0, 127}
ba.clear();
ba.append(sba);
piCout << ba; // result
// {127}
//! [3]
};

26
doc/examples/picli.cpp Normal file
View File

@@ -0,0 +1,26 @@
#include "pip.h"
//! [main]
int main(int argc, char ** argv) {
PICLI cli(argc, argv);
cli.addArgument("console");
cli.addArgument("debug");
cli.addArgument("Value", "v", "value", true);
if (cli.hasArgument("console"))
piCout << "console active";
if (cli.hasArgument("debug"))
piCout << "debug active";
piCout << "Value =" << cli.argumentValue("Value");
return 0;
}
These executions are similar:
a.out -cd -v 10
a.out --value 10 -dc
a.out -c -v 10 -d
a.out --console -d -v 10
a.out --debug -c --value 10
//! [main]
void _() {
};

View File

@@ -0,0 +1,48 @@
#include "pip.h"
//! [main]
class ElementA: public PIObject {
PIOBJECT(ElementA)
// ...
};
ADD_NEW_TO_COLLECTION(ab_group, ElementA)
class ElementB: public PIObject {
PIOBJECT(ElementB)
// ...
};
ADD_NEW_TO_COLLECTION(ab_group, ElementB)
class ElementC: public PIObject {
PIOBJECT(ElementC)
// ...
};
ADD_NEW_TO_COLLECTION(c_group, ElementC)
class ElementD: public PIObject {
PIOBJECT(ElementD)
// ...
};
int main() {
ElementD * el_d = new ElementD();
ADD_TO_COLLECTION(ab_group, el_d)
PIStringList gl = PICollection::groups();
piCout << gl; // {"ab_group", "c_group"}
piForeachC (PIString g, gl) {
PIVector<const PIObject * > go = PICollection::groupElements(g);
piCout << "group" << g << ":";
piForeachC (PIObject * o, go)
piCout << Tab << o->className();
}
/*
group ab_group :
ElementA
ElementB
ElementD
group c_group :
ElementC
*/
};
//! [main]

27
doc/examples/piconfig.cpp Normal file
View File

@@ -0,0 +1,27 @@
#include "pip.h"
void _() {
//! [PIConfig::Entry]
/* "example.conf"
a = 1
s0.a = A
s0.b = B
*/
PIConfig conf("example.conf", PIIODevice::ReadOnly);
PIConfig::Entry ce = conf.getValue("a");
int a = ce; // a = 1
PIString A = ce; // A = "1"
ce = conf.getValue("s0");
piCout << ce.childCount(); // 2
A = ce.getValue("b"); // A = "B"
A = conf.getValue("s0.a"); // A = "A"
//! [PIConfig::Entry]
//! [fullName]
PIConfig conf("example.conf", PIIODevice::ReadOnly);
piCout << conf.getValue("a.b.c").name(); // "c"
piCout << conf.getValue("a.b.c").fullName(); // "a.b.c"
//! [fullName]
};

View File

@@ -0,0 +1,207 @@
#include "pip.h"
void _() {
//! [foreach]
PIVector<int> vec;
vec << 1 << 2 << 3;
piForeach (int & i, vec)
cout << i << ", ";
// 1, 2, 3,
piForeach (int & i, vec)
i++;
piForeach (int & i, vec)
cout << i << ", ";
// 2, 3, 4,
//! [foreach]
//! [foreachC]
PIVector<int> vec;
vec << 1 << 2 << 3;
piForeachC (int & i, vec)
cout << i << ", ";
// 1, 2, 3,
piForeachC (int & i, vec)
i++; // ERROR! const iterator
//! [foreachC]
//! [foreachR]
PIVector<int> vec;
vec << 1 << 2 << 3;
piForeachR (int & i, vec)
cout << i << ", ";
// 3, 2, 1,
piForeachR (int & i, vec)
i++;
piForeachR (int & i, vec)
cout << i << ", ";
// 4, 3, 2,
//! [foreachR]
//! [foreachCR]
PIVector<int> vec;
vec << 1 << 2 << 3;
piForeachCR (int & i, vec)
cout << i << ", ";
// 3, 2, 1,
piForeachCR (int & i, vec)
i++; // ERROR! const iterator
//! [foreachCR]
//! [PIVector::PIVector]
PIVector<char> vec(4u, 'p');
piForeachC (char i, vec)
cout << i << ", ";
// p, p, p, p,
//! [PIVector::PIVector]
//! [PIVector::at_c]
PIVector<int> vec;
vec << 1 << 3 << 5;
for (int i = 0; i < vec.size_s(); ++i)
cout << vec.at(i) << ", ";
// 1, 3, 5,
//! [PIVector::at_c]
//! [PIVector::at]
PIVector<int> vec;
vec << 1 << 3 << 5;
for (int i = 0; i < vec.size_s(); ++i)
vec.at(i) += 1;
for (int i = 0; i < vec.size_s(); ++i)
cout << vec.at(i) << ", ";
// 2, 4, 6,
//! [PIVector::at]
//! [PIVector::()_c]
PIVector<int> vec;
vec << 1 << 3 << 5;
for (int i = 0; i < vec.size_s(); ++i)
cout << vec[i] << ", ";
// 1, 3, 5,
//! [PIVector::()_c]
//! [PIVector::()]
PIVector<int> vec;
vec << 1 << 3 << 5;
for (int i = 0; i < vec.size_s(); ++i)
vec[i] += 1;
for (int i = 0; i < vec.size_s(); ++i)
cout << vec[i] << ", ";
// 2, 4, 6,
//! [PIVector::()]
//! [PIVector::data_c]
PIVector<int> vec;
vec << 1 << 3 << 5;
int carr[3];
// copy data from "vec" to "carr"
memcpy(carr, vec.data(), vec.size() * sizeof(int));
for (int i = 0; i < vec.size_s(); ++i)
cout << carr[i] << ", ";
// 1, 3, 5,
//! [PIVector::data_c]
//! [PIVector::data]
PIVector<int> vec;
vec << 1 << 3 << 5;
int carr[2] = {12, 13};
// copy data from "carr" to "vec" with offset
memcpy(vec.data(1), carr, 2 * sizeof(int));
for (int i = 0; i < vec.size_s(); ++i)
cout << vec[i] << ", ";
// 1, 12, 13,
//! [PIVector::data]
//! [PIVector::resize]
PIVector<int> vec;
vec << 1 << 2;
vec.resize(4);
piForeachC (int & i, vec)
cout << i << ", ";
// 1, 2, 0, 0,
vec.resize(3);
piForeachC (int & i, vec)
cout << i << ", ";
// 1, 2, 0,
//! [PIVector::resize]
//! [PIVector::sort_0]
PIVector<int> vec;
vec << 3 << 2 << 5 << 1 << 4;
vec.sort();
piForeachC (int & i, vec)
cout << i << ", ";
// 1, 2, 3, 4, 5,
//! [PIVector::sort_0]
//! [PIVector::sort_1]
static int mycomp(const int * v0, const int * v1) {
if (*v0 == *v1) return 0;
return *v0 < *v1 ? 1 : -1;
}
PIVector<int> vec;
vec << 3 << 2 << 5 << 1 << 4;
vec.sort(mycomp);
piForeachC (int & i, vec)
cout << i << ", ";
// 5, 4, 3, 2, 1,
//! [PIVector::sort_1]
//! [PIVector::fill]
PIVector<char> vec;
vec << '1' << '2' << '3' << '4' << '5';
vec.fill('0');
piForeachC (char i, vec)
cout << i << ", ";
// 0, 0, 0, 0, 0,
//! [PIVector::fill]
//! [PIVector::remove_0]
PIVector<char> vec;
vec << '1' << '2' << '3' << '4' << '5';
vec.remove(1);
piForeachC (char i, vec)
cout << i << ", ";
// 1, 3, 4, 5,
//! [PIVector::remove_0]
//! [PIVector::remove_1]
PIVector<char> vec;
vec << '1' << '2' << '3' << '4' << '5';
vec.remove(2, 2);
piForeachC (char i, vec)
cout << i << ", ";
// 1, 2, 5,
//! [PIVector::remove_1]
//! [PIVector::removeOne]
PIVector<char> vec;
vec << '1' << '2' << '3' << '2' << '1';
vec.removeOne('2');
piForeachC (char i, vec)
cout << i << ", ";
// 1, 3, 2, 1,
//! [PIVector::removeOne]
//! [PIVector::removeAll]
PIVector<char> vec;
vec << '1' << '2' << '3' << '2' << '1';
vec.removeAll('2');
piForeachC (char i, vec)
cout << i << ", ";
// 1, 3, 1,
//! [PIVector::removeAll]
//! [PIVector::insert_0]
PIVector<char> vec;
vec << '1' << '3' << '4';
vec.insert(1, '2');
piForeachC (char i, vec)
cout << i << ", ";
// 1, 2, 3, 4,
//! [PIVector::insert_0]
//! [PIVector::insert_1]
PIVector<char> vec, vec2;
vec << '1' << '4' << '5';
vec2 << '2' << '3';
vec.insert(1, vec2);
piForeachC (char i, vec)
cout << i << ", ";
// 1, 2, 3, 4, 5,
//! [PIVector::insert_1]
//! [PIVector::ostream<<]
PIVector<char> vec;
vec << '1' << '2' << '3' << '4' << '5';
cout << vec << endl;
// {1, 2, 3, 4, 5}
//! [PIVector::ostream<<]
//! [PIVector::PICout<<]
PIVector<char> vec;
vec << '1' << '2' << '3' << '4' << '5';
piCout << vec;
// {1, 2, 3, 4, 5}
//! [PIVector::PICout<<]
};

36
doc/examples/picout.cpp Normal file
View File

@@ -0,0 +1,36 @@
#include "pip.h"
//! [own]
inline PICout operator <<(PICout s, const PIByteArray & ba) {
s.space(); // insert space after previous output
s.quote(); // ONLY if you want to quoted your type
s.setControl(0, true); // clear all features and
// save them to stack,
// now it`s behavior similar to std::cout
// your output
for (uint i = 0; i < ba.size(); ++i)
s << ba[i];
s.restoreControl(); // restore features from stack
s.quote(); // ONLY if you want to quoted your type
return s;
}
//! [own]
void _() {
//! [0]
int a = 10, b = 32, c = 11;
piCout << a << Hex << b << Bin << c;
// 10 20 1011
piCout << "this" << "is" << Green << "green" << Default << "word";
// this is green word
PICout(AddSpaces | AddNewLine | AddQuotes) << Tab << "tab and" << "quotes";
// "tab and" "quotes"
//! [0]
};

View File

@@ -0,0 +1,31 @@
#include "pip.h"
void _() {
//! [main]
PIEvaluator eval;
eval.check("e2eelge");
piCout << eval.expression() << "=" << eval.evaluate();
// e*2*e*e*lg(e) = (17.4461; 0)
eval.check("10x");
piCout << eval.error() << eval.unknownVariables();
// Unknown variables: "x" {"x"}
eval.setVariable("x", complexd(1, 2));
eval.check("10x");
piCout << eval.error() << eval.unknownVariables();
// Correct {}
piCout << eval.expression() << "=" << eval.evaluate();
// 10*x = (10; 20)
eval.setVariable("x", complexd(-2, 0));
piCout << eval.expression() << "=" << eval.evaluate();
// 10*x = (-20; 0)
//! [main]
};

View File

@@ -0,0 +1,55 @@
#include "pip.h"
void _() {
//! [swap]
int v1 = 1, v2 = 2;
piCout << v1 << v2; // 1 2
piSwap<int>(v1, v2);
piCout << v1 << v2; // 2 1
//! [swap]
//! [round]
piCout << piRoundf(0.6f) << piRoundd(0.2); // 1 0
piCout << piRoundf(-0.6f) << piRoundd(-0.2); // -1 0
//! [round]
//! [floor]
piCout << piFloorf(0.6f) << piFloorf(0.2); // 0 0
piCout << piFloorf(-0.6f) << piFloorf(-0.2f); // -1 -1
//! [floor]
//! [ceil]
piCout << piCeilf(0.6f) << piCeilf(0.2); // 1 1
piCout << piCeilf(-0.6f) << piCeilf(-0.2f); // 0 0
//! [ceil]
//! [abs]
piCout << piAbsi(5) << piAbsi(-11); // 5 11
piCout << piAbsf(-0.6f) << piAbsf(-0.2f); // 0.6 0.2
//! [abs]
//! [min2]
piCout << piMini(5, 1); // 1
piCout << piMinf(-0.6f, -0.2f); // -0.6
//! [min2]
//! [min3]
piCout << piMini(5, 1, -1); // -1
piCout << piMinf(-0.6f, -0.2f, 1.f); // -0.6
//! [min3]
//! [max2]
piCout << piMaxi(5, 1); // 5
piCout << piMaxf(-0.6f, -0.2f); // -0.2
//! [max2]
//! [max3]
piCout << piMaxi(5, 1, -1); // 5
piCout << piMaxf(-0.6f, -0.2f, 1.f); // 1
//! [max3]
//! [clamp]
piCout << piClampf(-5, -3, 2); // -3
piCout << piClampf(1, -3, 2); // 1
piCout << piClampf(5, -3, 2); // 2
//! [clamp]
//! [flags]
enum TestEnum {First = 0x1, Second = 0x2, Third = 0x4};
PIFlags<TestEnum> testFlags(First);
testFlags |= Third;
piCout << testFlags[First] << testFlags[Second] << testFlags[Third]; // 1 0 1
piCout << (int)testFlags; // 5
//! [flags]
};

View File

@@ -0,0 +1,53 @@
#include "pip.h"
void _() {
//! [0]
class SomeIO: public PIIODevice {
PIIODEVICE(SomeIO)
public:
SomeIO(): PIIODevice() {}
protected:
bool openDevice() {
// open your device here
return if_success;
}
int read(void * read_to, int max_size) {
// read from your device here
return readed_bytes;
}
int write(const void * data, int max_size) {
// write to your device here
return written_bytes;
}
PIString fullPathPrefix() const {return "myio";}
void configureFromFullPath(const PIString & full_path) {
// parse full_path and configure device there
}
};
REGISTER_DEVICE(SomeIO)
//! [0]
//! [configure]
// file example.conf
dev.reopenEnabled = false
dev.device = /dev/ttyS0
dev.speed = 9600
// end example.conf
// code
PISerial ser;
ser.configure("example.conf", "dev");
//! [configure]
//! [configureDevice]
class SomeIO: public PIIODevice {
...
bool configureDevice(const void * e_main, const void * e_parent) {
PIConfig::Entry * em = (PIConfig::Entry * )e_main;
PIConfig::Entry * ep = (PIConfig::Entry * )e_parent;
setStringParam(readDeviceSetting<PIString>("stringParam", stringParam(), em, ep));
setIntParam(readDeviceSetting<int>("intParam", intParam(), em, ep));
return true;
}
...
};
//! [configureDevice]
};

View File

@@ -0,0 +1,17 @@
#include "pip.h"
//! [main]
void key_event(char key, void * ) {
piCout << "key" << key << "pressed";
}
int main(int argc, char ** argv) {
PIKbdListener kbd;
kbd.enableExitCapture();
kbd.start();
WAIT_FOR_EXIT
return 0;
}
//! [main]
void _() {
};

9
doc/examples/pimutex.cpp Normal file
View File

@@ -0,0 +1,9 @@
#include "pip.h"
void _() {
//! [main]
mutex.lock();
// ... your code here
mutex.unlock();
//! [main]
}

32
doc/examples/piobject.cpp Normal file
View File

@@ -0,0 +1,32 @@
#include "pip.h"
//! [main]
class ObjectA: public PIObject {
PIOBJECT(ObjectA)
public:
EVENT_HANDLER1(void, handlerA, const PIString & , str) {piCoutObj << "handler A:" << str;}
EVENT2(eventA2, int, i, float, f);
EVENT1(eventA1, const PIString & , str);
};
class ObjectB: public PIObject {
PIOBJECT(ObjectB)
public:
EVENT_HANDLER2(void, handlerB, int, i, float, f) {piCoutObj << "handler B:" << i << "," << f;}
EVENT1(eventB, PIString, str);
};
int main(int argc, char * argv[]) {
ObjectA obj_a;
ObjectB obj_b;
CONNECT2(void, int, float, &obj_a, eventA2, &obj_b, handlerB);
obj_a.eventA2(2, 0.5);
CONNECT1(void, PIString, &obj_b, eventB, &obj_a, handlerA);
obj_b.eventB("event to handler");
CONNECT1(void, PIString, &obj_a, eventA1, &obj_b, eventB);
obj_a.eventA1("event to event");
};
//! [main]

View File

@@ -0,0 +1,74 @@
//! [main]
#include "pip.h"
enum Mode {Start, Manual, Auto, Finish, End};
class Machine: public PIStateMachine<Mode> {
PIOBJECT(Machine)
public:
Machine() {
addState(Start, "start", HANDLER(startFunc));
addState(Manual, "manual", HANDLER(manualFunc));
addState(Auto, "auto", HANDLER(autoFunc));
addState(Finish, "finish", HANDLER(finishFunc));
addState(End, "end", HANDLER(endFunc));
addRule(Start, Manual, "init_ok", HANDLER(beginManualFunc));
addRule(Start, Auto, "init_ok", HANDLER(beginAutoFunc));
addRule(Manual, Auto, HANDLER(manualToAutoFunc));
addRule(Auto, Manual, HANDLER(autoToManualFunc));
addRule(Manual, Finish);
addRule(Auto, Finish);
Rule r(Finish, End);
r.addCondition("finish_0_ok");
r.addCondition("finish_1_ok", 2);
addRule(r);
setInitialState(Start);
CONNECT2(void, void*, int, &timer, timeout, this, tick);
timer.start(500);
}
virtual void execution(const State & state) {
piCout << "performed conditions:" << currentConditions();
}
virtual void transition(const State & from, const State & to) {
piCout << "switch from" << from.name << "to" << to.name << "state";
}
EVENT_HANDLER(void, startFunc) {piCout << "start function";}
EVENT_HANDLER(void, manualFunc) {piCout << "manual function";}
EVENT_HANDLER(void, autoFunc) {piCout << "auto function";}
EVENT_HANDLER(void, finishFunc) {piCout << "finish function";}
EVENT_HANDLER(void, endFunc) {piCout << "end function";}
EVENT_HANDLER(void, beginManualFunc) {piCout << "begin manual function";}
EVENT_HANDLER(void, beginAutoFunc) {piCout << "begin auto function";}
EVENT_HANDLER(void, autoToManualFunc) {piCout << "switch from auto to manual function";}
EVENT_HANDLER(void, manualToAutoFunc) {piCout << "switch from manual to auto function";}
PITimer timer;
};
Machine machine;
void key_event(char key, void*) {
switch (key) {
case 's': machine.switchToState(Start); break;
case 'm': machine.switchToState(Manual); break;
case 'a': machine.switchToState(Auto); break;
case 'f': machine.switchToState(Finish); break;
case 'e': machine.switchToState(End); break;
case '1': machine.performCondition("init_ok"); break;
case '2': machine.performCondition("finish_0_ok"); break;
case '3': machine.performCondition("finish_1_ok"); break;
case 'r': machine.resetConditions(); break;
case 'R': machine.reset(); break;
}
}
int main(int argc, char * argv[]) {
PIKbdListener kbd(key_event);
kbd.enableExitCapture();
WAIT_FOR_EXIT
};
//! [main]

332
doc/examples/pistring.cpp Normal file
View File

@@ -0,0 +1,332 @@
#include "pip.h"
void _() {
//! [PIString(char * )]
PIString s("string");
//! [PIString(char * )]
//! [PIString(wchar_t * )]
PIString s(L"string");
//! [PIString(wchar_t * )]
//! [PIString(char * , int)]
PIString s("string", 3); // s = "str"
//! [PIString(char * , int)]
//! [PIString(int, char)]
PIString s(5, 'p'); // s = "ppppp"
//! [PIString(int, char)]
//! [PIString(int, PIChar)]
PIString s(5, ""); // s = "№№№№№"
//! [PIString(int, PIChar)]
//! [PIString::char*]
PIString s("pip");
cout << (char*)s << endl; // pip
//! [PIString::char*]
//! [PIString::<<(PIString)]
PIString s("this"), s1(" is"), s2(" string");
s << s1 << s2; // s = "this is string"
//! [PIString::<<(PIString)]
//! [PIString::<<(PIChar)]
PIString s("stri");
s << PIChar('n') << PIChar('g'); // s = "string"
//! [PIString::<<(PIChar)]
//! [PIString::<<(char * )]
PIString s("this");
s << " is" << " string"; // s = "this is string"
//! [PIString::<<(char * )]
//! [PIString::<<(wchar_t * )]
PIString s;
s << L"№ -" << " number"; // s = "№ - number"
//! [PIString::<<(wchar_t * )]
//! [PIString::<<(int)]
PIString s("ten - ");
s << 10; // s = "ten - 10"
//! [PIString::<<(int)]
//! [PIString::mid]
PIString s("0123456789");
piCout << s.mid(-2, -1); // s = "0123456789"
piCout << s.mid(-2, 4); // s = "01"
piCout << s.mid(3, -1); // s = "3456789"
piCout << s.mid(3, 4); // s = "3456"
//! [PIString::mid]
//! [PIString::left]
PIString s("0123456789");
piCout << s.left(-1); // s = ""
piCout << s.left(1); // s = "0"
piCout << s.left(5); // s = "01234"
piCout << s.left(15); // s = "0123456789"
//! [PIString::left]
//! [PIString::right]
PIString s("0123456789");
piCout << s.right(-1); // s = ""
piCout << s.right(1); // s = "9"
piCout << s.right(5); // s = "56789"
piCout << s.right(15); // s = "0123456789"
//! [PIString::right]
//! [PIString::cutMid]
PIString s("0123456789");
s.cutMid(1, 3);
piCout << s; // s = "0456789"
s.cutMid(-1, 3);
piCout << s; // s = "56789"
s.cutMid(3, -1);
piCout << s; // s = "567"
//! [PIString::cutMid]
//! [PIString::cutLeft]
PIString s("0123456789");
s.cutLeft(1);
piCout << s; // s = "123456789"
s.cutLeft(3);
piCout << s; // s = "456789"
s.cutLeft(30);
piCout << s; // s = ""
//! [PIString::cutLeft]
//! [PIString::cutRight]
PIString s("0123456789");
s.cutRight(1);
piCout << s; // s = "012345678"
s.cutRight(3);
piCout << s; // s = "012345"
s.cutRight(30);
piCout << s; // s = ""
//! [PIString::cutRight]
//! [PIString::trim]
PIString s(" string ");
s.trim();
piCout << s; // s = "string"
//! [PIString::trim]
//! [PIString::trimmed]
PIString s(" string ");
piCout << s.trimmed(); // s = "string"
piCout << s; // s = " string "
//! [PIString::trimmed]
//! [PIString::replace_0]
PIString s("0123456789");
s.replace(2, 3, "_cut_");
piCout << s; // s = "01_cut_56789"
s.replace(0, 1, "one_");
piCout << s; // s = "one_1_cut_56789"
//! [PIString::replace_0]
//! [PIString::replaced_0]
PIString s("0123456789");
piCout << s.replaced(2, 3, "_cut_"); // s = "01_cut_56789"
piCout << s.replaced(0, 1, "one_"); // s = "one_123456789"
//! [PIString::replaced_0]
//! [PIString::replace_1]
PIString s("pip string");
bool ok;
s.replace("string", "conf", &ok);
piCout << s << ok; // s = "pip conf", true
s.replace("PIP", "PlInPr", &ok);
piCout << s << ok; // s = "pip conf", false
//! [PIString::replace_1]
//! [PIString::replaced_1]
PIString s("pip string");
bool ok;
piCout << s.replace("string", "conf", &ok); // s = "pip conf", true
piCout << s.replace("PIP", "PlInPr", &ok); // s = "pip string", false
//! [PIString::replaced_1]
//! [PIString::replaceAll]
PIString s("substrings");
s.replaceAll("s", "_");
piCout << s; // s = "_ub_tring_"
//! [PIString::replaceAll]
//! [PIString::repeat]
PIString s(" :-) ");
s.repeat(3);
piCout << s; // :-) :-) :-)
//! [PIString::repeat]
//! [PIString::repeated]
PIString s(" :-) ");
piCout << s.repeated(3); // :-) :-) :-)
piCout << s; // :-)
//! [PIString::repeated]
//! [PIString::insert_0]
PIString s("pp");
s.insert(1, "i");
piCout << s; // s = "pip"
//! [PIString::insert_0]
//! [PIString::insert_1]
PIString s("pp");
s.insert(1, 'i');
piCout << s; // s = "pip"
//! [PIString::insert_1]
//! [PIString::insert_2]
PIString s("stg");
s.insert(2, "rin");
piCout << s; // s = "string"
//! [PIString::insert_2]
//! [PIString::expandRightTo]
PIString s("str");
s.expandRightTo(2, "_");
piCout << s; // s = "str"
s.expandRightTo(6, "_");
piCout << s; // s = "str___"
//! [PIString::expandRightTo]
//! [PIString::expandLeftTo]
PIString s("str");
s.expandLeftTo(2, "_");
piCout << s; // s = "str"
s.expandLeftTo(6, "_");
piCout << s; // s = "___str"
//! [PIString::expandLeftTo]
//! [PIString::reverse]
PIString s("0123456789");
s.reverse();
piCout << s; // s = "9876543210"
//! [PIString::reverse]
//! [PIString::reversed]
PIString s("0123456789");
piCout << s.reversed(); // s = "9876543210"
piCout << s; // s = "0123456789"
//! [PIString::reversed]
//! [PIString::lengthAscii]
piCout << PIString("0123456789").lengthAscii(); // 10
piCout << PIString("№1").lengthAscii(); // 3
//! [PIString::lengthAscii]
//! [PIString::data]
piCout << PIString("0123456789").data(); // 0123456789
piCout << PIString("№1").data(); // №1
//! [PIString::data]
//! [PIString::split]
PIString s("1 2 3");
piCout << s.split(" "); // {"1", "2", "3"}
//! [PIString::split]
//! [PIString::find]
PIString s("012345012345");
piCout << s.find("-"); // -1
piCout << s.find("3"); // 3
piCout << s.find("3", 4); // 9
piCout << s.find("3", 10); // -1
//! [PIString::find]
//! [PIString::findLast]
PIString s("012345012345");
piCout << s.find("-"); // -1
piCout << s.find("3"); // 9
piCout << s.find("3", 4); // 9
piCout << s.find("3", 10); // -1
//! [PIString::findLast]
//! [PIString::findWord]
PIString s("this is <PIP>");
piCout << s.find("this"); // 0
piCout << s.find("is"); // 5
piCout << s.find("PIP", 4); // -1
piCout << s.find("<PIP>", 10); // 8
//! [PIString::findWord]
//! [PIString::findCWord]
PIString s("this::is <PIP>");
piCout << s.find("this"); // 0
piCout << s.find("is"); // 6
piCout << s.find("PIP", 4); // 10
piCout << s.find("<PIP>", 10); // 9
//! [PIString::findCWord]
//! [PIString::toNumber]
piCout << PIString("123").toInt(); // 123
piCout << PIString("123").toInt(16); // 291
piCout << PIString("0x123").toInt(); // 291
piCout << PIString("1001").toInt(2); // 9
//! [PIString::toNumber]
//! [PIString::toFloat]
piCout << PIString("123").toFloat(); // 123
piCout << PIString("1.2E+2").toFloat(); // 120
piCout << PIString("0.01").toFloat(); // 0.01
//! [PIString::toFloat]
//! [PIString::setNumber]
PIString s;
s.setNumber(123);
piCout << s; // 123
s.setNumber(123, 16);
piCout << s; // 7B
//! [PIString::setNumber]
//! [PIString::setFloat]
PIString s;
s.setNumber(12.3);
piCout << s; // 12.3
//! [PIString::setFloat]
//! [PIString::setReadableSize]
PIString s;
s.setReadableSize(512);
piCout << s; // 512 B
s.setReadableSize(5120);
piCout << s; // 5.0 kB
s.setReadableSize(512000);
piCout << s; // 500.0 kB
s.setReadableSize(5120000);
piCout << s; // 4.8 MB
s.setReadableSize(512000000);
piCout << s; // 488.2 MB
s.setReadableSize(51200000000);
piCout << s; // 47.6 GB
//! [PIString::setReadableSize]
//! [PIString::fromNumber]
piCout << PIString::fromNumber(123); // 123
piCout << PIString::fromNumber(123, 16); // 7B
//! [PIString::fromNumber]
//! [PIString::fromFloat]
piCout << PIString::fromNumber(12.3); // 12.3
//! [PIString::fromFloat]
//! [PIString::readableSize]
piCout << PIString::readableSize(512); // 512 B
piCout << PIString::readableSize(5120); // 5.0 kB
piCout << PIString::readableSize(512000); // 500.0 kB
piCout << PIString::readableSize(5120000); // 4.8 MB
piCout << PIString::readableSize(512000000); // 488.2 MB
piCout << PIString::readableSize(51200000000); // 47.6 GB
//! [PIString::readableSize]
//! [PIString::takeSymbol]
PIString s("\t ! word");
piCout << s.takeSymbol(); // "!"
piCout << s.takeSymbol(); // "w"
piCout << s.takeSymbol(); // "o"
piCout << s; // "rd"
//! [PIString::takeSymbol]
//! [PIString::takeWord]
PIString s("some words\nnew line ");
piCout << s.takeWord(); // "some"
piCout << s.takeWord(); // "words"
piCout << s.takeWord(); // "new"
piCout << s; // " line "
//! [PIString::takeWord]
//! [PIString::takeLine]
PIString s("some words\nnew line \n\nend");
piCout << s.takeLine(); // "some words"
piCout << s.takeLine(); // "new line "
piCout << s.takeLine(); // ""
piCout << s; // "end"
//! [PIString::takeLine]
//! [PIString::takeNumber]
PIString s(" 0xFF -99 1.2E+5f 1000L");
piCout << s.takeNumber(); // "0xFF"
piCout << s.takeNumber(); // "-99"
piCout << s.takeNumber(); // "1.2E+5f"
piCout << s.takeNumber(); // "1000L"
piCout << s; // ""
//! [PIString::takeNumber]
//! [PIString::takeRange]
PIString s(" {figures{inside}}");
piCout << s.takeRange('{', '}'); // "figures{inside}"
piCout << s; // ""
s = "\"text\\\"shielded\" next";
piCout << s.takeRange('"', '"'); // "text\"shielded"
piCout << s; // " next"
//! [PIString::takeRange]
//! [PIStringList::join]
PIStringList sl("1", "2");
sl << "3";
piCout << sl.join(" < "); // 1 < 2 < 3
//! [PIStringList::join]
//! [PIStringList::removeStrings]
PIStringList sl("1", "2");
sl << "1" << "2" << "3";
piCout << sl; // {"1", "2", "1", "2", "3"}
piCout << sl.removeStrings("1"); // {"2", "2", "3"}
//! [PIStringList::removeStrings]
//! [PIStringList::removeDuplicates]
PIStringList sl("1", "2");
sl << "1" << "2" << "3";
piCout << sl; // {"1", "2", "1", "2", "3"}
piCout << sl.removeDuplicates(); // {"1", "2", "3"}
//! [PIStringList::removeDuplicates]
};

68
doc/examples/pitimer.cpp Normal file
View File

@@ -0,0 +1,68 @@
#include "pip.h"
//! [delimiter]
void tfunc(void * , int delim) {
piCout << "tick with delimiter" << delim;
};
void tfunc4(void * , int delim) {
piCout << "tick4 with delimiter" << delim;
};
int main() {
PITimer timer(tfunc);
timer.addDelimiter(2);
timer.addDelimiter(4, tfunc4);
timer.start(50);
piMSleep(200);
timer.stop();
timer.waitForFinish();
return 0;
};
/* Result:
tick with delimiter 1
tick with delimiter 1
tick with delimiter 2
tick with delimiter 1
tick with delimiter 1
tick with delimiter 2
tick4 with delimiter 4
*/
//! [delimiter]
//! [elapsed]
int main() {
PITimer timer;
piMSleep(100);
piCout << "elapsed" << timer.elapsed_m() << "ms";
piMSleep(100);
piCout << "elapsed" << timer.elapsed_m() << "ms";
timer.reset();
piMSleep(150);
piCout << "elapsed" << timer.elapsed_s() << "s";
return 0;
};
/* Result:
elapsed 100 ms
elapsed 200 ms
elapsed 0.15 s
*/
//! [elapsed]
//! [system_time]
int main() {
PISystemTime t0; // s = ns = 0
t0.addMilliseconds(200); // s = 0, ns = 200000000
t0.addMilliseconds(900); // s = 1, ns = 100000000
t0 -= PISystemTime::fromSeconds(0.1); // s = 1, ns = 0
t0.sleep(); // sleep for 1 second
PISystemTime t1;
t0 = currentSystemTime();
piMSleep(500);
t1 = currentSystemTime();
(t1 - t0).sleep(); // sleep for 500 milliseconds
return 0;
};
//! [system_time]
void _() {
};