A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from http://www.ncbi.nlm.nih.gov/IEB/ToolBox/CPP_DOC/doxyhtml/compound__id__v0_8cpp_source.html below:

NCBI C++ ToolKit: src/connect/services/compound_id_v0.cpp Source File

45 #define CIT_ID_FIELD_CODE '!' 46 #define CIT_INTEGER_FIELD_CODE '+' or '-' 47 #define CIT_SERVICE_NAME_FIELD_CODE 'S' 48 #define CIT_DATABASE_NAME_FIELD_CODE 'D' 49 #define CIT_TIMESTAMP_FIELD_CODE '@' 50 #define CIT_RANDOM_FIELD_CODE 'R' 51 #define CIT_IPV4_ADDRESS_FIELD_CODE 'A' 52 #define CIT_HOST_FIELD_CODE 'H' 53 #define CIT_PORT_FIELD_CODE ':' 54 #define CIT_IPV4_SOCK_ADDR_FIELD_CODE '&' 55 #define CIT_OBJECTREF_FIELD_CODE '/' 56 #define CIT_STRING_FIELD_CODE '"' 57 #define CIT_BOOLEAN_FIELD_CODE 'Y' or 'N' 58 #define CIT_FLAGS_FIELD_CODE '|' 59 #define CIT_LABEL_FIELD_CODE '$' 60 #define CIT_CUE_FIELD_CODE '#' 61 #define CIT_SEQ_ID_FIELD_CODE 'Q' 62 #define CIT_TAX_ID_FIELD_CODE 'X' 63 #define CIT_NESTED_CID_FIELD_CODE '{' and '}' 65 static const char s_TypePrefix[eCIT_NumberOfTypes] = { 66  /* eCIT_ID */ CIT_ID_FIELD_CODE, 68  /* eCIT_ServiceName */ CIT_SERVICE_NAME_FIELD_CODE, 69  /* eCIT_DatabaseName */ CIT_DATABASE_NAME_FIELD_CODE, 70  /* eCIT_Timestamp */ CIT_TIMESTAMP_FIELD_CODE, 71  /* eCIT_Random */ CIT_RANDOM_FIELD_CODE, 72  /* eCIT_IPv4Address */ CIT_IPV4_ADDRESS_FIELD_CODE, 73  /* eCIT_Host */ CIT_HOST_FIELD_CODE, 74  /* eCIT_Port */ CIT_PORT_FIELD_CODE, 75  /* eCIT_IPv4SockAddr */ CIT_IPV4_SOCK_ADDR_FIELD_CODE, 76  /* eCIT_ObjectRef */ CIT_OBJECTREF_FIELD_CODE, 77  /* eCIT_String */ CIT_STRING_FIELD_CODE, 79  /* eCIT_Flags */ CIT_FLAGS_FIELD_CODE, 80  /* eCIT_Label */ CIT_LABEL_FIELD_CODE, 81  /* eCIT_Cue */ CIT_CUE_FIELD_CODE, 82  /* eCIT_SeqID */ CIT_SEQ_ID_FIELD_CODE, 83  /* eCIT_TaxID */ CIT_TAX_ID_FIELD_CODE, 84  /* eCIT_NestedCID */ 0 111 

unsigned g_PackInteger(void* dst, size_t dst_size, Uint8 number)

113

