diff --git a/main.cpp b/main.cpp index 3b10881c..7061219c 100644 --- a/main.cpp +++ b/main.cpp @@ -1,10 +1,112 @@ #include "pip.h" +#include "piintrospection_server.h" +#include "piintrospection_containers_p.h" +//#include + +class CL: public PIObject { + PIOBJECT(CL) +public: + EVENT_HANDLER1(void, nc, PIEthernet * , client) { + piCout << "client" << client; + } +}; + +PIKbdListener kbd(0, 0, false); +#include +#define PIIS_TYPENAME(t) typeid(t).name() + +template class Name +{ +public: + static const char * name() {return PIIS_TYPENAME(T);} +}; + +PISystemMonitor sys_mon; + + + +class TestRec: public PIObject { + PIOBJECT(TestRec) +public: + EVENT_HANDLER(void, reinitSpec) {piCout << "reinitSpec";int a = 10; (void*)&a;} + + EVENT_HANDLER(void, coeffsChanged) {piCout << "coeffsChanged";} + EVENT_HANDLER(void, guiAboutSend) {piCout << "guiAboutSend";} + EVENT_HANDLER(void, guiAfterSend) {piCout << "guiAfterSend";} + EVENT_HANDLER(void, guiReceived) {piCout << "guiReceived";} + + EVENT_HANDLER(void, playerReceived) {piCout << "playerReceived";int a = 10; (void*)&a;} + + EVENT_HANDLER(void, playerValuesReceived) {piCout << "playerValuesReceived";} + EVENT_HANDLER(void, calculate) {piCout << "calculate";} + EVENT_HANDLER(void, autostart) {piCout << "autostart";} + + EVENT_HANDLER(void, syncOff) {piCout << "syncOff";int a = 10; (void*)&a;} + + EVENT_HANDLER(void, del) {piCout << "DEL";} +}; + +class TestSnd: public PIObject { + PIOBJECT_SUBCLASS(TestSnd, PIObject) +public: + EVENT(reinitSpec) + EVENT(coeffsChanged) + EVENT(guiAboutSend) + EVENT(guiAfterSend) + EVENT(guiReceived) + EVENT(playerReceived) + EVENT(playerValuesReceived) + EVENT(calculate) + EVENT(autostart) + EVENT(syncOff) +}; + +#define CONN(sn) CONNECTU(snd, sn, rec, sn) int main(int argc, char * argv[]) { - PIMap > x; - x[3] << 5; - piCout << x; - x.remove(3); + //sys_mon.startOnSelf(); + + PITimeMeasurer tm; + + TestRec * rec = 0; + TestSnd * snd = 0; + + for (int i = 0; i < 1; ++i) { + if (rec) delete rec; + if (snd) delete snd; + rec = new TestRec(); + snd = new TestSnd(); + } + + CONNECTU(snd, deleted, rec, del) + CONN(reinitSpec) + CONN(coeffsChanged) + CONN(guiAboutSend) + CONN(guiAfterSend) + CONN(guiReceived) + CONN(playerReceived) + CONN(playerValuesReceived) + CONN(calculate) + CONN(autostart) + CONN(syncOff); + + // 0.6 us on call + for (int j = 0; j < 10; ++j) { + tm.reset(); + for (int i = 0; i < 10000; ++i) { + snd->reinitSpec(); + snd->playerReceived(); + snd->syncOff(); + } + double el = tm.elapsed_m(); + piCout << el; + } + + //snd->dump(); + + delete snd; + delete rec; + PIString s; s = "gafaffaf"; piCout << s; @@ -12,4 +114,62 @@ int main(int argc, char * argv[]) { s = "dd"; piCout << s; return 0; + + PIINTROSPECTION_START; + //uint id = standardCRC_32().calculate("6PIChar"); + //PIIntrospectionContainers * ci = PIINTROSPECTION_CONTAINERS->p; + FOREVER { + piMSleep(100); + //piCout << ci->data[id].count << ci->data[id].bytes_allocated << ci->data[id].bytes_used; + } + return 0; + + PICLI cli(argc, argv); + cli.setDebug(false); + cli.addArgument("send"); + //PISystemInfo::machineID(); + kbd.enableExitCapture(); + kbd.start(); + + if (cli.hasArgument("send")) { + /*piCout << "send mode"; + PIEthernet eth; + eth.setSendAddress(cli.rawArguments().back() + ":15123"); + eth.open(); + while (!kbd.exiting) { + eth.send(PIByteArray("test string", 12)); + piMSleep(500); + }*/ + PIEthernet eth(PIEthernet::TCP_Server); + eth.listen(cli.rawArguments().back() + ":15123", true); + //eth.open(); + CL cl; + CONNECTU(ð, newConnection, &cl, nc); + + WAIT_FOR_EXIT; + piCout << "exiting ..."; + + } else { + piCout << "recv mode"; + PIEthernet eth(PIEthernet::TCP_Client); + //eth.setReadAddress(cli.rawArguments().back() + ":15123"); + eth.startThreadedRead(); + int s = eth.socket(); + piCout << s; + piCout << "connect ..."; + eth.connect(cli.rawArguments().back() + /*":13361"*/":15123"); + piCout << "connect done" << eth.isConnected(); + //fcntl(fd, F_SETFL, O_NONBLOCK); + + WAIT_FOR_EXIT; + piCout << "exiting ..."; + + } + /*PIThread t; + t.start(10); + //WAIT_FOR_EXIT; + piSleep(20.); + t.stop(true);*/ + piCout << "exit main ..."; + return 0; } diff --git a/src_main/core/piobject.cpp b/src_main/core/piobject.cpp index bc27af37..fc3fe209 100755 --- a/src_main/core/piobject.cpp +++ b/src_main/core/piobject.cpp @@ -182,14 +182,14 @@ PIStringList PIObject::events() { PIStringList PIObject::scopeList() const { PIMutexLocker ml(__meta_mutex()); - return __meta_data()[className()].scope_list; + return __meta_data()[classNameID()].scope_list; } PIStringList PIObject::methodsEH() const { PIMutexLocker ml(__meta_mutex()); PIStringList ret; - __MetaData & ehd(__meta_data()[className()]); + __MetaData & ehd(__meta_data()[classNameID()]); piForeachC (__EHPair & eh, ehd.eh_func) ret << eh.second.fullFormat(); return ret; @@ -198,7 +198,7 @@ PIStringList PIObject::methodsEH() const { bool PIObject::isMethodEHContains(const PIString & name) const { PIMutexLocker ml(__meta_mutex()); - __MetaData & ehd(__meta_data()[className()]); + __MetaData & ehd(__meta_data()[classNameID()]); piForeachC (__EHPair & eh, ehd.eh_func) if (eh.second.func_name == name) return true; @@ -208,7 +208,7 @@ bool PIObject::isMethodEHContains(const PIString & name) const { PIString PIObject::methodEHArguments(const PIString & name) const { PIMutexLocker ml(__meta_mutex()); - __MetaData & ehd(__meta_data()[className()]); + __MetaData & ehd(__meta_data()[classNameID()]); piForeachC (__EHPair & eh, ehd.eh_func) if (eh.second.func_name == name) return eh.second.arguments(); @@ -218,7 +218,7 @@ PIString PIObject::methodEHArguments(const PIString & name) const { PIString PIObject::methodEHFullFormat(const PIString & name) const { PIMutexLocker ml(__meta_mutex()); - __MetaData & ehd(__meta_data()[className()]); + __MetaData & ehd(__meta_data()[classNameID()]); piForeachC (__EHPair & eh, ehd.eh_func) if (eh.second.func_name == name) return eh.second.fullFormat(); @@ -233,7 +233,7 @@ PIString PIObject::methodEHFromAddr(const void * addr) const { PIVector PIObject::findEH(const PIString & name) const { PIVector<__MetaFunc> ret; - __MetaData & ehd(__meta_data()[className()]); + __MetaData & ehd(__meta_data()[classNameID()]); piForeachC (__EHPair & eh, ehd.eh_func) if (eh.second.func_name == name) ret << eh.second; @@ -243,7 +243,7 @@ PIVector PIObject::findEH(const PIString & name) const { PIObject::__MetaFunc PIObject::methodEH(const void * addr) const { PIMutexLocker ml(__meta_mutex()); - return __meta_data()[className()].eh_func.value(addr); + return __meta_data()[classNameID()].eh_func.value(addr); } @@ -418,12 +418,24 @@ PIMutex & PIObject::__meta_mutex() { } -PIMap & PIObject::__meta_data() { - static PIMap ret; +PIMap & PIObject::__meta_data() { + static PIMap ret; return ret; } +CRC_32 & PIObject::__meta_crc() { + static CRC_32 ret = standardCRC_32(); + return ret; +} + + +uint PIObject::__string_id(const PIString & s) { + if (s.isEmpty()) return 0; + return __meta_crc().calculate(s.toByteArray()); +} + + void PIObject::callQueuedEvents() { mutex_queue.lock(); PIVector<__QueuedEvent> qe = events_queue; @@ -538,7 +550,7 @@ void PIObject::dump(const PIString & line_prefix) const { //printf("dump %d properties ok\n", properties_.size()); PICout(PICoutManipulators::AddNewLine) << line_prefix << " }"; PICout(PICoutManipulators::AddNewLine) << line_prefix << " methods {"; - __MetaData & ehd(__meta_data()[className()]); + __MetaData & ehd(__meta_data()[classNameID()]); PICout(PICoutManipulators::AddNewLine) << line_prefix << " count: " << ehd.eh_func.size_s(); //printf("dump %d methods\n", ehd.eh_func.size()); piForeachC (__EHPair & eh, ehd.eh_func) { diff --git a/src_main/core/piobject.h b/src_main/core/piobject.h index 6d7d68b3..4732839a 100755 --- a/src_main/core/piobject.h +++ b/src_main/core/piobject.h @@ -30,6 +30,7 @@ #include "pimutex.h" #include "piset.h" #include "piqueue.h" +#include "picrc.h" #ifdef DOXYGEN @@ -198,7 +199,9 @@ typedef name __PIObject__; \ public: \ static const PIString __classNameS() {return PIStringAscii(#name);} \ + static const uint __classNameIDS() {static uint ret = __string_id(PIStringAscii(#name)); return ret;} \ virtual const char * className() const {return #name;} \ + virtual const uint classNameID() const {static uint ret = __string_id(PIStringAscii(#name)); return ret;} \ private: \ virtual int ptrOffset() const {name * o = (name*)100; return int(llong((PIObject*)o) - llong(o));} @@ -206,14 +209,15 @@ class __##name##_ParentInitializer__ { \ public: \ __##name##_ParentInitializer__() { \ - PIString pn(name::__classNameS()); \ - if (pn.isEmpty()) return; \ + uint pid = name::__classNameIDS(); \ + if (pid == 0) return; \ + uint id = __classNameIDS(); \ PIMutexLocker ml(__meta_mutex()); \ - if (__meta_data().contains(__classNameS())) return; \ - __meta_data()[pn]; \ - __meta_data()[__classNameS()]; \ - __MetaData & ehp(__meta_data()[pn]); \ - __MetaData & eh(__meta_data()[__classNameS()]); \ + if (__meta_data().contains(id)) return; \ + __meta_data()[pid]; \ + __meta_data()[id]; \ + __MetaData & ehp(__meta_data()[pid]); \ + __MetaData & eh(__meta_data()[id]); \ eh.eh_set << ehp.eh_set; \ eh.eh_func << ehp.eh_func; \ eh.scope_list = ehp.scope_list; \ @@ -234,7 +238,7 @@ public: \ __##name##0_Initializer__() { \ PIMutexLocker ml(__meta_mutex()); \ - __MetaData & eh(__meta_data()[__classNameS()]); \ + __MetaData & eh(__meta_data()[__classNameIDS()]); \ void * fp = (void*)(ret(*)(void*))__stat_eh_##name##__; \ void * fpV = fp; \ if (eh.eh_set[fp]) return; \ @@ -254,7 +258,7 @@ public: \ __##name##1##n0##_Initializer__() { \ PIMutexLocker ml(__meta_mutex()); \ - __MetaData & eh(__meta_data()[__classNameS()]); \ + __MetaData & eh(__meta_data()[__classNameIDS()]); \ void * fp = (void*)(ret(*)(void*, a0))__stat_eh_##name##__; \ void * fpV = (void*)(ret(*)(void*, const PIVariant &))__stat_eh_v_##name##__; \ if (eh.eh_set[fp]) return; \ @@ -276,7 +280,7 @@ public: \ __##name##2##n0##n1##_Initializer__() { \ PIMutexLocker ml(__meta_mutex()); \ - __MetaData & eh(__meta_data()[__classNameS()]); \ + __MetaData & eh(__meta_data()[__classNameIDS()]); \ void * fp = (void*)(ret(*)(void*, a0, a1))__stat_eh_##name##__; \ void * fpV = (void*)(ret(*)(void*, const PIVariant &, const PIVariant &))__stat_eh_v_##name##__; \ if (eh.eh_set[fp]) return; \ @@ -298,7 +302,7 @@ public: \ __##name##3##n0##n1##n2##_Initializer__() { \ PIMutexLocker ml(__meta_mutex()); \ - __MetaData & eh(__meta_data()[__classNameS()]); \ + __MetaData & eh(__meta_data()[__classNameIDS()]); \ void * fp = (void*)(ret(*)(void*, a0, a1, a2))__stat_eh_##name##__; \ void * fpV = (void*)(ret(*)(void*, const PIVariant &, const PIVariant &, const PIVariant &))__stat_eh_v_##name##__; \ if (eh.eh_set[fp]) return; \ @@ -320,7 +324,7 @@ public: \ __##name##4##n0##n1##n2##n3##_Initializer__() { \ PIMutexLocker ml(__meta_mutex()); \ - __MetaData & eh(__meta_data()[__classNameS()]); \ + __MetaData & eh(__meta_data()[__classNameIDS()]); \ void * fp = (void*)(ret(*)(void*, a0, a1, a2, a3))__stat_eh_##name##__; \ void * fpV = (void*)(ret(*)(void*, const PIVariant &, const PIVariant &, const PIVariant &, const PIVariant &))__stat_eh_v_##name##__; \ if (eh.eh_set[fp]) return; \ @@ -416,11 +420,11 @@ #define EVENT_VHANDLER EVENT_VHANDLER0 -#define EVENT0(name) EVENT_HANDLER0(void, name) {PIObject::raiseEvent(this, #name);} -#define EVENT1(name, a0, n0) EVENT_HANDLER1(void, name, a0, n0) {PIObject::raiseEvent(this, #name, n0);} -#define EVENT2(name, a0, n0, a1, n1) EVENT_HANDLER2(void, name, a0, n0, a1, n1) {PIObject::raiseEvent(this, #name, n0, n1);} -#define EVENT3(name, a0, n0, a1, n1, a2, n2) EVENT_HANDLER3(void, name, a0, n0, a1, n1, a2, n2) {PIObject::raiseEvent(this, #name, n0, n1, n2);} -#define EVENT4(name, a0, n0, a1, n1, a2, n2, a3, n3) EVENT_HANDLER4(void, name, a0, n0, a1, n1, a2, n2, a3, n3) {PIObject::raiseEvent(this, #name, n0, n1, n2, n3);} +#define EVENT0(name) EVENT_HANDLER0(void, name) {static uint eid = __string_id(PIStringAscii(#name)); PIObject::raiseEvent(this, eid);} +#define EVENT1(name, a0, n0) EVENT_HANDLER1(void, name, a0, n0) {static uint eid = __string_id(PIStringAscii(#name)); PIObject::raiseEvent(this, eid, n0);} +#define EVENT2(name, a0, n0, a1, n1) EVENT_HANDLER2(void, name, a0, n0, a1, n1) {static uint eid = __string_id(PIStringAscii(#name)); PIObject::raiseEvent(this, eid, n0, n1);} +#define EVENT3(name, a0, n0, a1, n1, a2, n2) EVENT_HANDLER3(void, name, a0, n0, a1, n1, a2, n2) {static uint eid = __string_id(PIStringAscii(#name)); PIObject::raiseEvent(this, eid, n0, n1, n2);} +#define EVENT4(name, a0, n0, a1, n1, a2, n2, a3, n3) EVENT_HANDLER4(void, name, a0, n0, a1, n1, a2, n2, a3, n3) {static uint eid = __string_id(PIStringAscii(#name)); PIObject::raiseEvent(this, eid, n0, n1, n2, n3);} #define EVENT EVENT0 #define RAISE_EVENT0(src, event) (src)->event(); @@ -483,15 +487,17 @@ private: public: - //! Returns object name PIString name() const {return property(PIStringAscii("name")).toString();} //! Returns object class name virtual const char * className() const {return "PIObject";} + virtual const uint classNameID() const {static uint ret = __string_id(PIStringAscii("PIObject")); return ret;} + static const PIString __classNameS() {return PIStringAscii("PIObject");} - + static const uint __classNameIDS() {static uint ret = __string_id(PIStringAscii("PIObject")); return ret;} + //! Returns parent object class name virtual const char * parentClassName() const {return "";} @@ -566,33 +572,6 @@ public: PIString methodEHFullFormat(const PIString & name) const; PIString methodEHFromAddr(const void * addr) const; - /* - template - static void piConnectU(PIObject * src, RS(*sig)(void*), PIObject * dest, RD(*slt)(void*), PIString signame) { - src->connections << PIObject::Connection((void*)slt, (void*)sig, signame, dest); - } - template - static void piConnectU(PIObject * src, RS(*sig)(void*,A0), PIObject * dest, RD(*slt)(void*,A0), PIString signame) { - src->connections << PIObject::Connection((void*)slt, (void*)sig, signame, dest); - } - template - static void piConnectU(PIObject * src, RS(*sig)(void*,A0,A1), PIObject * dest, RD(*slt)(void*,A0,A1), PIString signame) { - src->connections << PIObject::Connection((void*)slt, (void*)sig, signame, dest); - } - template - static void piConnectU(PIObject * src, RS(*sig)(void*,A0,A1,A2), PIObject * dest, RD(*slt)(void*,A0,A1,A2), PIString signame) { - src->connections << PIObject::Connection((void*)slt, (void*)sig, signame, dest); - } - template - static void piConnectU(PIObject * src, RS(*sig)(void*,A0,A1,A2,A3), PIObject * dest, RD(*slt)(void*,A0,A1,A2,A3), PIString signame) { - src->connections << PIObject::Connection((void*)slt, (void*)sig, signame, dest); - } - template - static void piConnectU(PIObject * src, RS(*sig)(void*,A0,A1,A2,A3,A4), PIObject * dest, RD(*slt)(void*,A0,A1,A2,A3,A4), PIString signame) { - src->connections << PIObject::Connection((void*)slt, (void*)sig, signame, dest); - } - */ - // / Direct connect static void piConnect(PIObject * src, const PIString & sig, PIObject * dest_o, void * dest, void * ev_h, void * e_h, int args, const char * loc); static bool piConnectU(PIObject * src, const PIString & ename, PIObject * dest_o, void * dest, const PIString & hname, const char * loc, PIObject * performer = 0); @@ -613,10 +592,10 @@ public: static void piDisconnect(PIObject * src); // / Raise events - static void raiseEvent(PIObject * sender, const char * event) { + static void raiseEvent(PIObject * sender, const uint eventID) { for (int j = 0; j < sender->connections.size_s(); ++j) { __Connection & i(sender->connections[j]); - if (strcmp(i.event.dataAscii(), event) != 0) continue; + if (i.eventID != eventID) continue; if (i.performer) { i.performer->postQueuedEvent(__QueuedEvent(i.slot, i.dest, i.dest_o, sender)); } else { @@ -630,10 +609,10 @@ public: } template - static void raiseEvent(PIObject * sender, const char * event, const T0 & v0 = T0()) { + static void raiseEvent(PIObject * sender, const uint eventID, const T0 & v0 = T0()) { for (int j = 0; j < sender->connections.size_s(); ++j) { __Connection & i(sender->connections[j]); - if (strcmp(i.event.dataAscii(), event) != 0) continue; + if (i.eventID != eventID) continue; if (i.performer) { PIVector vl; if (i.args_count > 0) vl << PIVariant::fromValue(v0); @@ -649,10 +628,10 @@ public: } } template - static void raiseEvent(PIObject * sender, const char * event, const T0 & v0 = T0(), const T1 & v1 = T1()) { + static void raiseEvent(PIObject * sender, const uint eventID, const T0 & v0 = T0(), const T1 & v1 = T1()) { for (int j = 0; j < sender->connections.size_s(); ++j) { __Connection & i(sender->connections[j]); - if (strcmp(i.event.dataAscii(), event) != 0) continue; + if (i.eventID != eventID) continue; if (i.performer) { PIVector vl; if (i.args_count > 0) vl << PIVariant::fromValue(v0); @@ -672,10 +651,10 @@ public: } } template - static void raiseEvent(PIObject * sender, const char * event, const T0 & v0 = T0(), const T1 & v1 = T1(), const T2 & v2 = T2()) { + static void raiseEvent(PIObject * sender, const uint eventID, const T0 & v0 = T0(), const T1 & v1 = T1(), const T2 & v2 = T2()) { for (int j = 0; j < sender->connections.size_s(); ++j) { __Connection & i(sender->connections[j]); - if (strcmp(i.event.dataAscii(), event) != 0) continue; + if (i.eventID != eventID) continue; if (i.performer) { PIVector vl; if (i.args_count > 0) vl << PIVariant::fromValue(v0); @@ -697,10 +676,10 @@ public: } } template - static void raiseEvent(PIObject * sender, const char * event, const T0 & v0 = T0(), const T1 & v1 = T1(), const T2 & v2 = T2(), const T3 & v3 = T3()) { + static void raiseEvent(PIObject * sender, const uint eventID, const T0 & v0 = T0(), const T1 & v1 = T1(), const T2 & v2 = T2(), const T3 & v3 = T3()) { for (int j = 0; j < sender->connections.size_s(); ++j) { __Connection & i(sender->connections[j]); - if (strcmp(i.event.dataAscii(), event) != 0) continue; + if (i.eventID != eventID) continue; if (i.performer) { PIVector vl; if (i.args_count > 0) vl << PIVariant::fromValue(v0); @@ -723,54 +702,6 @@ public: } } } - - /* - // / Raise events through manager - static void raiseEvent(const PIString & destObject, const PIString & name) { - PIObject * dest = findByName(destObject); - if (dest == 0) { - cout << "PIObject::piConnect: can`t find PIObject with \"" << destObject << "\" name!" << endl; - return; - } - raiseEvent(dest, name); - } - template - static void raiseEvent(const PIString & destObject, const PIString & name, const T0 & v0 = T0()) { - PIObject * dest = findByName(destObject); - if (dest == 0) { - cout << "PIObject::piConnect: can`t find PIObject with \"" << destObject << "\" name!" << endl; - return; - } - raiseEvent(dest, name, v0); - } - template - static void raiseEvent(const PIString & destObject, const PIString & name, const T0 & v0 = T0(), const T1 & v1 = T1()) { - PIObject * dest = findByName(destObject); - if (dest == 0) { - cout << "PIObject::piConnect: can`t find PIObject with \"" << destObject << "\" name!" << endl; - return; - } - raiseEvent(dest, name, v0, v1); - } - template - static void raiseEvent(const PIString & destObject, const PIString & name, const T0 & v0 = T0(), const T1 & v1 = T1(), const T2 & v2 = T2()) { - PIObject * dest = findByName(destObject); - if (dest == 0) { - cout << "PIObject::piConnect: can`t find PIObject with \"" << destObject << "\" name!" << endl; - return; - } - raiseEvent(name, dest, v0, v1, v2); - } - template - static void raiseEvent(const PIString & destObject, const PIString & name, const T0 & v0 = T0(), const T1 & v1 = T1(), const T2 & v2 = T2(), const T3 & v3 = T3()) { - PIObject * dest = findByName(destObject); - if (dest == 0) { - cout << "PIObject::piConnect: can`t find PIObject with \"" << destObject << "\" name!" << endl; - return; - } - raiseEvent(name,dest , v0, v1, v2, v3); - } - */ //! Returns PIObject* with name "name" or 0, if there is no object found static PIObject * findByName(const PIString & name) { @@ -826,7 +757,10 @@ public: typedef PIPair __EHPair; static PIMutex & __meta_mutex(); - static PIMap & __meta_data(); // [classname]=__MetaData + static PIMap & __meta_data(); // [__string_id(classname)]=__MetaData + + static CRC_32 & __meta_crc(); + static uint __string_id(const PIString & s); //! \brief Execute all posted events from CONNECTU_QUEUED connections void callQueuedEvents(); @@ -862,6 +796,7 @@ private: slot = sl; signal = si; event = e; + eventID = __string_id(e); dest_o = d_o; dest = d; args_count = ac; @@ -870,6 +805,7 @@ private: void * slot; void * signal; PIString event; + uint eventID; PIObject * dest_o; PIObject * performer; void * dest; diff --git a/src_main/piversion.h b/src_main/piversion.h index adf67699..180079e6 100644 --- a/src_main/piversion.h +++ b/src_main/piversion.h @@ -4,6 +4,6 @@ #define PIP_VERSION_MAJOR 1 #define PIP_VERSION_MINOR 10 #define PIP_VERSION_REVISION 0 -#define PIP_VERSION_SUFFIX "_alpha" +#define PIP_VERSION_SUFFIX "_beta" #endif // PIVERSION_H