コード例 #1
0
ファイル: prdfBitKey.C プロジェクト: AmesianX/hostboot
void BitKey::ReAllocate(uint32_t i_len)
{
  if(i_len > iv_Capacity)  // never shrink
  {
    bool wasDirect = IsDirect();
    uint32_t oldSize = iv_Capacity;
    uint32_t * oldPtr = DataPtr();

    uint32_t wordsize = getWordSize(i_len);
    iv_Capacity = 32*wordsize;

    bool isDirect = IsDirect();

    if(!isDirect)  // to indirect
    {
      uint32_t * newBuffer = new uint32_t[wordsize];
      BitString dbs(iv_Capacity,newBuffer);
      dbs.Pattern(0x00000000);
      BitString sbs(oldSize,oldPtr);
      dbs.SetBits(sbs);
      iv_storage1 = 0;
      if(!wasDirect) // from indirect
      {
        delete [] iv_rep.buffer;
      }
      iv_rep.buffer = newBuffer;
    }
  }
}
コード例 #2
0
ファイル: prdfBitKey.C プロジェクト: AmesianX/hostboot
BitKey & BitKey::operator=(const BitKey & bit_list)
{
  if(iv_Capacity)
  {
    BitString bs(iv_Capacity,DataPtr());
    bs.Pattern(0x00000000);
  }
  ReAllocate(bit_list.iv_Capacity);
  if(IsDirect()) // implies bit_list is also direct
  {
    iv_storage1 = bit_list.iv_storage1;
    iv_rep.storage2 = bit_list.iv_rep.storage2;
  }
  else
  {
    const uint32_t * dataPtr = NULL;
    if(bit_list.IsDirect())
    {
      dataPtr = &bit_list.iv_storage1;
    } else
    {
      dataPtr = bit_list.iv_rep.buffer;
    }
    memcpy(iv_rep.buffer,dataPtr,4*getWordSize(bit_list.iv_Capacity));
  }
  return(*this);
}
コード例 #3
0
ファイル: prdfBitKey.C プロジェクト: AmesianX/hostboot
BitKey::BitKey (const BitKey & bit_list)
: iv_Capacity(bit_list.iv_Capacity), iv_storage1(bit_list.iv_storage1)
{
  if(IsDirect())
  {
    iv_rep.storage2 = bit_list.iv_rep.storage2;
  }
  else
  {
    uint32_t size = getWordSize(iv_Capacity);
    iv_rep.buffer = new uint32_t[size];
    memcpy(iv_rep.buffer,bit_list.iv_rep.buffer,4*size);
  }
}
コード例 #4
0
ファイル: Convert.cpp プロジェクト: Corly/ImageProcessing
    COR_EXPORT(Image*) CorConvertPalette(
      Image* image,
      PixelFormat palette_format)
    {
      // do we need to convert?
      if (!image ||
          palette_format == PF_DONTCARE ||
          image->getPaletteFormat() == palette_format)
      {
        return image;
      }

      // do we have invalid data?
      if (!IsPalettized(image->getFormat()) ||
          !IsDirect(palette_format))
      {
        delete image;
        return 0;
      }

      const int width  = image->getWidth();
      const int height = image->getHeight();
      const PixelFormat format = image->getFormat();
      const int palette_size = image->getPaletteSize();

      // the palette indices don't change, so just make a copy
      const int image_size = width * height * GetPixelSize(format);
      byte* pixels = new byte[image_size];
      std::memcpy(pixels, image->getPixels(), image_size);

      byte* new_palette = new byte[
        palette_size * GetPixelSize(palette_format)];

      if (!ConvertPixels(new_palette, palette_format,
                         (byte*)image->getPalette(), image->getPaletteFormat(),
                         palette_size))
      {
        delete image;
        delete[] pixels;
        delete[] new_palette;
        return 0;
      }

      delete image;
      return new SimpleImage(
        width, height, format, pixels,
        new_palette, palette_size, palette_format);
    }
コード例 #5
0
ファイル: prdfBitKey.C プロジェクト: AmesianX/hostboot
BitKey::~BitKey(void)
{
  if(!IsDirect()) delete [] iv_rep.buffer;
}