Friday 29 March 2013

Boost

After class the other day a question had been raised about network programming, I've used Boost::asio in the past for my own network programming tasks. Boost is a third party library pack, designed for platform independence, that contains libraries for a large majority of common tasks. Boost ASIO is their (A)Synchronous In Out library that contains support for, among other tasks, TCP/UDP programming. In order to implement full duplex(asynchronous) communication you also need to implement threading to allow the reading and writing handles to run on separate threads to prevent them from blocking one another - synchronous communication. Boost provides thread management support in their Boost::thread library.

http://www.boost.org/

Bits and Bytes

I completed these a while ago and but forgot to post it. I haven't completed the Bits class yet but I have finished all the functions.


void copyBits(unsigned int& V, int bitNo, int NoOfBits, unsigned int mask){
  unsigned int m;
  for(int x=1, m=1<<bitNo; x<=NoOfBits; x++, m<<=1){
    setBit(V,(bitNo+x), (mask&m)&&1);
  }
}
void setBit(unsigned int& V, int bitNo, bool value){
  if(value){
    V = V | (1<<(bitNo-1));
    }
  else{
    V = V & ~(1<<(bitNo-1));
    }
}
void prnBits(unsigned int val){
  unsigned int m = 1 << sizeof(val)*8-1;
  int count=0;
  while(m){
    if(count==4){
      printf(" ");
      count=0;
    }
    printf("%d", (val & m)&&1);
    m = m >> 1;
    count++;
  }
}
const char* bits(unsigned int val){
  const unsigned int valSize=sizeof(val)*8-1;
  char* output = new char[valSize+2];
  unsigned int m = 1 << valSize;
  int x=0;
  for(x=0;x<=valSize;x++, m = m >> 1){
    output[x]=(val & m ? '1' : '0');
  }
  output[x]='\0';
  return output;
}
void bitDump(void* address, unsigned int sizeInBytes){
  unsigned long long valSize=(sizeInBytes*8)-1;
  unsigned long m = 1 << valSize;
  long long temp = *(reinterpret_cast<long long *>(address));
  int count=0;
  unsigned long x=0;
  printf("\n");
  for(x=0;x<=valSize,m;x++, m = m >> 1){
    if(count==4){
      printf(" ");
      count=0;
    }
    printf("%d", ((temp) & m)&&1);
    count++;
  }
}

Thursday 28 March 2013

0.5 CDialog issue

I noticed this when testing cmenuitem, when the following code is run it checks the address of the returning variable against the current pointer in the array. The thing is though that the return variable is a reference to a pointer object, I debugged massively the incoming and outgoing addresses in CDialog's add and I know for a fact that the proper address is stored within CDialog _fld but since curField() returns a reference I don't know how to get it to check against the proper address of the pointer it is referencing.

// Test7MenuItem.cpp

 for(int i=0;i<3;i++){
         if(&FD.curField() == m[i]){
            si[16] = '0' + i;
            FD[3].set(si);
          }

//cdialog.cpp

 CField& CDialog::curField(){
    return (CField&)_fld[_curidx];
  }

this

One thing I've noticed a lot of people asking is about the constructors asking to instantiate property _Label's container/frame. The hint that Fardad gave was (i.e. this). It's saying that the owner class should be set to the frame of the _Label, the code for that would be:  _Label.frame(this); since this is a pointer to the class it would pass the class to _Label's frame.