11754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato/* 21754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * Copyright (C) 2016 The Android Open Source Project 31754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * 41754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * Licensed under the Apache License, Version 2.0 (the "License"); 51754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * you may not use this file except in compliance with the License. 61754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * You may obtain a copy of the License at 71754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * 81754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * http://www.apache.org/licenses/LICENSE-2.0 91754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * 101754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * Unless required by applicable law or agreed to in writing, software 111754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * distributed under the License is distributed on an "AS IS" BASIS, 121754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 131754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * See the License for the specific language governing permissions and 141754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * limitations under the License. 151754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato */ 161754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 171754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato#ifndef GENERIC_MESSAGE_H 181754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato#define GENERIC_MESSAGE_H 191754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 201754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato#include <map> 211754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato#include <string> 221754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 231754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onoratousing namespace std; 241754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 251754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato/** 261754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * Class to represent a protobuf Message, where we don't actually 271754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * know what any of the fields are, just their type codes. In other 281754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * words, this loslessly stores a parsed protobuf object without 291754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * having the .proto file that generated it. 301754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato */ 311754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onoratoclass GenericMessage 321754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato{ 331754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onoratopublic: 341754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato GenericMessage(); 351754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato ~GenericMessage(); 361754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 371754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato enum { 381754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato TYPE_VALUE32, 391754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato TYPE_VALUE64, 401754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato TYPE_MESSAGE, 411754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato TYPE_STRING, 421754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato TYPE_DATA 431754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato }; 441754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 451754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato struct Node { 461754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato uint32_t type; 471754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato union { 481754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato uint32_t value32; 491754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato uint64_t value64; 501754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato GenericMessage* message; 511754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato string* str; 521754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato string* data; 531754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato }; 541754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato }; 551754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 561754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato void addInt32(int32_t fieldId, uint32_t value); 571754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato void addInt64(int32_t fieldId, uint64_t value); 581754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato GenericMessage* addMessage(int32_t fieldId); 591754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato void addString(int32_t fieldId, const string& value); 601754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 611754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato typedef multimap<int32_t,Node>::const_iterator const_iterator; 621754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato typedef pair<const_iterator,const_iterator> const_iterator_pair; 631754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 641754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato const_iterator_pair find(int fieldId) const; 651754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 661754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onoratoprivate: 671754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato multimap<int,Node> mNodes; 681754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato}; 691754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 701754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato#endif // GENERIC_MESSAGE_H 711754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 72