blob: c91cd0a96b0c650294b15ef573181dfb2899f75d [file] [log] [blame]
#ifndef QPID_AMQP_CODEC_H
#define QPID_AMQP_CODEC_H
/*
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*/
namespace qpid {
namespace amqp {
/**
*
*/
class Codec
{
public:
private:
struct Constructor
{
uint8_t code;
Descriptor descriptor;
bool isDescribed;
};
Constructor readConstructor(Decoder decoder, Reader reader)
{
Constructor result;
result.code = decoder.readCode();
if (code == DESCRIPTOR) {
result.isDescribed = true;
result.descriptor = decoder.readDescriptor();
result.code = decoder.readCode();
} else {
result.isDescribed = false;
}
return result;
}
};
Codec::Descriptor Codec::Decoder::readDescriptor()
{
uint8_t code = decoder.readCode();
switch(code) {
case SYMBOL8:
return Descriptor(readSequence8());
case SYMBOL32:
return Descriptor(readSequence32());
case ULONG:
return Descriptor(readULong());
case ULONG_SMALL:
return Descriptor((uint64_t) readUByte());
case ULONG_ZERO:
return Descriptor((uint64_t) 0);
default:
throw qpid::Exception("Expected descriptor of type ulong or symbol; found " << code);
}
}
Codec::Descriptor::Descriptor(uint64_t id) : value.id(id), type(NUMERIC) {}
Codec::Descriptor::Descriptor(const CharSequence& symbol) : value.symbol(symbol), type(SYMBOLIC) {}
}} // namespace qpid::amqp
#endif /*!QPID_AMQP_CODEC_H*/