On Saturday, November 2, 2013 10:44 PM, Joeish W <joeish80...@yahoo.com> wrote: here is the c code with explanation didn't add all code to keep it short but i know it is still long...if this seems daunting because all the code I added....pls know 1. I worked on this a long time and added the minimal code i could think to explain the issue 2. if it does seem daunting...if you would be so kind as to look through this and tell me how i could edit my ? to make it easier to answer...with that being said... though this is a very simple post .... Im hoping at the end of the explanation you might be able to help me re-wrap my CV-SEQ struct so i get the same resultt as i do in c > > >CvSeq* contours; //hold the pointer to a contour in the memory block > > > >// adds data to CvSeq* contours with &contours call >cvFindContours(imgGrayScale, storage, &contours, sizeof(CvContour), >CV_RETR_LIST, CV_CHAIN_APPROX_SIMPLE, cvPoint(0,0)); > > >// This is how its supposed to work ....no matter how many times you >dereference contours to get the h_next struct member >// the value of contours->h_next is always the same > > >cout << "c1 = " << endl << " " << contours->h_next << endl << endl; //output >same as next line - see output below >cout << "c2 = " << endl << " " << contours->h_next << endl << endl; //output >same as above line see output below > > >// If you assign contours->h_next to a new variable "c" > >CvSeq* c = contours->h_next; > > >// then cout contours->h_next the output of the below 2 cout's is still the >same as the output of the above 2 - see output below > >cout << "c3 = " << endl << " " << contours->h_next << endl << endl; >cout << "c4 = " << endl << " " << contours->h_next << endl << endl; > > >// but if you assign contours->h_next back to contours the output of the next >2 couts is different than above 4 > >// see output below > > contours = contours->h_next; >cout << "c5 = " << endl << " " << contours->h_next << endl << endl; >cout << "c6 = " << endl << " " << contours->h_next << endl << endl; > > > > >here is the cout output > > >c1 = > 0x182f730 > > >c2 = > 0x182f730 > >c3 = > 0x182f730 > >c4 = > 0x182f730 > >c5 = > 0x182f560 > >c6 = > 0x182f560 > > > > >The struct CvSeq is defined as this > >#define CV_TREE_NODE_FIELDS(node_type) \ > int flags; /* Miscellaneous flags. */ \ > int header_size; /* Size of sequence header. */ \ > struct node_type* h_prev; /* Previous sequence. */ \ > struct node_type* h_next; /* Next sequence. */ \ > struct node_type* v_prev; /* 2nd previous sequence. */ \ > struct node_type* v_next /* 2nd next sequence. */ > >/* > Read/Write sequence. > Elements can be dynamically inserted to or deleted from the sequence. >*/ >#define CV_SEQUENCE_FIELDS() \ > CV_TREE_NODE_FIELDS(CvSeq); \ > int total; /* Total number of elements. */ \ > int elem_size; /* Size of sequence element in bytes. */ \ > schar* block_max; /* Maximal bound of the last block. */ \ > schar* ptr; /* Current write pointer. */ \ > int delta_elems; /* Grow seq this many at a time. */ \ > CvMemStorage* storage; /* Where the seq is stored. */ \ > CvSeqBlock* free_blocks; /* Free blocks list. */ \ > CvSeqBlock* first; /* Pointer to the first sequence block. */ > >typedef struct CvSeq >{ > CV_SEQUENCE_FIELDS() >} >CvSeq; > > > >Im not getting the same thing as in lisp with my struct like this - SWIG >wrapped > > >(cffi:defcstruct cv-seq > (flags :int) > (header-size :int) > (h-prev :pointer) > (h-next :pointer) > (v-prev :pointer) > (v-next :pointer) > (total :int) > (elem-size :int) > (block-max :pointer) > (ptr :pointer) > (delta-elems :int) > (storage :pointer) > (free-blocks :pointer) > (first :pointer)) > > > > >with the below code my output is the same for both princ...not newline of >course =) > > > >(with-foreign-object (contours '(:pointer (:struct cv-seq))) > (find-contours img-grayscale storage contours > (size-of cv-contour) +retr-list+ > +chain-approx-simple+ (point 0 0)) > > (with-foreign-slots ((h-next) contours (:struct cv-seq)) > (setf contours h-next) > (princ contours) > (princ #\newline) > (setf contours h-next) > (princ contours))) > > >any help on fixing my struct, my coding or editing this post =) is much >appreciated > > >Cheers! > > >