fixed many const releated problems

This commit is contained in:
Jeff Hill
1999-05-10 23:42:25 +00:00
parent 4ff595f7b5
commit f6dff37fc1
7 changed files with 190 additions and 72 deletions

View File

@@ -4,6 +4,9 @@
// $Id$
//
// $Log$
// Revision 1.28 1999/05/03 17:33:02 jhill
// derive from gddDestructor so that same form of new and delete are used
//
// Revision 1.27 1999/04/30 15:24:53 jhill
// fixed improper container index bug
//
@@ -523,13 +526,13 @@ gddStatus gdd::copyStuff(gdd* dd,int ctype)
size_t gdd::getDataSizeBytes(void) const
{
size_t sz=0;
gdd* pdd;
const gdd* pdd;
aitString* str;
if(isContainer())
{
const gddContainer* cdd=(const gddContainer*)this;
gddCursor cur=cdd->getCursor();
constGddCursor cur=cdd->getCursor();
for(pdd=cur.first();pdd;pdd=cur.next())
sz+=pdd->getTotalSizeBytes();
}
@@ -567,7 +570,7 @@ size_t gdd::getTotalSizeBytes(void) const
{
size_t sz;
unsigned long tsize;
gdd* pdd;
const gdd* pdd;
// add up size of bounds + size of this DD
sz=sizeof(gdd)+(sizeof(gddBounds)*dimension());
@@ -602,7 +605,7 @@ size_t gdd::getTotalSizeBytes(void) const
else if(isContainer())
{
const gddContainer* cdd=(const gddContainer*)this;
gddCursor cur=cdd->getCursor();
constGddCursor cur=cdd->getCursor();
for(pdd=cur.first();pdd;pdd=cur.next())
sz+=pdd->getTotalSizeBytes();
}
@@ -1354,7 +1357,7 @@ gddStatus gdd::put(const gdd* dd)
return rc;
}
size_t gdd::outHeader(void* buf,aitUint32 bufsize)
size_t gdd::outHeader(void* buf,aitUint32 bufsize) const
{
// simple encoding for now.. will change later
// this is the SLOW, simple version
@@ -1413,7 +1416,7 @@ size_t gdd::outHeader(void* buf,aitUint32 bufsize)
}
return sz;
}
size_t gdd::outData(void* buf,aitUint32 bufsize, aitEnum e, aitDataFormat f)
size_t gdd::outData(void* buf,aitUint32 bufsize, aitEnum e, aitDataFormat f) const
{
// put data into user's buffer in the format that the user wants (e/f).
// if e is invalid, then use whatever format this gdd describes.
@@ -1434,7 +1437,7 @@ size_t gdd::outData(void* buf,aitUint32 bufsize, aitEnum e, aitDataFormat f)
return len;
}
size_t gdd::out(void* buf,aitUint32 bufsize,aitDataFormat f)
size_t gdd::out(void* buf,aitUint32 bufsize,aitDataFormat f) const
{
size_t index = outHeader(buf,bufsize);
size_t rc;

View File

@@ -8,6 +8,9 @@
* $Id$
*
* $Log$
* Revision 1.26 1999/04/30 15:24:53 jhill
* fixed improper container index bug
*
* Revision 1.25 1998/05/05 21:09:52 jhill
* removed backslash which conuses cpp
*
@@ -112,7 +115,6 @@
# include <stdlib.h>
#elif defined(vxWorks)
# include <time.h>
# include <timers.h> // for timespec under v51 vxWorks
#elif defined(UNIX)
// hopefully a posix compliant OS
# include <stdlib.h>
@@ -133,6 +135,10 @@ class gddContainer;
class gddArray;
class gddScalar;
struct TS_STAMP;
class osiTime;
struct timespec;
// Not Complete in this prototype:
// - Read only DD.
// - Small array management using free lists
@@ -199,8 +205,9 @@ public:
const aitType& getData(void) const;
aitType* dataUnion(void);
const aitType* dataUnion(void) const;
gddDestructor* destructor(void) const;
const gddDestructor* destructor(void) const;
gdd* next(void);
const gdd* next(void) const;
void setNext(gdd*);
const gddBounds* getBounds(void) const;
@@ -220,19 +227,29 @@ public:
gddStatus getBound(unsigned dim_to_get, aitIndex& first, aitIndex& count) const;
gddStatus registerDestructor(gddDestructor*);
gddStatus replaceDestructor(gddDestructor*);
void* dataVoid(void) const;
void* dataAddress(void) const;
void* dataPointer(void) const;
void* dataPointer(aitIndex element_offset) const;
const void* dataVoid(void) const;
void* dataVoid(void);
const void* dataAddress(void) const;
void* dataAddress(void);
const void* dataPointer(void) const;
void* dataPointer(void);
const void* dataPointer(aitIndex element_offset) const;
void* dataPointer(aitIndex element_offset);
void getTimeStamp(struct timespec* const ts) const;
void getTimeStamp(aitTimeStamp* const ts) const;
void getTimeStamp(struct TS_STAMP* const ts) const;
void getTimeStamp(osiTime* const ts) const;
void setTimeStamp(const struct timespec* const ts);
void setTimeStamp(const aitTimeStamp* const ts);
void setTimeStamp(const struct TS_STAMP* const ts);
void setTimeStamp(const osiTime* const ts);
void setStatus(aitUint32);
void setStatus(aitUint16 high, aitUint16 low);
void getStatus(aitUint32&);
void getStatus(aitUint16& high, aitUint16& low);
void getStatus(aitUint32&) const;
void getStatus(aitUint16& high, aitUint16& low) const;
void setStat(aitUint16);
void setSevr(aitUint16);
@@ -523,10 +540,10 @@ public:
// data in the user's buffer will be assumed to be the same as the
// type defined in the gdd.
size_t out(void* buf,aitUint32 bufsize,aitDataFormat =aitNetworkDataFormat);
size_t outHeader(void* buf,aitUint32 bufsize);
size_t out(void* buf,aitUint32 bufsize,aitDataFormat =aitNetworkDataFormat) const;
size_t outHeader(void* buf,aitUint32 bufsize) const;
size_t outData(void* buf,aitUint32 bufsize,
aitEnum = aitEnumInvalid, aitDataFormat = aitNetworkDataFormat);
aitEnum = aitEnumInvalid, aitDataFormat = aitNetworkDataFormat) const;
size_t in(void* buf, aitDataFormat =aitNetworkDataFormat);
size_t inHeader(void* buf);

