git-svn-id: svn://db.shs.com.ru/pip@6 12ceb7fc-bf1f-11e4-8940-5bc7170c53b5
This commit is contained in:
63
doc/examples/pibytearray.cpp
Normal file
63
doc/examples/pibytearray.cpp
Normal 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
26
doc/examples/picli.cpp
Normal 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 _() {
|
||||
};
|
||||
48
doc/examples/picollection.cpp
Normal file
48
doc/examples/picollection.cpp
Normal 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
27
doc/examples/piconfig.cpp
Normal 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]
|
||||
|
||||
};
|
||||
207
doc/examples/picontainers.cpp
Normal file
207
doc/examples/picontainers.cpp
Normal 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
36
doc/examples/picout.cpp
Normal 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]
|
||||
|
||||
|
||||
};
|
||||
31
doc/examples/pievaluator.cpp
Normal file
31
doc/examples/pievaluator.cpp
Normal 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]
|
||||
};
|
||||
55
doc/examples/piincludes.cpp
Normal file
55
doc/examples/piincludes.cpp
Normal 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]
|
||||
|
||||
};
|
||||
53
doc/examples/piiodevice.cpp
Normal file
53
doc/examples/piiodevice.cpp
Normal 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]
|
||||
|
||||
};
|
||||
17
doc/examples/pikbdlistener.cpp
Normal file
17
doc/examples/pikbdlistener.cpp
Normal 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
9
doc/examples/pimutex.cpp
Normal 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
32
doc/examples/piobject.cpp
Normal 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]
|
||||
74
doc/examples/pistatemachine.cpp
Normal file
74
doc/examples/pistatemachine.cpp
Normal 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
332
doc/examples/pistring.cpp
Normal 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
68
doc/examples/pitimer.cpp
Normal 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 _() {
|
||||
|
||||
|
||||
|
||||
};
|
||||
Reference in New Issue
Block a user