From: <dg...@us...> - 2003-05-14 22:46:15
|
Update of /cvsroot/okernel/nrtl In directory sc8-pr-cvs1:/tmp/cvs-serv26819 Modified Files: kclass.cpp knetobject.cpp nrtl.h Log Message: More on NetObject ... Index: kclass.cpp =================================================================== RCS file: /cvsroot/okernel/nrtl/kclass.cpp,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** kclass.cpp 14 May 2003 20:35:14 -0000 1.3 --- kclass.cpp 14 May 2003 22:46:12 -0000 1.4 *************** *** 110,113 **** --- 110,143 ---- } + #if defined(NTRL_NETWORK) + + void Object::clone(const Object& obj) + { + NetBuffer n(obj.toBuffer()); + netRead(n); + } + + void Object::clear() + { + NetBuffer n; + netRead(n); // read will fill with 0 because NetBuffer is empty + } + + Buffer& Object::toBuffer() const + { + NetBuffer n (netSize()); // allocate space + netWrite(n); + return n.buffer(); + } + + size_t Object::netSize() const + { + NetBuffer n; + netWrite(n); // attempt to write on an empty NetBuffer + return n.bytesWritten(); + } + + #endif + // =========================================================================== // _Error Class Index: knetobject.cpp =================================================================== RCS file: /cvsroot/okernel/nrtl/knetobject.cpp,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** knetobject.cpp 14 May 2003 21:20:41 -0000 1.1 --- knetobject.cpp 14 May 2003 22:46:12 -0000 1.2 *************** *** 56,63 **** // =========================================================================== ! // InternalBuffer Class // =========================================================================== ! InternalBuffer::InternalBuffer(int n, const jbyte* s) { refs = 0; --- 56,63 ---- // =========================================================================== ! // Buffer Class // =========================================================================== ! Buffer::Buffer(size_t n, const jbyte* s) { refs = 0; *************** *** 66,70 **** } ! jpointer InternalBuffer::operator new(size_t cs, size_t us) { return new jbyte[cs+us]; --- 66,70 ---- } ! jpointer Buffer::operator new(size_t cs, size_t us) { return new jbyte[cs+us]; *************** *** 83,88 **** NetBuffer::NetBuffer(size_t asize) { ! buf = new(asize) InternalBuffer(asize,NULL); reset(); } --- 83,150 ---- NetBuffer::NetBuffer(size_t asize) { ! buf = new(asize) Buffer(asize,NULL); ! if (!buf) errno = ENOMEM; reset(); + } + + NetBuffer::NetBuffer(const Buffer &abuf) + { + buf = new(abuf.len) Buffer(abuf.len,abuf.body); + if (!buf) errno = ENOMEM; + reset(); + } + + NetBuffer::NetBuffer(const jbyte* abuf,size_t asize) + { + buf = new(asize) Buffer(asize,abuf); + if (!buf) errno = ENOMEM; + reset(); + } + + // =========================================================================== + // put() + // =========================================================================== + + void NetBuffer::put(const jbyte* abuf,size_t asize) + { + if ( (writeCounter + asize) <= size() ) { + memcpy(&buf->body[writeCounter],abuf,asize); + } + writeCounter += asize; + } + + // =========================================================================== + // get() + // =========================================================================== + + jbool NetBuffer::get(jbyte* abuf,size_t asize) + { + jbool bRet = jtrue; + + if ( (readCounter + asize) <= size() ) { + memcpy(abuf,&buf->body[readCounter],asize); + } else { + bRet = jfalse; + } + readCounter += asize; + + return bRet; + } + + // =========================================================================== + // resize() + // =========================================================================== + + void NetBuffer::resize(size_t asize) + { + Buffer* nbuf = new(asize) Buffer(asize,NULL); + + if (nbuf) { + memcpy(nbuf->body,buf->body,min(buf->len,nbuf->len)); + delete buf; + buf = nbuf; + } else { + errno = ENOMEM; + } } Index: nrtl.h =================================================================== RCS file: /cvsroot/okernel/nrtl/nrtl.h,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** nrtl.h 14 May 2003 21:35:39 -0000 1.6 --- nrtl.h 14 May 2003 22:46:12 -0000 1.7 *************** *** 222,235 **** // =========================================================================== ! // Internal Buffer class // =========================================================================== #if defined(NTRL_NETWORK) ! class InternalBuffer { private: ! InternalBuffer(int,const jbyte* s); ! jpointer operator new(size_t cs, size_t ss = 0); int refs; // number of references --- 222,238 ---- // =========================================================================== ! // Buffer class // =========================================================================== #if defined(NTRL_NETWORK) ! class Buffer { private: ! Buffer(size_t,const jbyte* s); ! ! jpointer operator new(size_t cs, size_t ss = 0); ! ! void resize(size_t asize); int refs; // number of references *************** *** 239,243 **** friend class NetBuffer; ! }; // InternalBuffer Class #endif --- 242,246 ---- friend class NetBuffer; ! }; // Buffer Class #endif *************** *** 257,272 **** NetBuffer(size_t asize = 0); ! size_t size() const { return buf?buf->len:0; } ! size_t bytesRead() const { return readCounter; } ! size_t bytesWritten() const { return writeCounter; } private: ! InternalBuffer *buf; ! size_t readCounter; ! size_t writeCounter; }; // NetBuffer Class #endif --- 260,363 ---- NetBuffer(size_t asize = 0); + NetBuffer(const Buffer &abuf); + NetBuffer(const jbyte* abuf,size_t asize); ! size_t size() const { return buf?buf->len:0; } ! void resize(size_t asize); ! size_t bytesRead() const { return readCounter; } ! size_t bytesWritten() const { return writeCounter; } ! ! jbool get(jbyte* abuf,size_t asize); ! void put(const jbyte* abuf,size_t asize); ! ! const Buffer& buffer() const { return *buf; } ! Buffer& buffer() { return *buf; } ! ! jbyte& operator[](int i) const { return *(buf->body+i); } private: ! Buffer *buf; ! size_t readCounter; ! size_t writeCounter; }; // NetBuffer Class + inline int operator == (const NetBuffer& n1, const NetBuffer& n2) + { + return ( (n1.size()==n2.size()) && (memcmp(&n1[0],&n2[0],n1.size())==0) ); + } + + inline NetBuffer& operator<< (NetBuffer &n, jchar a) + { + n.put(reinterpret_cast<jbyte*>(&a),sizeof(jchar)); + return n; + } + + inline NetBuffer& operator>> (NetBuffer &n, jchar& a) + { + if (!n.get(reinterpret_cast<jbyte*>(&a),sizeof(jchar))) a = 0; + return n; + } + + inline NetBuffer& operator<< (NetBuffer &n, jbyte a) + { + n.put(reinterpret_cast<jbyte*>(&a),sizeof(jbyte)); + return n; + } + + inline NetBuffer& operator>> (NetBuffer &n, jbyte& a) + { + if (!n.get(reinterpret_cast<jbyte*>(&a),sizeof(jbyte))) a = 0; + return n; + } + + inline NetBuffer& operator<< (NetBuffer &n, jint16 a) + { + n.put(reinterpret_cast<jbyte*>(&a),sizeof(jint16)); + return n; + } + + inline NetBuffer& operator>> (NetBuffer &n, jint16& a) + { + if (!n.get(reinterpret_cast<jbyte*>(&a),sizeof(jint16))) a = 0; + return n; + } + + inline NetBuffer& operator<< (NetBuffer &n, jint32 a) + { + n.put(reinterpret_cast<jbyte*>(&a),sizeof(jint32)); + return n; + } + + inline NetBuffer& operator>> (NetBuffer &n, jint32& a) + { + if (!n.get(reinterpret_cast<jbyte*>(&a),sizeof(jint32))) a = 0; + return n; + } + + inline NetBuffer& operator<< (NetBuffer &n, jint8 a) + { + n.put(reinterpret_cast<jbyte*>(&a),sizeof(jint8)); + return n; + } + + inline NetBuffer& operator>> (NetBuffer &n, jint8& a) + { + if (!n.get(reinterpret_cast<jbyte*>(&a),sizeof(jint8))) a = 0; + return n; + } + + inline NetBuffer& operator<< (NetBuffer &n, const NetBuffer& a) + { + n.put(&a[0],a.size()); + return n; + } + + inline NetBuffer& operator>> (NetBuffer &n, NetBuffer& a) + { + n.get (&a[0],a.size()); + return n; + } + #endif *************** *** 311,316 **** --- 402,414 ---- #if defined(NTRL_NETWORK) protected: + virtual void netWrite(NetBuffer& b) const {} /* = 0; */ + virtual void netRead(NetBuffer& b) {} /* = 0; */ + void clone(const Object& obj); + void clear(); public: + + Buffer& toBuffer() const; + size_t netSize() const; #endif |