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>
37e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville#include <google/protobuf/stubs/strutil.h>
38e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville
39e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Savillenamespace google {
40e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Savillenamespace protobuf {
41e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Savillenamespace compiler {
42e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Savillenamespace javamicro {
43e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville
44e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Savilleenum eOptimization { JAVAMICRO_OPT_SPEED, JAVAMICRO_OPT_SPACE, JAVAMICRO_OPT_DEFAULT = JAVAMICRO_OPT_SPACE };
45e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville
46e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville// Parameters for used by the generators
47e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Savilleclass Params {
48e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville public:
49e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville  typedef map<string, string> NameMap;
50e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville private:
51e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville  string empty_;
52e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville  string base_name_;
53e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville  eOptimization optimization_;
54e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville  bool java_multiple_files_;
55e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville  bool java_use_vector_;
56e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville  NameMap java_packages_;
57e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville  NameMap java_outer_classnames_;
58e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville
59e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville public:
60e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville  Params(const string & base_name) :
61e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville    empty_(""),
62e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville    base_name_(base_name),
63e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville    optimization_(JAVAMICRO_OPT_DEFAULT),
64e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville    java_multiple_files_(false),
65e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville    java_use_vector_(false) {
66e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville  }
67e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville
68e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville  const string& base_name() const {
69e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville    return base_name_;
70e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville  }
71e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville
72e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville  bool has_java_package(const string& file_name) const {
73e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville    return java_packages_.find(file_name)
74e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville                        != java_packages_.end();
75e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville  }
76e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville  void set_java_package(const string& file_name,
77e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville      const string& java_package) {
78e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville    java_packages_[file_name] = java_package;
79e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville  }
80e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville  const string& java_package(const string& file_name) const {
81e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville    NameMap::const_iterator itr;
82e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville
83e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville    itr = java_packages_.find(file_name);
84e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville    if  (itr == java_packages_.end()) {
85e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville      return empty_;
86e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville    } else {
87e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville      return itr->second;
88e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville    }
89e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville  }
90e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville  const NameMap& java_packages() {
91e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville    return java_packages_;
92e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville  }
93e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville
94e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville  bool has_java_outer_classname(const string& file_name) const {
95e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville    return java_outer_classnames_.find(file_name)
96e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville                        != java_outer_classnames_.end();
97e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville  }
98e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville  void set_java_outer_classname(const string& file_name,
99e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville      const string& java_outer_classname) {
100e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville    java_outer_classnames_[file_name] = java_outer_classname;
101e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville  }
102e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville  const string& java_outer_classname(const string& file_name) const {
103e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville    NameMap::const_iterator itr;
104e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville
105e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville    itr = java_outer_classnames_.find(file_name);
106e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville    if  (itr == java_outer_classnames_.end()) {
107e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville      return empty_;
108e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville    } else {
109e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville      return itr->second;
110e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville    }
111e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville  }
112e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville  const NameMap& java_outer_classnames() {
113e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville    return java_outer_classnames_;
114e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville  }
115e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville
116e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville  void set_optimization(eOptimization optimization) {
117e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville    optimization_ = optimization;
118e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville  }
119e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville  eOptimization optimization() const {
120e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville    return optimization_;
121e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville  }
122e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville
123e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville  void set_java_multiple_files(bool value) {
124e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville    java_multiple_files_ = value;
125e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville  }
126e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville  bool java_multiple_files() const {
127e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville    return java_multiple_files_;
128e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville  }
129e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville
130e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville  void set_java_use_vector(bool value) {
131e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville    java_use_vector_ = value;
132e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville  }
133e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville  bool java_use_vector() const {
134e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville    return java_use_vector_;
135e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville  }
136e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville
137e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville};
138e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville
139e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville}  // namespace javamicro
140e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville}  // namespace compiler
141e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville}  // namespace protobuf
142e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville}  // namespace google
143e2d542951c059563a3b7f74c257dac4f222d9dc5Wink Saville#endif  // PROTOBUF_COMPILER_JAVAMICRO_JAVAMICRO_PARAMS_H_
144