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