View File

@@ -8,6 +8,9 @@
//
// $Id$
// $Log$
// Revision 1.3 1999/04/30 15:24:53 jhill
// fixed improper container index bug
//
// Revision 1.2 1997/04/23 17:13:03 jhill
// fixed export of symbols from WIN32 DLL
//
@@ -19,10 +22,14 @@
// --------------------The gddContainer functions---------------------
gddCursor gddContainer::getCursor(void) const
gddCursor gddContainer::getCursor(void)
{
gddCursor ec(this);
return ec;
return gddCursor (this);
}
constGddCursor gddContainer::getCursor(void) const
{
return constGddCursor (this);
}
gddContainer::gddContainer(void):gdd(0,aitEnumContainer,1) { }
@@ -127,10 +134,10 @@ gddStatus gddContainer::remove(aitIndex index)
// ------------------------cursor functions-------------------------------
gdd* gddCursor::operator[](int index)
const gdd* constGddCursor::operator[](int index)
{
int i,start;
gdd* dd;
const gdd* dd;
if(index>=curr_index)
{

View File

@@ -7,6 +7,9 @@
*
* $Id$
* $Log$
* Revision 1.3 1999/04/30 15:24:53 jhill
* fixed improper container index bug
*
* Revision 1.2 1997/04/23 17:13:04 jhill
* fixed export of symbols from WIN32 DLL
*
@@ -18,6 +21,7 @@
#include "shareLib.h"
class constGddCursor;
class gddCursor;
/* this class needs to be able to register a destructor for the container */
@@ -38,8 +42,11 @@ public:
void test(void);
// preferred method for looking into a container
gddCursor getCursor(void) const;
gdd* cData(void) const;
gddCursor getCursor(void);
constGddCursor getCursor(void) const;
const gdd* cData(void) const;
gdd* cData(void);
protected:
gddContainer(int,int,int,int*) { }
@@ -52,20 +59,47 @@ protected:
gddStatus setBound(int,aitIndex,aitIndex) {
gddAutoPrint("setBound()",gddErrorNotAllowed);
return gddErrorNotAllowed; }
gddStatus getBound(int,aitIndex&,aitIndex&) {
gddStatus getBound(int,aitIndex&,aitIndex&) const {
gddAutoPrint("getBound()",gddErrorNotAllowed);
return gddErrorNotAllowed; }
gddStatus setBound(aitIndex,aitIndex);
private:
friend class gddCursor;
friend class constGddCursor;
};
class epicsShareClass gddCursor
{
class epicsShareClass constGddCursor {
public:
constGddCursor(void);
constGddCursor(const gddContainer* ec);
const gdd* first(void);
const gdd* first(const gddScalar*&);
const gdd* first(const gddAtomic*&);
const gdd* first(const gddContainer*&);
const gdd* next(void);
const gdd* next(const gddScalar*&);
const gdd* next(const gddAtomic*&);
const gdd* next(const gddContainer*&);
const gdd* current(void) const;
const gdd* current(const gddScalar*&) const;
const gdd* current(const gddAtomic*&) const;
const gdd* current(const gddContainer*&) const;
const gdd* operator[](int index);
private:
const gddContainer* list;
const gdd* curr;
int curr_index;
};
class epicsShareClass gddCursor : private constGddCursor {
public:
gddCursor(void);
gddCursor(const gddContainer* ec);
gddCursor(gddContainer* ec);
gdd* first(void);
gdd* first(gddScalar*&);
@@ -77,17 +111,12 @@ public:
gdd* next(gddAtomic*&);
gdd* next(gddContainer*&);
gdd* current(void);
gdd* current(gddScalar*&);
gdd* current(gddAtomic*&);
gdd* current(gddContainer*&);
gdd* current(void) const;
gdd* current(gddScalar*&) const;
gdd* current(gddAtomic*&) const;
gdd* current(gddContainer*&) const;
gdd* operator[](int index);
private:
const gddContainer* list;
gdd* curr;
int curr_index;
};
#include "gddContainerI.h"

View File

@@ -7,50 +7,90 @@
*
* $Id$
* $Log$
* Revision 1.2 1999/04/30 15:24:53 jhill
* fixed improper container index bug
*
* Revision 1.1 1997/03/21 01:56:07 jbk
* *** empty log message ***
*
*
*/
inline gdd* gddContainer::cData(void) const
inline gdd* gddContainer::cData(void)
{ return (gdd*)dataPointer(); }
inline const gdd* gddContainer::cData(void) const
{ return (const gdd*)dataPointer(); }
inline int gddContainer::total(void) const
{ return bounds->size(); }
inline gddStatus gddContainer::setBound(aitIndex f, aitIndex c)
{ bounds->set(f,c); return 0; }
inline gddCursor::gddCursor(void):list(NULL)
inline constGddCursor::constGddCursor(void):list(NULL)
{ curr=NULL; }
inline gddCursor::gddCursor(const gddContainer* ec):list(ec)
inline constGddCursor::constGddCursor(const gddContainer* ec):list(ec)
{ curr=ec->cData(); curr_index=0; }
inline gdd* gddCursor::first(void)
inline const gdd* constGddCursor::first(void)
{ curr=list->cData(); curr_index=0; return curr; }
inline const gdd* constGddCursor::first(const gddScalar*& dd)
{ return (const gdd*)(dd=(gddScalar*)first()); }
inline const gdd* constGddCursor::first(const gddAtomic*& dd)
{ return (const gdd*)(dd=(gddAtomic*)first()); }
inline const gdd* constGddCursor::first(const gddContainer*& dd)
{ return (const gdd*)(dd=(gddContainer*)first()); }
inline const gdd* constGddCursor::next(void)
{ if(curr) { curr_index++;curr=curr->next(); } return curr; }
inline const gdd* constGddCursor::next(const gddScalar*& dd)
{ return (const gdd*)(dd=(gddScalar*)next()); }
inline const gdd* constGddCursor::next(const gddAtomic*& dd)
{ return (const gdd*)(dd=(gddAtomic*)next()); }
inline const gdd* constGddCursor::next(const gddContainer*& dd)
{ return (const gdd*)(dd=(gddContainer*)next()); }
inline const gdd* constGddCursor::current(void) const
{ return curr; }
inline const gdd* constGddCursor::current(const gddScalar*& dd) const
{ return (const gdd*)(dd=(gddScalar*)current()); }
inline const gdd* constGddCursor::current(const gddAtomic*& dd) const
{ return (const gdd*)(dd=(gddAtomic*)current()); }
inline const gdd* constGddCursor::current(const gddContainer*& dd) const
{ return (const gdd*)(dd=(gddContainer*)current()); }
inline gddCursor::gddCursor(void){}
inline gddCursor::gddCursor(gddContainer* ec) :
constGddCursor(ec) {}
inline gdd* gddCursor::first(void)
{ return (gdd *) constGddCursor::first(); }
inline gdd* gddCursor::first(gddScalar*& dd)
{ return (gdd*)(dd=(gddScalar*)first()); }
{ return (gdd *) constGddCursor::first((const gddScalar*&)dd); }
inline gdd* gddCursor::first(gddAtomic*& dd)
{ return (gdd*)(dd=(gddAtomic*)first()); }
{ return (gdd *) constGddCursor::first((const gddAtomic*&)dd); }
inline gdd* gddCursor::first(gddContainer*& dd)
{ return (gdd*)(dd=(gddContainer*)first()); }
{ return (gdd *) constGddCursor::first((const gddContainer*&)dd); }
inline gdd* gddCursor::next(void)
{ if(curr) { curr_index++;curr=curr->next(); } return curr; }
{ return (gdd *) constGddCursor::next(); }
inline gdd* gddCursor::next(gddScalar*& dd)
{ return (gdd*)(dd=(gddScalar*)next()); }
{ return (gdd*)constGddCursor::next((const gddScalar*&)dd); }
inline gdd* gddCursor::next(gddAtomic*& dd)
{ return (gdd*)(dd=(gddAtomic*)next()); }
{ return (gdd*)constGddCursor::next((const gddAtomic*&)dd); }
inline gdd* gddCursor::next(gddContainer*& dd)
{ return (gdd*)(dd=(gddContainer*)next()); }
{ return (gdd*)constGddCursor::next((const gddContainer*&)dd); }
inline gdd* gddCursor::current(void)
{ return curr; }
inline gdd* gddCursor::current(gddScalar*& dd)
{ return (gdd*)(dd=(gddScalar*)current()); }
inline gdd* gddCursor::current(gddAtomic*& dd)
{ return (gdd*)(dd=(gddAtomic*)current()); }
inline gdd* gddCursor::current(gddContainer*& dd)
{ return (gdd*)(dd=(gddContainer*)current()); }
inline gdd* gddCursor::current(void) const
{ return (gdd*)constGddCursor::current(); }
inline gdd* gddCursor::current(gddScalar*& dd) const
{ return (gdd*)constGddCursor::current(); }
inline gdd* gddCursor::current(gddAtomic*& dd) const
{ return (gdd*)constGddCursor::current(); }
inline gdd* gddCursor::current(gddContainer*& dd) const
{ return (gdd*)constGddCursor::current(); }
inline gdd* gddCursor::operator[](int index)
{ return (gdd *) constGddCursor::operator [](index); }
#endif

View File

@@ -8,6 +8,9 @@
* $Id$
*
* $Log$
* Revision 1.4 1999/04/30 15:24:53 jhill
* fixed improper container index bug
*
* Revision 1.3 1998/06/16 03:16:27 jhill
* fixed big problems with leaked ait/fixedString in gdd union
*
@@ -20,7 +23,7 @@
*/
inline void gdd::setData(void* d) { data.Pointer=d; }
inline gddDestructor* gdd::destructor(void) const { return destruct; }
inline const gddDestructor* gdd::destructor(void) const { return destruct; }
inline gdd::gdd(void) { init(0,aitEnumInvalid,0); }
inline gdd::gdd(int app) { init(app,aitEnumInvalid,0); }
@@ -32,6 +35,7 @@ inline const gddBounds* gdd::getBounds(void) const { return bounds; }
inline const gddBounds* gdd::getBounds(int bn) const { return &bounds[bn]; }
inline gdd* gdd::next(void) { return nextgdd; }
inline const gdd* gdd::next(void) const { return nextgdd; }
inline void gdd::setNext(gdd* n) { nextgdd=n; }
inline unsigned gdd::dimension(void) const { return dim; }
inline aitType& gdd::getData(void) { return data; }
@@ -42,10 +46,18 @@ inline void gdd::setApplType(int t) { appl_type=(aitUint16)t; }
inline gddStatus gdd::copyInfo(gdd* dd) { return copyStuff(dd,0); }
inline gddStatus gdd::copy(gdd* dd) { return copyStuff(dd,1); }
inline gddStatus gdd::Dup(gdd* dd) { return copyStuff(dd,2); }
inline void* gdd::dataAddress(void) const { return (void*)&data; }
inline void* gdd::dataPointer(void) const { return data.Pointer; }
inline const void* gdd::dataAddress(void) const { return (void*)&data; }
inline void* gdd::dataAddress(void) { return (void*)&data; }
inline const void* gdd::dataPointer(void) const { return data.Pointer; }
inline void* gdd::dataPointer(void) { return data.Pointer; }
inline void* gdd::dataVoid(void) const
inline const void* gdd::dataVoid(void) const
{
return (dimension()||primitiveType()==aitEnumFixedString)?
dataPointer():dataAddress();
}
inline void* gdd::dataVoid(void)
{
return (dimension()||primitiveType()==aitEnumFixedString)?
dataPointer():dataAddress();
@@ -57,7 +69,10 @@ inline aitUint32 gdd::align8(unsigned long count) const
return (tmp!=count)?tmp+8:tmp;
}
inline void* gdd::dataPointer(aitIndex f) const
inline const void* gdd::dataPointer(aitIndex f) const
{ return (void*)(((aitUint8*)dataPointer())+aitSize[primitiveType()]*f); }
inline void* gdd::dataPointer(aitIndex f)
{ return (void*)(((aitUint8*)dataPointer())+aitSize[primitiveType()]*f); }
inline int gdd::isManaged(void) const { return flags&GDD_MANAGED_MASK; }
@@ -75,19 +90,23 @@ inline void gdd::markUnmanaged(void) { flags&=~GDD_MANAGED_MASK; }
inline void gdd::markLocalDataFormat(void) { flags&=~GDD_NET_MASK; }
inline void gdd::markNotLocalDataFormat(void) { flags|=GDD_NET_MASK; }
inline void gdd::getTimeStamp(struct timespec* const ts) const
{ ts->tv_sec=time_stamp.tv_sec; ts->tv_nsec=time_stamp.tv_nsec; }
inline void gdd::setTimeStamp(const struct timespec* const ts) {
time_stamp.tv_sec=(aitUint32)ts->tv_sec;
time_stamp.tv_nsec=(aitUint32)ts->tv_nsec; }
inline void gdd::getTimeStamp(aitTimeStamp* const ts) const { *ts=time_stamp; }
inline void gdd::getTimeStamp(struct timespec* const ts) const { time_stamp.get(*ts); }
inline void gdd::setTimeStamp(const struct timespec* const ts) { time_stamp=*ts; }
inline void gdd::getTimeStamp(aitTimeStamp* const ts) const { *ts = time_stamp; }
inline void gdd::setTimeStamp(const aitTimeStamp* const ts) { time_stamp=*ts; }
inline void gdd::getTimeStamp(struct TS_STAMP* const ts) const { time_stamp.get(*ts); }
inline void gdd::setTimeStamp(const struct TS_STAMP* const ts) { time_stamp=*ts; }
inline void gdd::getTimeStamp(osiTime* const ts) const { time_stamp.get(*ts); }
inline void gdd::setTimeStamp(const osiTime* const ts) { time_stamp=*ts; }
inline void gdd::setStatus(aitUint32 s) { status=s; }
inline void gdd::getStatus(aitUint32& s) { s=status; }
inline void gdd::getStatus(aitUint32& s) const { s=status; }
inline void gdd::setStatus(aitUint16 high, aitUint16 low)
{ status=(((aitUint32)high)<<16)|low; }
inline void gdd::getStatus(aitUint16& high, aitUint16& low)
inline void gdd::getStatus(aitUint16& high, aitUint16& low) const
{ high=(aitUint16)(status>>16); low=(aitUint16)(status&0x0000ffff); }
inline void gdd::setStat(aitUint16 s)

View File

@@ -4,6 +4,9 @@
// $Id$
//
// $Log$
// Revision 1.10 1999/04/30 00:05:20 jhill
// allow const / use cursor in dump
//
// Revision 1.9 1997/08/05 00:51:16 jhill
// fixed problems in aitString and the conversion matrix
//
@@ -290,7 +293,7 @@ void gddContainer::dump(void) const
gdd::dumpInfo();
fprintf(stderr," total in container = %d\n",total());
gddCursor cur = this->getCursor();
constGddCursor cur = this->getCursor();
for(dd=cur.first();dd;dd=cur.next())
{
if(dd->isAtomic()) { add=(gddAtomic*)dd; add->dump(); }