int Geographical_Position_Information_Core_1_Encoder(Bitstream* stream, const Geographical_Position_Information_Core_1* p) { if (NormalBitstream(stream, GEOGRAPHICAL_POSITION_INFORMATION_CORE_1_CORE_BITSIZE)) { if (Geographical_Position_Information_Core_1_UpperBitsNotSet(p)) { //@ ghost const uint32_t pos = stream->bitpos; Bitstream_Write(stream, 1, p->Q_NEWCOUNTRY_k); if (p->Q_NEWCOUNTRY_k == 1) { Bitstream_Write(stream, 10, p->NID_C_k); } Bitstream_Write(stream, 14, p->NID_BG_k); Bitstream_Write(stream, 15, p->D_POSOFF_k); Bitstream_Write(stream, 1, p->Q_MPOSITION_k); Bitstream_Write(stream, 24, p->M_POSITION_k); //@ assert Q_NEWCOUNTRY_k: EqualBits(stream, pos, pos + 1, p->Q_NEWCOUNTRY_k); return 1; } else { return -2; } } else { return -1; } }
int Geographical_Position_Information_UpperBitsNotSet(const Geographical_Position_Information_Core* p) { bool status = true; status = status && UpperBitsNotSet64(p->Q_DIR, 2) ; status = status && UpperBitsNotSet64(p->L_PACKET, 13); status = status && UpperBitsNotSet64(p->Q_SCALE, 2) ; status = status && UpperBitsNotSet64(p->Q_NEWCOUNTRY, 1) ; if (p->Q_NEWCOUNTRY == 1) { status = status && UpperBitsNotSet64(p->NID_C, 10); } status = status && UpperBitsNotSet64(p->NID_BG, 14); status = status && UpperBitsNotSet64(p->D_POSOFF, 15); status = status && UpperBitsNotSet64(p->Q_MPOSITION, 1) ; status = status && UpperBitsNotSet64(p->M_POSITION, 24); status = status && UpperBitsNotSet64(p->N_ITER_1, 5) ; for (uint32_t i = 0; i < p->N_ITER_1; ++i) { status = status && Geographical_Position_Information_Core_1_UpperBitsNotSet(&(p->sub_1[i])); } if (status) { return 1; } else { return 0; } }