예제 #1
0
파일: leb128.hpp 프로젝트: graehl/carmel
byteptr encodeArray(Codec const& codec, byteptr p, byteptr end, Uint const* xs, unsigned n) {
  if (codec.k_max_bytes * n + p > end)
    for (unsigned i = 0; i < n; ++i) p = codec.encode(p, end, xs[i]);
  else
    for (unsigned i = 0; i < n; ++i) p = codec.encode(p, xs[i]);
  return p;
}
예제 #2
0
    //---------------------------------------------------------------------
    DataStreamPtr Image::encode(const String& formatextension)
    {
        if( !mBuffer )
        {
            OGRE_EXCEPT(Exception::ERR_INVALIDPARAMS, "No image data loaded", 
                "Image::encode");
        }

        Codec * pCodec = Codec::getCodec(formatextension);
        if( !pCodec )
            OGRE_EXCEPT(
            Exception::ERR_INVALIDPARAMS, 
            "Unable to encode image data as '" + formatextension + "' - invalid extension.",
            "Image::encode" );

        ImageCodec::ImageData* imgData = OGRE_NEW ImageCodec::ImageData();
        imgData->format = mFormat;
        imgData->height = mHeight;
        imgData->width = mWidth;
        imgData->depth = mDepth;
        // Wrap in CodecDataPtr, this will delete
        Codec::CodecDataPtr codeDataPtr(imgData);
        // Wrap memory, be sure not to delete when stream destroyed
        MemoryDataStreamPtr wrapper(OGRE_NEW MemoryDataStream(mBuffer, mBufSize, false));

        return pCodec->encode(wrapper, codeDataPtr);
    }
예제 #3
0
void Codec::taskFunc(void *objArg, void *arg)
{
	Codec *codec = (Codec *)objArg;
	TaskFuncArg *taskFuncArg = (TaskFuncArg *)arg;

	void *resMsg = NULL;
	int resLen = 0;

	resMsg = codec->messageCallback_(codec->objArg_, taskFuncArg->msg, taskFuncArg->length, &resLen);
	delete (char *)taskFuncArg->msg;
	assert(resLen != 0);
	int type;
	memcpy(&type, resMsg, 4);
	LOG_TRACE << "----------------Type " << type;

	resMsg = codec->encode(resMsg, &resLen);
	assert(resLen != 0);
	{
		MutexLockGuard lockGuard(codec->sendLock_);
		LOG_TRACE << "In thread func " << resLen;
		int type;
		memcpy(&type, (char *)resMsg + 4, 4);
		LOG_TRACE << "----------------Type " << *(int *)((char *)resMsg + 4);
		taskFuncArg->con->sendMsg(resMsg, resLen);
	}
}
예제 #4
0
	void test()
	{
		for(int i=0;i<Codec::factoryCount();i++)
		{
			Codec::Factory * pFactory = Codec::factory( i );

			// generate random data
			byte data[ CODEC_DATA_SIZE ];
			for(int i=0;i<sizeof(data);i++)
				data[i] = (i & 0xff); //rand() & 0xff;

			// create the codec
			Codec * pCodec = pFactory->create();
			Test( pCodec != NULL );

			byte encoded[ CODEC_DATA_SIZE * 3 ];
			int nBytes = pCodec->encode( data, sizeof(data), encoded, sizeof(encoded), Codec::CL_NORMAL );
			Test( nBytes >= 0 );

			delete pCodec;

			printf("Codec %s, %d bytes encoded into %d bytes - %d%% Compression\n", 
				pFactory->name(), CODEC_DATA_SIZE, nBytes, ((nBytes * 100) / CODEC_DATA_SIZE) );
			
			pCodec = pFactory->create();
			Test( pCodec != NULL );

			int nDecodedBytes = pCodec->decode( encoded, nBytes, data, sizeof(data) );
			Test( nDecodedBytes == CODEC_DATA_SIZE );

			for(int j=0;j<sizeof(data);j++)
				Test( data[j] == (j & 0xff) );
			delete pCodec;
		}
	}
예제 #5
0
Bytes
encode(const Unicode& ustring,
       const Bytes& encoding)
{
  Codec* codec = lookup(encoding);
  Bytes bstring = codec->encode(bstring);
  delete codec;
  return bstring;
}
int main(void) {
	Codec codec;
	vector<string> strs = {"", "vn"};
	string encoded_string = codec.encode(strs);
	vector<string> strs2 = codec.decode(encoded_string);
	assert(strs.size() == strs2.size());
	for (size_t i = 0; i < strs.size(); i++) assert(strs[i] == strs2[i]);
	cout << "\nPassed All\n";
	return 0;
}
예제 #7
0
// Your Codec object will be instantiated and called as such:
// Codec codec;
// codec.decode(codec.encode(strs));
//
int main() {
  Codec codec;
  vector<string> strs;
  strs.push_back("hello");
  strs.push_back("");
  strs.push_back("gaobo");
  string coded_str = codec.encode(strs);
  cout << "coded str: " << coded_str << endl;
  vector<string> decoded_strs = codec.decode(coded_str);
  for (int i = 0; i < decoded_strs.size(); i++) {
    cout << decoded_strs[i] << endl;
  }
  return 0;
}