first try

This commit is contained in:
2022-05-09 14:21:38 +03:00
parent a502182eba
commit af77974e91

340
main.cpp
View File

@@ -1,235 +1,161 @@
#include "pip.h" #include "pip.h"
static const char * smallstr = "abcdef";
static const char * bigstr = "zsxdcgfhvbncjdbasljcvavcjadnwnxudvbabdhjlavudvdaljsvclavjlasdhvcjhldsavhjldasvfjlhsavdjhavdjhvfjhldasvfjlasvfhjldasvfhjasvfdjdasfhvjldasvhfjlasvfhjlahsvdfhjfvfvdjalsvfjlhasdvfdjsalvfhhjldasvfdjhaldsvfhjdvsfjhlavfjhlavfladlsvfjlasdvfdhjlavfhjldasvfhjlavfhjldvfhjlalsdvfjlhvasfhjlvchjlavchjladvchjldladvschjlladscvjlhdcahjchjllcahjllvcdjladsvhldbcljadsbcjdhlsachjlvdsa hjlcldajc hljdascbhaldb cldhashd l cajlhs chdsbfhlbfdasdffadsfjkbfkjldsabflhbcldhsbhclabchljadsbchldahsbcladsbhclhabhasbclasbdhl";
PIKbdListener kbd(0, 0, false);
#include <iostream>
#include <codecvt>
using namespace PICoutManipulators; using namespace PICoutManipulators;
int main(int argc, char * argv[]) {
/*PIVariant vi;
piCout << vi;
vi = 1;
piCout << vi << vi.toString();
vi = "string";
piCout << vi << vi.toStringList();
vi = PIStringList("2");
piCout << vi << vi.toInt();*/
/*auto cmp = [](const PIConstChars & c0, const PIConstChars & c1){ template<typename P>
PICout(DefaultControls) << c0 << "==" << c1 << "->" << (c0 != c1); class BinaryStream {
public:
BinaryStream(P & parent): p(parent) {}
void append(const void * d, size_t s) {p.appendImp(d, s);}
void append(int i) {append(&i, sizeof(i));}
void append(uchar byte) {p.appendImp(byte);}
void take(void * d, size_t s) {p.takeImp(d, s);}
uchar takeByte() {return p.takeByteImp();}
int takeInt() {int r = 0; take(&r, sizeof(r)); return r;}
private:
P & p;
}; };
PIConstChars s;
PICout(DefaultControls | AddQuotes) << s;
s = PIConstChars("str", 2);
PICout(DefaultControls | AddQuotes) << s;
cmp(PIConstChars(), PIConstChars());
cmp(PIConstChars("str"), PIConstChars());
cmp(PIConstChars(), PIConstChars("s_tr"));
cmp(PIConstChars("str1"), PIConstChars("str"));
cmp(PIConstChars("str"), PIConstChars("str2"));
cmp(PIConstChars("str"), PIConstChars("sTr"));
cmp(PIConstChars("str"), PIConstChars("str"));
cmp(PIConstChars("1a"), PIConstChars("1b"));
cmp(PIConstChars("1c"), PIConstChars("1b"));*/
/*PIMap<PIConstChars, int> map; template<typename P>
map[PIConstChars()] = 0; class BinaryStreamRef {
map[PIConstChars()] = -1; public:
map["_2"] = 22; BinaryStreamRef(BinaryStream<P> & s): p(s) {}
map["1"] = 11; BinaryStream<P> & ref() {return p;}
map["__3"] = 33; BinaryStream<P> & p;
map["10"] = 10; };
map[""] = 999;
piCout << map;
piCout << PIConstChars().toString();
piCout << PIConstChars("").toString();
piCout << PIConstChars("str").toString();
PIConstChars s = " 1 2 \t";
piCout << "trim:";
PICout(DefaultControls | AddQuotes) << s.trimmed();
PICout(DefaultControls | AddQuotes) << s;
PICout(DefaultControls | AddQuotes) << s.isEmpty();*/
/*piCout << PIIODevice::availablePrefixes(); template<typename P, typename T> inline BinaryStream<P> & operator <<(BinaryStreamRef<P> s, const T & v) {s.ref() << v; return s.p;}
auto * d = PIIODevice::createFromFullPath("ser://COM1"); template<typename P, typename T> inline BinaryStream<P> & operator >>(BinaryStreamRef<P> s, T & v) {s.ref() >> v; return s.p;}
piCout << "";
piCout << d;
d->dump();
d = PIIODevice::createFromFullPath("eth://udp:127.0.0.1:5000");
piCout << "";
piCout << d;
d->dump();*/
piCout << ""; template<typename P> inline BinaryStream<P> & operator <<(BinaryStream<P> & s, const bool v) {s.append((uchar)v); return s;}
dumpApplication(); template<typename P> inline BinaryStream<P> & operator <<(BinaryStream<P> & s, const char v) {s.append((uchar)v); return s;}
template<typename P> inline BinaryStream<P> & operator <<(BinaryStream<P> & s, const uchar v) {s.append((uchar)v); return s;}
template<typename P, typename T, typename std::enable_if< std::is_trivially_copyable<T>::value, int>::type = 0>
inline BinaryStreamRef<P> operator <<(BinaryStream<P> & s, const T & v) {
s.append(&v, sizeof(v));
return s;
}
return 0; template<typename P> inline BinaryStream<P> & operator >>(BinaryStream<P> & s, bool & v) {v = s.takeByte(); return s;}
template<typename P> inline BinaryStream<P> & operator >>(BinaryStream<P> & s, char & v) {v = s.takeByte(); return s;}
template<typename P> inline BinaryStream<P> & operator >>(BinaryStream<P> & s, uchar & v) {v = s.takeByte(); return s;}
template<typename P, typename T, typename std::enable_if< std::is_trivially_copyable<T>::value, int>::type = 0>
inline BinaryStreamRef<P> operator >>(BinaryStream<P> & s, T & v) {
s.take(&v, sizeof(v));
return s;
}
auto rstr = PIString::fromUTF8("ascii русский!");
/*for (PIChar c: rstr)
std::wcout << c.toWChar();
std::wcout << std::endl;*/
piCout << PIChar::fromUTF8("");
piCout << PICoutManipulators::Hex << (int)PIChar::fromUTF8("").toWChar();
piCout << rstr;
/*char rs[] = "й"; //! \~english Store operator for PIVector of any trivial copyable type
piCout << PIString(PIChar::fromUTF8(rs)); //! \~russian Оператор сохранения для PIVector тривиальных типов
std::cout << sizeof(rs) << " chars "; template<typename P, typename T,
for (int i = 0; i < sizeof(rs); ++i) typename std::enable_if< std::is_trivially_copyable<T>::value, int>::type = 0,
std::cout << "'" << (char)(rs[i]) << "' " << (int)(uchar)(rs[i]); typename std::enable_if< std::is_same<decltype(std::declval<BinaryStream<P>&>() << std::declval<const T &>()), BinaryStreamRef<P>>::value, int>::type = 0>
std::cout << std::endl; inline BinaryStream<P> & operator <<(BinaryStream<P> & s, const PIVector<T> & v) {
CONNECTL(&kbd, keyPressed, ([](PIKbdListener::KeyEvent k, void*){ piCout << "<< vector trivial default";
; s.append((int)v.size());
piCout << k.key << PIChar((ushort)k.key); s.append(v.data(), v.size() * sizeof(T));
})); return s;
kbd.start();
WAIT_FOR_EXIT;*/
//return 0;
static const int cc = 1000000;
PITimeMeasurer tm;
int l = 0;
tm.reset();
for(int i=0; i<cc; ++i) {
PIString s(smallstr);
l = s.size();
} }
piCout << l << "PIString()" << tm.elapsed_m(); template<typename P, typename T,
tm.reset(); typename std::enable_if< std::is_trivially_copyable<T>::value, int>::type = 0,
for(int i=0; i<cc; ++i) { typename std::enable_if<!std::is_same<decltype(std::declval<BinaryStream<P>&>() << std::declval<const T &>()), BinaryStreamRef<P>>::value, int>::type = 0>
PIString s = smallstr; inline BinaryStream<P> & operator <<(BinaryStream<P> & s, const PIVector<T> & v) {
l = s.size(); piCout << "<< vector trivial custom";
s.append((int)v.size());
for (const auto & i: v) s << i;
return s;
} }
piCout << l << "PIString =" << tm.elapsed_m();
tm.reset();
for(int i=0; i<cc; ++i) {
PIString s = PIStringAscii(smallstr);
l = s.size();
}
piCout << l << "PIStringAscii" << tm.elapsed_m();
tm.reset();
for(int i=0; i<cc; ++i) {
PIString s;
s += smallstr;
s += "1";
l = s.size();
}
piCout << l << "PIString + PIString" << tm.elapsed_m();
tm.reset();
for(int i=0; i<cc; ++i) {
PIString s = PIStringAscii(smallstr) + "1";
l = s.size();
}
piCout << l << "PIStringAscii + PIString" << tm.elapsed_m();
tm.reset();
for(int i=0; i<cc; ++i) {
PIString s = PIString::fromUTF8(smallstr);
l = s.size();
}
piCout << l << "PIString::fromUTF8" << tm.elapsed_m();
tm.reset();
for(int i=0; i<cc; ++i) {
PIString s = PIString::fromSystem(smallstr);
l = s.size();
}
piCout << l << "PIString::fromSystem" << tm.elapsed_m();
tm.reset();
for(int i=0; i<cc; ++i) {
PIString s = PIString::fromAscii(smallstr);
l = s.size();
}
piCout << l << "PIString::fromAscii" << tm.elapsed_m();
tm.reset();
for(int i=0; i<cc; ++i) { //! \~english Restore operator for PIVector of any trivial copyable type
PIString s(bigstr); //! \~russian Оператор извлечения для PIVector тривиальных типов
l = s.size(); template<typename P, typename T,
typename std::enable_if< std::is_trivially_copyable<T>::value, int>::type = 0,
typename std::enable_if< std::is_same<decltype(std::declval<BinaryStream<P>&>() >> std::declval<T &>()), BinaryStreamRef<P>>::value, int>::type = 0>
inline BinaryStream<P> & operator >>(BinaryStream<P> & s, PIVector<T> & v) {
piCout << ">> vector trivial default";
int sz = s.takeInt();
v._resizeRaw(sz);
if (sz > 0)
s.take(v.data(), sz*sizeof(T));
return s;
} }
piCout << l << "PIString()" << tm.elapsed_m(); template<typename P, typename T,
tm.reset(); typename std::enable_if< std::is_trivially_copyable<T>::value, int>::type = 0,
for(int i=0; i<cc; ++i) { typename std::enable_if<!std::is_same<decltype(std::declval<BinaryStream<P>&>() >> std::declval<T &>()), BinaryStreamRef<P>>::value, int>::type = 0>
PIString s = bigstr; inline BinaryStream<P> & operator >>(BinaryStream<P> & s, PIVector<T> & v) {
l = s.size(); piCout << ">> vector trivial custom";
int sz = s.takeInt();
v._resizeRaw(sz);
for (int i = 0; i < sz; ++i) s >> v[i];
return s;
} }
piCout << l << "PIString =" << tm.elapsed_m();
tm.reset();
for(int i=0; i<cc; ++i) { class ByteArray: public BinaryStream<ByteArray> {
PIString s = PIStringAscii(bigstr); public:
l = s.size(); ByteArray(): BinaryStream<ByteArray>(*this) {}
PIByteArray data;
void appendImp(const void * d, size_t s) {
data.append(d, s);
} }
piCout << l << "PIStringAscii" << tm.elapsed_m(); void appendImp(uchar byte) {
tm.reset(); data.append(byte);
for(int i=0; i<cc; ++i) {
PIString s;
s += bigstr;
s += "1";
l = s.size();
} }
piCout << l << "PIString + PIString" << tm.elapsed_m(); void takeImp(void * d, size_t s) {
tm.reset(); memcpy(d, data.data(), s);
for(int i=0; i<cc; ++i) { data.remove(0, s);
PIString s = PIStringAscii(bigstr) + "1";
l = s.size();
} }
piCout << l << "PIStringAscii + PIString" << tm.elapsed_m(); uchar takeByteImp() {
tm.reset(); return data.take_front();
for(int i=0; i<cc; ++i) {
PIString s = PIString::fromUTF8(bigstr);
l = s.size();
} }
piCout << l << "PIString::fromUTF8" << tm.elapsed_m(); };
tm.reset();
for(int i=0; i<cc; ++i) { class File: public BinaryStream<File> {
PIString s = PIString::fromSystem(bigstr); public:
l = s.size(); File(): BinaryStream<File>(*this) {}
PIFile file;
void appendImp(const void * d, size_t s) {
file.write(d, s);
} }
piCout << l << "PIString::fromSystem" << tm.elapsed_m(); void appendImp(uchar byte) {
tm.reset(); file.writeBinary(byte);
for(int i=0; i<cc; ++i) {
PIString s = PIString::fromAscii(bigstr);
l = s.size();
} }
piCout << l << "PIString::fromAscii" << tm.elapsed_m(); void takeImp(void * d, size_t s) {
PIString is = PIString::fromAscii(bigstr); file.read(d, s);
tm.reset();
for(int i=0; i<cc; ++i) {
l = is.toByteArray().size();
} }
piCout << l << "PIString::toByteArray" << tm.elapsed_m(); uchar takeByteImp() {
PIByteArray ba = is.toByteArray(); return (uchar)file.readChar();
tm.reset();
for(int i=0; i<cc; ++i) {
PIString s = PIString::fromUTF8(ba);
l = s.size();
} }
piCout << l << "PIString::fromByteArray" << tm.elapsed_m(); };
tm.reset();
for(int i=0; i<cc; ++i) {
PIString s = PIString::fromNumber(ba.size()); struct TS {
l = s.size(); TS(int v0 = -1, float v1 = -1){i = v0; f = v1;}
} int i;
piCout << l << "PIString::fromNumber" << tm.elapsed_m(); float f;
tm.reset(); };
for(int i=0; i<cc; ++i) { PICout operator << (PICout c, const TS & v) {c << '{' << v.i << ", " << v.f << '}'; return c;}
PIString s = is;
l = s.size(); template<typename P> inline BinaryStream<P> & operator <<(BinaryStream<P> & s, const TS & v) {s << v.i; return s;}
} template<typename P> inline BinaryStream<P> & operator >>(BinaryStream<P> & s, TS & v) {s >> v.i; return s;}
piCout << l << "PIString::assign empty" << tm.elapsed_m();
PIString is2 = PIString::fromUTF8(ba); int main(int argc, char * argv[]) {
tm.reset(); //ByteArray ba;
for(int i=0; i<cc; ++i) { File f;
PIString s = is; f.file.open("_", PIIODevice::ReadWrite);
l = s.size(); f.file.clear();
s = is2; PIVector<TS> vi({TS(1,20), TS(3,40)});
l += s.size(); f << vi;
} //piCout << "s" << ba.data;
piCout << l << "PIString::assign non empty" << tm.elapsed_m(); vi.fill(TS());
vi.clear();
f.file.seekToBegin();
f >> vi;
piCout << "data" << vi;
//piCout << "r" << ba.data;
return 0; return 0;
} }