1e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville// Protocol Buffers - Google's data interchange format 2e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville// Copyright 2010 Google Inc. All rights reserved. 3e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville// http://code.google.com/p/protobuf/ 4e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville// 5e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville// Redistribution and use in source and binary forms, with or without 6e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville// modification, are permitted provided that the following conditions are 7e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville// met: 8e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville// 9e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville// * Redistributions of source code must retain the above copyright 10e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville// notice, this list of conditions and the following disclaimer. 11e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville// * Redistributions in binary form must reproduce the above 12e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville// copyright notice, this list of conditions and the following disclaimer 13e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville// in the documentation and/or other materials provided with the 14e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville// distribution. 15e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville// * Neither the name of Google Inc. nor the names of its 16e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville// contributors may be used to endorse or promote products derived from 17e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville// this software without specific prior written permission. 18e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville// 19e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 20e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 21e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 22e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 23e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 24e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 25e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 26e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 27e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 28e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville 31e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville// Author: wink@google.com (Wink Saville) 32e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville 33e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville#ifndef PROTOBUF_COMPILER_JAVAMICRO_JAVAMICRO_PARAMS_H_ 34e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville#define PROTOBUF_COMPILER_JAVAMICRO_JAVAMICRO_PARAMS_H_ 35e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville 36e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville#include <map> 378170787391efcb6cc6a8babc1cce35d5b1aff420Max Cai#include <set> 38e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville#include <google/protobuf/stubs/strutil.h> 39e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville 40e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Savillenamespace google { 41e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Savillenamespace protobuf { 42e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Savillenamespace compiler { 43e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Savillenamespace javamicro { 44e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville 45e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Savilleenum eOptimization { JAVAMICRO_OPT_SPEED, JAVAMICRO_OPT_SPACE, JAVAMICRO_OPT_DEFAULT = JAVAMICRO_OPT_SPACE }; 468170787391efcb6cc6a8babc1cce35d5b1aff420Max Caienum eMultipleFiles { JAVAMICRO_MUL_UNSET, JAVAMICRO_MUL_FALSE, JAVAMICRO_MUL_TRUE }; 47e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville 48e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville// Parameters for used by the generators 49e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Savilleclass Params { 50e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville public: 51e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville typedef map<string, string> NameMap; 528170787391efcb6cc6a8babc1cce35d5b1aff420Max Cai typedef set<string> NameSet; 53e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville private: 54e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville string empty_; 55e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville string base_name_; 56e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville eOptimization optimization_; 578170787391efcb6cc6a8babc1cce35d5b1aff420Max Cai eMultipleFiles override_java_multiple_files_; 58e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville bool java_use_vector_; 59e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville NameMap java_packages_; 60e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville NameMap java_outer_classnames_; 618170787391efcb6cc6a8babc1cce35d5b1aff420Max Cai NameSet java_multiple_files_; 62e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville 63e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville public: 64e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville Params(const string & base_name) : 65e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville empty_(""), 66e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville base_name_(base_name), 67e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville optimization_(JAVAMICRO_OPT_DEFAULT), 688170787391efcb6cc6a8babc1cce35d5b1aff420Max Cai override_java_multiple_files_(JAVAMICRO_MUL_UNSET), 69e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville java_use_vector_(false) { 70e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville } 71e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville 72e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville const string& base_name() const { 73e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville return base_name_; 74e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville } 75e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville 76e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville bool has_java_package(const string& file_name) const { 77e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville return java_packages_.find(file_name) 78e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville != java_packages_.end(); 79e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville } 80e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville void set_java_package(const string& file_name, 81e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville const string& java_package) { 82e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville java_packages_[file_name] = java_package; 83e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville } 84e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville const string& java_package(const string& file_name) const { 85e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville NameMap::const_iterator itr; 86e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville 87e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville itr = java_packages_.find(file_name); 88e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville if (itr == java_packages_.end()) { 89e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville return empty_; 90e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville } else { 91e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville return itr->second; 92e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville } 93e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville } 94e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville const NameMap& java_packages() { 95e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville return java_packages_; 96e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville } 97e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville 98e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville bool has_java_outer_classname(const string& file_name) const { 99e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville return java_outer_classnames_.find(file_name) 100e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville != java_outer_classnames_.end(); 101e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville } 102e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville void set_java_outer_classname(const string& file_name, 103e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville const string& java_outer_classname) { 104e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville java_outer_classnames_[file_name] = java_outer_classname; 105e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville } 106e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville const string& java_outer_classname(const string& file_name) const { 107e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville NameMap::const_iterator itr; 108e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville 109e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville itr = java_outer_classnames_.find(file_name); 110e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville if (itr == java_outer_classnames_.end()) { 111e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville return empty_; 112e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville } else { 113e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville return itr->second; 114e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville } 115e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville } 116e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville const NameMap& java_outer_classnames() { 117e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville return java_outer_classnames_; 118e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville } 119e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville 120e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville void set_optimization(eOptimization optimization) { 121e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville optimization_ = optimization; 122e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville } 123e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville eOptimization optimization() const { 124e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville return optimization_; 125e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville } 126e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville 1278170787391efcb6cc6a8babc1cce35d5b1aff420Max Cai void set_override_java_multiple_files(bool value) { 1288170787391efcb6cc6a8babc1cce35d5b1aff420Max Cai if (value) { 1298170787391efcb6cc6a8babc1cce35d5b1aff420Max Cai override_java_multiple_files_ = JAVAMICRO_MUL_TRUE; 1308170787391efcb6cc6a8babc1cce35d5b1aff420Max Cai } else { 1318170787391efcb6cc6a8babc1cce35d5b1aff420Max Cai override_java_multiple_files_ = JAVAMICRO_MUL_FALSE; 1328170787391efcb6cc6a8babc1cce35d5b1aff420Max Cai } 1338170787391efcb6cc6a8babc1cce35d5b1aff420Max Cai } 1348170787391efcb6cc6a8babc1cce35d5b1aff420Max Cai void clear_override_java_multiple_files() { 1358170787391efcb6cc6a8babc1cce35d5b1aff420Max Cai override_java_multiple_files_ = JAVAMICRO_MUL_UNSET; 1368170787391efcb6cc6a8babc1cce35d5b1aff420Max Cai } 1378170787391efcb6cc6a8babc1cce35d5b1aff420Max Cai 1388170787391efcb6cc6a8babc1cce35d5b1aff420Max Cai void set_java_multiple_files(const string& file_name, bool value) { 1398170787391efcb6cc6a8babc1cce35d5b1aff420Max Cai if (value) { 1408170787391efcb6cc6a8babc1cce35d5b1aff420Max Cai java_multiple_files_.insert(file_name); 1418170787391efcb6cc6a8babc1cce35d5b1aff420Max Cai } else { 1428170787391efcb6cc6a8babc1cce35d5b1aff420Max Cai java_multiple_files_.erase(file_name); 1438170787391efcb6cc6a8babc1cce35d5b1aff420Max Cai } 144e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville } 1458170787391efcb6cc6a8babc1cce35d5b1aff420Max Cai bool java_multiple_files(const string& file_name) const { 1468170787391efcb6cc6a8babc1cce35d5b1aff420Max Cai switch (override_java_multiple_files_) { 1478170787391efcb6cc6a8babc1cce35d5b1aff420Max Cai case JAVAMICRO_MUL_FALSE: 1488170787391efcb6cc6a8babc1cce35d5b1aff420Max Cai return false; 1498170787391efcb6cc6a8babc1cce35d5b1aff420Max Cai case JAVAMICRO_MUL_TRUE: 1508170787391efcb6cc6a8babc1cce35d5b1aff420Max Cai return true; 1518170787391efcb6cc6a8babc1cce35d5b1aff420Max Cai default: 1528170787391efcb6cc6a8babc1cce35d5b1aff420Max Cai return java_multiple_files_.find(file_name) 1538170787391efcb6cc6a8babc1cce35d5b1aff420Max Cai != java_multiple_files_.end(); 1548170787391efcb6cc6a8babc1cce35d5b1aff420Max Cai } 155e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville } 156e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville 157e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville void set_java_use_vector(bool value) { 158e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville java_use_vector_ = value; 159e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville } 160e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville bool java_use_vector() const { 161e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville return java_use_vector_; 162e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville } 163e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville 164e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville}; 165e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville 166e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville} // namespace javamicro 167e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville} // namespace compiler 168e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville} // namespace protobuf 169e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville} // namespace google 170e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville#endif // PROTOBUF_COMPILER_JAVAMICRO_JAVAMICRO_PARAMS_H_ 171