if ((signed char) number >= 0 && (unsigned char) number == number) {

115

*(unsigned char*) dst = (unsigned char) number;

119

unsigned char buffer[sizeof(number)];

120

unsigned char *ptr = buffer + sizeof(buffer) - 1;

122

*ptr = (unsigned char) number;

128

while ((number >>= 8) > (mask_shift = (mask >> 1))) {

129

*--ptr = (unsigned char) number;

134

if (dst_size > length) {

135

*(unsigned char*) dst = (unsigned char) (~mask | number);

137

memcpy(((unsigned char*) dst) + 1, ptr, length);

145

REC(2, 0x00), REC(2, 0x01), REC(2, 0x02), REC(2, 0x03), REC(2, 0x04), \

146

REC(2, 0x05), REC(2, 0x06), REC(2, 0x07), REC(2, 0x08), REC(2, 0x09), \

147

REC(2, 0x0A), REC(2, 0x0B), REC(2, 0x0C), REC(2, 0x0D), REC(2, 0x0E), \

148

REC(2, 0x0F), REC(2, 0x10), REC(2, 0x11), REC(2, 0x12), REC(2, 0x13), \

149

REC(2, 0x14), REC(2, 0x15), REC(2, 0x16), REC(2, 0x17), REC(2, 0x18), \

150

REC(2, 0x19), REC(2, 0x1A), REC(2, 0x1B), REC(2, 0x1C), REC(2, 0x1D), \

151

REC(2, 0x1E), REC(2, 0x1F), REC(2, 0x20), REC(2, 0x21), REC(2, 0x22), \

152

REC(2, 0x23), REC(2, 0x24), REC(2, 0x25), REC(2, 0x26), REC(2, 0x27), \

153

REC(2, 0x28), REC(2, 0x29), REC(2, 0x2A), REC(2, 0x2B), REC(2, 0x2C), \

154

REC(2, 0x2D), REC(2, 0x2E), REC(2, 0x2F), REC(2, 0x30), REC(2, 0x31), \

155

REC(2, 0x32), REC(2, 0x33), REC(2, 0x34), REC(2, 0x35), REC(2, 0x36), \

156

REC(2, 0x37), REC(2, 0x38), REC(2, 0x39), REC(2, 0x3A), REC(2, 0x3B), \

157

REC(2, 0x3C), REC(2, 0x3D), REC(2, 0x3E), REC(2, 0x3F), REC(3, 0x00), \

158

REC(3, 0x01), REC(3, 0x02), REC(3, 0x03), REC(3, 0x04), REC(3, 0x05), \

159

REC(3, 0x06), REC(3, 0x07), REC(3, 0x08), REC(3, 0x09), REC(3, 0x0A), \

160

REC(3, 0x0B), REC(3, 0x0C), REC(3, 0x0D), REC(3, 0x0E), REC(3, 0x0F), \

161

REC(3, 0x10), REC(3, 0x11), REC(3, 0x12), REC(3, 0x13), REC(3, 0x14), \

162

REC(3, 0x15), REC(3, 0x16), REC(3, 0x17), REC(3, 0x18), REC(3, 0x19), \

163

REC(3, 0x1A), REC(3, 0x1B), REC(3, 0x1C), REC(3, 0x1D), REC(3, 0x1E), \

164

REC(3, 0x1F), REC(4, 0x00), REC(4, 0x01), REC(4, 0x02), REC(4, 0x03), \

165

REC(4, 0x04), REC(4, 0x05), REC(4, 0x06), REC(4, 0x07), REC(4, 0x08), \

166

REC(4, 0x09), REC(4, 0x0A), REC(4, 0x0B), REC(4, 0x0C), REC(4, 0x0D), \

167

REC(4, 0x0E), REC(4, 0x0F), REC(5, 0x00), REC(5, 0x01), REC(5, 0x02), \

168

REC(5, 0x03), REC(5, 0x04), REC(5, 0x05), REC(5, 0x06), REC(5, 0x07), \

169

REC(6, 0x00), REC(6, 0x01), REC(6, 0x02), REC(6, 0x03), REC(7, 0x00), \

170

REC(7, 0x01), REC(8, 0x00), REC(9, 0x00) \

173

#define REC(length, bits) {length, (bits << 8)}

179

} static const s_CodeRec[128] = REC_DATA;

203 

unsigned g_UnpackInteger(const void* src, size_t src_size, Uint8* number)

205

const unsigned char* ptr = (const unsigned char*) src;

212

if ((signed char) *ptr >= 0) {

213

*number = (Uint8) *ptr;

217

SCodeRec acc = s_CodeRec[*ptr - 0x80];

219

if (src_size >= acc.length) {

220

unsigned count = acc.length - 1;

235

struct SIDPackingBuffer

242

void PackCode(char code);

243

void PackTypePrefix(ECompoundIDFieldType field_type)

245

PackCode(s_TypePrefix[field_type]);

247

void PackNumber(Uint8 number);

248

void PackUint4(Uint4 number);

249

void PackPort(Uint2 port);

250

void PackCompoundID(SCompoundIDImpl* cid_impl);

252

SIDPackingBuffer() : m_Ptr(m_Buffer), m_FreeSpace(sizeof(m_Buffer)) {}

255

void SIDPackingBuffer::Overflow()

257

NCBI_THROW(CCompoundIDException, eIDTooLong,

258

"Cannot create CompoundID: buffer overflow");

261

void SIDPackingBuffer::PackCode(char code)

263

if (m_FreeSpace == 0)

269

void SIDPackingBuffer::PackNumber(Uint8 number)

271

unsigned packed_size = g_PackInteger(m_Ptr, m_FreeSpace, number);

272

if (packed_size > m_FreeSpace)

274

m_Ptr += packed_size;

275

m_FreeSpace -= packed_size;

278

void SIDPackingBuffer::PackUint4(Uint4 number)

282

memcpy(m_Ptr, &number, 4);

287

void SIDPackingBuffer::PackPort(Uint2 port)

291

port = CSocketAPI::HostToNetShort(port);

292

memcpy(m_Ptr, &port, 2);

297

void SIDPackingBuffer::PackCompoundID(SCompoundIDImpl* cid_impl)

299

PackNumber(cid_impl->m_Class);

301

SCompoundIDFieldImpl* field = cid_impl->m_FieldList.m_Head;

303

while (field != NULL) {

304

switch (field->m_Type) {

309

PackTypePrefix(field->m_Type);

310

PackNumber(field->m_Uint8Value);

313

if (field->m_Int8Value >= 0) {

315

PackNumber(field->m_Int8Value);

318

PackNumber(-field->m_Int8Value);

321

case eCIT_ServiceName:

322

case eCIT_DatabaseName:

328

PackTypePrefix(field->m_Type);

329

PackNumber(field->m_StringValue.length());

330

if (m_FreeSpace < field->m_StringValue.length())

332

memcpy(m_Ptr, field->m_StringValue.data(),

333

field->m_StringValue.length());

334

m_Ptr += field->m_StringValue.length();

335

m_FreeSpace -= field->m_StringValue.length();

338

PackCode(CIT_TIMESTAMP_FIELD_CODE);

339

PackNumber(field->m_Int8Value);

342

PackCode(CIT_RANDOM_FIELD_CODE);

343

PackUint4(CSocketAPI::HostToNetLong(field->m_Uint4Value));

345

case eCIT_IPv4Address:

346

PackCode(CIT_IPV4_ADDRESS_FIELD_CODE);

347

PackUint4(field->m_IPv4SockAddr.m_IPv4Addr);

350

PackCode(CIT_PORT_FIELD_CODE);

351

PackPort(field->m_IPv4SockAddr.m_Port);

353

case eCIT_IPv4SockAddr:

354

PackCode(CIT_IPV4_SOCK_ADDR_FIELD_CODE);

355

PackUint4(field->m_IPv4SockAddr.m_IPv4Addr);

356

PackPort(field->m_IPv4SockAddr.m_Port);

359

PackCode(field->m_BoolValue ? 'Y' : 'N');

363

PackCompoundID(field->m_NestedCID);

367

case eCIT_NumberOfTypes:

371

field = cid_impl->m_FieldList.GetNext(field);

375

string SCompoundIDImpl::PackV0()

378

SIDPackingBuffer buffer;

380

buffer.PackCompoundID(this);

382

g_PackID(buffer.m_Buffer, buffer.m_Ptr - buffer.m_Buffer, m_PackedID);

392

SIDUnpacking(const string& packed_id) : m_PackedID(packed_id)

394

if (!g_UnpackID(packed_id, m_BinaryID)) {

395

NCBI_THROW_FMT(CCompoundIDException, eInvalidFormat,

396

"Invalid CompoundID format: " << packed_id);

398

m_Ptr = m_BinaryID.data();

399

m_RemainingBytes = m_BinaryID.length();

402

Uint8 ExtractNumber();

404

string ExtractString();

405

Uint4 ExtractUint4();

407

CCompoundID ExtractCID(SCompoundIDPoolImpl* pool_impl);

412

size_t m_RemainingBytes;

415

Uint8 SIDUnpacking::ExtractNumber()

419

unsigned number_len = g_UnpackInteger(m_Ptr, m_RemainingBytes, &number);

421

if (number_len > m_RemainingBytes) {

422

NCBI_THROW_FMT(CCompoundIDException, eInvalidFormat,

423

"Invalid CompoundID format: " << m_PackedID);

427

m_RemainingBytes -= number_len;

432

char SIDUnpacking::ExtractCode()

438

string SIDUnpacking::ExtractString()

440

Uint8 string_len = ExtractNumber();

442

if (m_RemainingBytes < string_len) {

443

NCBI_THROW_FMT(CCompoundIDException, eInvalidFormat,

444

"Invalid CompoundID format: " << m_PackedID);

447

string result(m_Ptr, (string::size_type) string_len);

450

m_RemainingBytes -= (string::size_type) string_len;

455

Uint4 SIDUnpacking::ExtractUint4()

457

if (m_RemainingBytes < 4) {

458

NCBI_THROW_FMT(CCompoundIDException, eInvalidFormat,

459

"Invalid CompoundID format: " << m_PackedID);

464

memcpy(&number, m_Ptr, 4);

467

m_RemainingBytes -= 4;

472

Uint2 SIDUnpacking::ExtractPort()

474

if (m_RemainingBytes < 2) {

475

NCBI_THROW_FMT(CCompoundIDException, eInvalidFormat,

476

"Invalid CompoundID format: " << m_PackedID);

481

memcpy(&port, m_Ptr, 2);

484

m_RemainingBytes -= 2;

486

return CSocketAPI::NetToHostShort(port);

489

CCompoundID SIDUnpacking::ExtractCID(SCompoundIDPoolImpl* pool_impl)

491

Uint8 id_class = ExtractNumber();

493

if (id_class >= eCIC_NumberOfClasses) {

494

NCBI_THROW_FMT(CCompoundIDException, eInvalidFormat,

495

"Unknown CompoundID class: " << m_PackedID);

498

CCompoundID new_cid(pool_impl->m_CompoundIDPool.Alloc());

499

new_cid->Reset(pool_impl, (ECompoundIDClass) id_class);

501

while (m_RemainingBytes > 0) {

502

switch (ExtractCode()) {

503

case CIT_ID_FIELD_CODE:

504

new_cid.AppendID(ExtractNumber());

507

new_cid.AppendInteger(ExtractNumber());

510

new_cid.AppendInteger(-(Int8) ExtractNumber());

512

case CIT_SERVICE_NAME_FIELD_CODE:

513

new_cid.AppendServiceName(ExtractString());

515

case CIT_DATABASE_NAME_FIELD_CODE:

516

new_cid.AppendDatabaseName(ExtractString());

518

case CIT_TIMESTAMP_FIELD_CODE:

519

new_cid.AppendTimestamp(ExtractNumber());

521

case CIT_RANDOM_FIELD_CODE:

522

new_cid.AppendRandom(CSocketAPI::NetToHostLong(ExtractUint4()));

524

case CIT_IPV4_ADDRESS_FIELD_CODE:

525

new_cid.AppendIPv4Address(ExtractUint4());

527

case CIT_HOST_FIELD_CODE:

528

new_cid.AppendHost(ExtractString());

530

case CIT_PORT_FIELD_CODE:

531

new_cid.AppendPort(ExtractPort());

533

case CIT_IPV4_SOCK_ADDR_FIELD_CODE:

535

Uint4 host = ExtractUint4();

536

Uint2 port = ExtractPort();

537

new_cid.AppendIPv4SockAddr(host, port);

540

case CIT_OBJECTREF_FIELD_CODE:

541

new_cid.AppendObjectRef(ExtractString());

543

case CIT_STRING_FIELD_CODE:

544

new_cid.AppendString(ExtractString());

547

new_cid.AppendBoolean(true);

550

new_cid.AppendBoolean(false);

552

case CIT_FLAGS_FIELD_CODE:

553

new_cid.AppendFlags(ExtractNumber());

555

case CIT_LABEL_FIELD_CODE:

556

new_cid.AppendLabel(ExtractString());

558

case CIT_CUE_FIELD_CODE:

559

new_cid.AppendCue(ExtractNumber());

561

case CIT_SEQ_ID_FIELD_CODE:

562

new_cid.AppendSeqID(ExtractString());

564

case CIT_TAX_ID_FIELD_CODE:

565

new_cid.AppendTaxID(ExtractNumber());

568

new_cid.AppendNestedCID(ExtractCID(pool_impl));

578

CCompoundID SCompoundIDPoolImpl::UnpackV0(const string& packed_id)

580

SIDUnpacking unpacking(packed_id);

582

CCompoundID new_cid(unpacking.ExtractCID(this));

584

new_cid->m_PackedID = packed_id;

585

new_cid->m_Dirty = false;

Internal declarations of the CompoundID classes.

#define BEGIN_NCBI_SCOPE

Define ncbi namespace.


RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4