ivocvect.h

Go to the documentation of this file.
00001 #ifndef ivoc_vector_h
00002 #define ivoc_vector_h
00003 
00004 // definition of vector classes from the gnu c++ class library
00005 #include <d_avec.h>  
00006 #include <nrnmutdec.h>
00007 
00008 #define ParentVect doubleAVec
00009 #define Vect IvocVect
00010 
00011 struct Object;
00012 
00013 class IvocVect : public ParentVect {
00014 public:
00015    IvocVect(Object* obj = nil);
00016    IvocVect(int, Object* obj = nil);
00017    IvocVect(int, double, Object* obj = nil);
00018    IvocVect(IvocVect&, Object* obj = nil);
00019    ~IvocVect();
00020 
00021    void resize(int);
00022    void resize_chunk(int len, int realloc_extra = 0);
00023    // volatile, only one at a time, don't do anything
00024    // that changes the memory space.
00025    IvocVect* subvec(int start, int end);
00026 
00027    Object** temp_objvar();
00028    int buffer_size();
00029    void buffer_size(int);
00030    void label(const char*);
00031 
00032 #if USE_PTHREAD
00033    void mutconstruct(int mkmut) {if (!mut_) MUTCONSTRUCT(mkmut)}
00034 #else
00035    void mutconstruct(int) {}
00036 #endif
00037    void lock() {MUTLOCK}
00038    void unlock() {MUTUNLOCK}
00039 public:
00040    //intended as friend static Object** temp_objvar(IvocVect*);
00041    Object* obj_;  // so far only needed by record and play; not reffed
00042    char* label_;
00043    MUTDEC
00044 };
00045 
00046 
00047 extern "C" {
00048 extern Vect* vector_new(int, Object*); // use this if possible
00049 extern Vect* vector_new0();
00050 extern Vect* vector_new1(int);
00051 extern Vect* vector_new2(Vect*);
00052 extern void vector_delete(Vect*);
00053 extern int vector_buffer_size(Vect*);
00054 extern int vector_capacity(Vect*);
00055 extern void vector_resize(Vect*, int);
00056 extern Object** vector_temp_objvar(Vect*);
00057 extern double* vector_vec(Vect*);
00058 extern Object** vector_pobj(Vect*);
00059 extern Vect* vector_arg(int);
00060 extern boolean is_vector_arg(int);
00061 extern char* vector_get_label(Vect*);
00062 extern void vector_set_label(Vect*, char*);
00063 }
00064 
00065 #endif
00066 
Generated on Mon Jun 13 08:10:24 2011 for NEURON by  doxygen 1.6.3