text: //
  //  Generated by the J2ObjC translator.  DO NOT EDIT!
  //  source: /Users/antoniocortes/j2objcprj/relases/j2objc/guava/android/build_result/java/com/google/common/collect/ImmutableMultiset.java
  //
  
  #include "J2ObjC_header.h"
  
  #pragma push_macro("INCLUDE_ALL_ComGoogleCommonCollectImmutableMultiset")
  #ifdef RESTRICT_ComGoogleCommonCollectImmutableMultiset
  #define INCLUDE_ALL_ComGoogleCommonCollectImmutableMultiset 0
  #else
  #define INCLUDE_ALL_ComGoogleCommonCollectImmutableMultiset 1
  #endif
  #undef RESTRICT_ComGoogleCommonCollectImmutableMultiset
  
  #pragma clang diagnostic push
  #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
  
  #if __has_feature(nullability)
  #pragma clang diagnostic push
  #pragma GCC diagnostic ignored "-Wnullability"
  #pragma GCC diagnostic ignored "-Wnullability-completeness"
  #endif
  
  #if !defined (ComGoogleCommonCollectImmutableMultiset_) && (INCLUDE_ALL_ComGoogleCommonCollectImmutableMultiset || defined(INCLUDE_ComGoogleCommonCollectImmutableMultiset))
  #define ComGoogleCommonCollectImmutableMultiset_
  
  #define RESTRICT_ComGoogleCommonCollectImmutableMultisetGwtSerializationDependencies 1
  #define INCLUDE_ComGoogleCommonCollectImmutableMultisetGwtSerializationDependencies 1
  #include "com/google/common/collect/ImmutableMultisetGwtSerializationDependencies.h"
  
  #define RESTRICT_ComGoogleCommonCollectMultiset 1
  #define INCLUDE_ComGoogleCommonCollectMultiset 1
  #include "com/google/common/collect/Multiset.h"
  
  @class ComGoogleCommonCollectImmutableList;
  @class ComGoogleCommonCollectImmutableMultiset_Builder;
  @class ComGoogleCommonCollectImmutableSet;
  @class ComGoogleCommonCollectUnmodifiableIterator;
  @class IOSObjectArray;
  @protocol ComGoogleCommonCollectMultiset_Entry;
  @protocol JavaLangIterable;
  @protocol JavaUtilCollection;
  @protocol JavaUtilIterator;
  
  /*!
   @brief A <code>Multiset</code> whose contents will never change, with many other important properties
    detailed at <code>ImmutableCollection</code>.
   <p><b>Grouped iteration.</b> In all current implementations, duplicate elements always appear
    consecutively when iterating. Elements iterate in order by the <i>first</i> appearance of that
    element when the multiset was created. 
   <p>See the Guava User Guide article on <a href="https://github.com/google/guava/wiki/ImmutableCollectionsExplained">
    immutable collections</a>.
   @author Jared Levy
   @author Louis Wasserman
   @since 2.0
   */
  @interface ComGoogleCommonCollectImmutableMultiset : ComGoogleCommonCollectImmutableMultisetGwtSerializationDependencies < ComGoogleCommonCollectMultiset >
  
  #pragma mark Public
  
  /*!
   @brief Guaranteed to throw an exception and leave the collection unmodified.
   @throw UnsupportedOperationExceptionalways
   */
  - (jint)addWithId:(id)element
            withInt:(jint)occurrences __attribute__((deprecated));
  
  - (ComGoogleCommonCollectImmutableList *)asList;
  
  /*!
   @brief Returns a new builder.The generated builder is equivalent to the builder created by the <code>Builder</code>
    constructor.
   */
  + (ComGoogleCommonCollectImmutableMultiset_Builder *)builder;
  
  - (jboolean)containsWithId:(id)object;
  
  /*!
   @brief Returns an immutable multiset containing the given elements, in the "grouped iteration order"
    described in the class documentation.
   @throw NullPointerExceptionif any of <code>elements</code> is null
   @since 6.0
   */
  + (ComGoogleCommonCollectImmutableMultiset *)copyOfWithNSObjectArray:(IOSObjectArray *)elements OBJC_METHOD_FAMILY_NONE;
  
  /*!
   @brief Returns an immutable multiset containing the given elements, in the "grouped iteration order"
    described in the class documentation.
   @throw NullPointerExceptionif any of <code>elements</code> is null
   */
  + (ComGoogleCommonCollectImmutableMultiset *)copyOfWithJavaLangIterable:(id<JavaLangIterable>)elements OBJC_METHOD_FAMILY_NONE;
  
  /*!
   @brief Returns an immutable multiset containing the given elements, in the "grouped iteration order"
    described in the class documentation.
   @throw NullPointerExceptionif any of <code>elements</code> is null
   */
  + (ComGoogleCommonCollectImmutableMultiset *)copyOfWithJavaUtilIterator:(id<JavaUtilIterator>)elements OBJC_METHOD_FAMILY_NONE;
  
  /*!
   @since 21.0 (present with return type <code>Set</code> since 2.0)
   */
  - (ComGoogleCommonCollectImmutableSet *)elementSet;
  
  - (ComGoogleCommonCollectImmutableSet *)entrySet;
  
  - (jboolean)isEqual:(id)object;
  
  - (NSUInteger)hash;
  
  - (ComGoogleCommonCollectUnmodifiableIterator *)iterator;
  
  /*!
   @brief Returns the empty immutable multiset.
   */
  + (ComGoogleCommonCollectImmutableMultiset *)of;
  
  /*!
   @brief Returns an immutable multiset containing a single element.
   @throw NullPointerExceptionif <code>element</code> is null
   @since 6.0 (source-compatible since 2.0)
   */
  + (ComGoogleCommonCollectImmutableMultiset *)ofWithId:(id)element;
  
  /*!
   @brief Returns an immutable multiset containing the given elements, in order.
   @throw NullPointerExceptionif any element is null
   @since 6.0 (source-compatible since 2.0)
   */
  + (ComGoogleCommonCollectImmutableMultiset *)ofWithId:(id)e1
                                                 withId:(id)e2;
  
  /*!
   @brief Returns an immutable multiset containing the given elements, in the "grouped iteration order"
    described in the class documentation.
   @throw NullPointerExceptionif any element is null
   @since 6.0 (source-compatible since 2.0)
   */
  + (ComGoogleCommonCollectImmutableMultiset *)ofWithId:(id)e1
                                                 withId:(id)e2
                                                 withId:(id)e3;
  
  /*!
   @brief Returns an immutable multiset containing the given elements, in the "grouped iteration order"
    described in the class documentation.
   @throw NullPointerExceptionif any element is null
   @since 6.0 (source-compatible since 2.0)
   */
  + (ComGoogleCommonCollectImmutableMultiset *)ofWithId:(id)e1
                                                 withId:(id)e2
                                                 withId:(id)e3
                                                 withId:(id)e4;
  
  /*!
   @brief Returns an immutable multiset containing the given elements, in the "grouped iteration order"
    described in the class documentation.
   @throw NullPointerExceptionif any element is null
   @since 6.0 (source-compatible since 2.0)
   */
  + (ComGoogleCommonCollectImmutableMultiset *)ofWithId:(id)e1
                                                 withId:(id)e2
                                                 withId:(id)e3
                                                 withId:(id)e4
                                                 withId:(id)e5;
  
  /*!
   @brief Returns an immutable multiset containing the given elements, in the "grouped iteration order"
    described in the class documentation.
   @throw NullPointerExceptionif any element is null
   @since 6.0 (source-compatible since 2.0)
   */
  + (ComGoogleCommonCollectImmutableMultiset *)ofWithId:(id)e1
                                                 withId:(id)e2
                                                 withId:(id)e3
                                                 withId:(id)e4
                                                 withId:(id)e5
                                                 withId:(id)e6
                                      withNSObjectArray:(IOSObjectArray *)others;
  
  /*!
   @brief Guaranteed to throw an exception and leave the collection unmodified.
   @throw UnsupportedOperationExceptionalways
   */
  - (jint)removeWithId:(id)element
               withInt:(jint)occurrences __attribute__((deprecated));
  
  /*!
   @brief Guaranteed to throw an exception and leave the collection unmodified.
   @throw UnsupportedOperationExceptionalways
   */
  - (jint)setCountWithId:(id)element
                 withInt:(jint)count __attribute__((deprecated));
  
  /*!
   @brief Guaranteed to throw an exception and leave the collection unmodified.
   @throw UnsupportedOperationExceptionalways
   */
  - (jboolean)setCountWithId:(id)element
                     withInt:(jint)oldCount
                     withInt:(jint)newCount __attribute__((deprecated));
  
  - (NSString *)description;
  
  #pragma mark Package-Private
  
  - (instancetype __nonnull)init;
  
  + (ComGoogleCommonCollectImmutableMultiset *)copyFromEntriesWithJavaUtilCollection:(id<JavaUtilCollection>)entries OBJC_METHOD_FAMILY_NONE;
  
  - (jint)copyIntoArrayWithNSObjectArray:(IOSObjectArray *)dst
                                 withInt:(jint)offset OBJC_METHOD_FAMILY_NONE;
  
  - (id<ComGoogleCommonCollectMultiset_Entry>)getEntryWithInt:(jint)index;
  
  - (id)writeReplace;
  
  @end
  
  J2OBJC_EMPTY_STATIC_INIT(ComGoogleCommonCollectImmutableMultiset)
  
  FOUNDATION_EXPORT ComGoogleCommonCollectImmutableMultiset *ComGoogleCommonCollectImmutableMultiset_of(void);
  
  FOUNDATION_EXPORT ComGoogleCommonCollectImmutableMultiset *ComGoogleCommonCollectImmutableMultiset_ofWithId_(id element);
  
  FOUNDATION_EXPORT ComGoogleCommonCollectImmutableMultiset *ComGoogleCommonCollectImmutableMultiset_ofWithId_withId_(id e1, id e2);
  
  FOUNDATION_EXPORT ComGoogleCommonCollectImmutableMultiset *ComGoogleCommonCollectImmutableMultiset_ofWithId_withId_withId_(id e1, id e2, id e3);
  
  FOUNDATION_EXPORT ComGoogleCommonCollectImmutableMultiset *ComGoogleCommonCollectImmutableMultiset_ofWithId_withId_withId_withId_(id e1, id e2, id e3, id e4);
  
  FOUNDATION_EXPORT ComGoogleCommonCollectImmutableMultiset *ComGoogleCommonCollectImmutableMultiset_ofWithId_withId_withId_withId_withId_(id e1, id e2, id e3, id e4, id e5);
  
  FOUNDATION_EXPORT ComGoogleCommonCollectImmutableMultiset *ComGoogleCommonCollectImmutableMultiset_ofWithId_withId_withId_withId_withId_withId_withNSObjectArray_(id e1, id e2, id e3, id e4, id e5, id e6, IOSObjectArray *others);
  
  FOUNDATION_EXPORT ComGoogleCommonCollectImmutableMultiset *ComGoogleCommonCollectImmutableMultiset_copyOfWithNSObjectArray_(IOSObjectArray *elements);
  
  FOUNDATION_EXPORT ComGoogleCommonCollectImmutableMultiset *ComGoogleCommonCollectImmutableMultiset_copyOfWithJavaLangIterable_(id<JavaLangIterable> elements);
  
  FOUNDATION_EXPORT ComGoogleCommonCollectImmutableMultiset *ComGoogleCommonCollectImmutableMultiset_copyOfWithJavaUtilIterator_(id<JavaUtilIterator> elements);
  
  FOUNDATION_EXPORT ComGoogleCommonCollectImmutableMultiset *ComGoogleCommonCollectImmutableMultiset_copyFromEntriesWithJavaUtilCollection_(id<JavaUtilCollection> entries);
  
  FOUNDATION_EXPORT void ComGoogleCommonCollectImmutableMultiset_init(ComGoogleCommonCollectImmutableMultiset *self);
  
  FOUNDATION_EXPORT ComGoogleCommonCollectImmutableMultiset_Builder *ComGoogleCommonCollectImmutableMultiset_builder(void);
  
  J2OBJC_TYPE_LITERAL_HEADER(ComGoogleCommonCollectImmutableMultiset)
  
  #endif
  
  #if !defined (ComGoogleCommonCollectImmutableMultiset_EntrySetSerializedForm_) && (INCLUDE_ALL_ComGoogleCommonCollectImmutableMultiset || defined(INCLUDE_ComGoogleCommonCollectImmutableMultiset_EntrySetSerializedForm))
  #define ComGoogleCommonCollectImmutableMultiset_EntrySetSerializedForm_
  
  #define RESTRICT_JavaIoSerializable 1
  #define INCLUDE_JavaIoSerializable 1
  #include "java/io/Serializable.h"
  
  @class ComGoogleCommonCollectImmutableMultiset;
  
  @interface ComGoogleCommonCollectImmutableMultiset_EntrySetSerializedForm : NSObject < JavaIoSerializable > {
   @public
    ComGoogleCommonCollectImmutableMultiset *multiset_;
  }
  
  #pragma mark Package-Private
  
  - (instancetype __nonnull)initWithComGoogleCommonCollectImmutableMultiset:(ComGoogleCommonCollectImmutableMultiset *)multiset;
  
  - (id)readResolve;
  
  // Disallowed inherited constructors, do not use.
  
  - (instancetype __nonnull)init NS_UNAVAILABLE;
  
  @end
  
  J2OBJC_EMPTY_STATIC_INIT(ComGoogleCommonCollectImmutableMultiset_EntrySetSerializedForm)
  
  J2OBJC_FIELD_SETTER(ComGoogleCommonCollectImmutableMultiset_EntrySetSerializedForm, multiset_, ComGoogleCommonCollectImmutableMultiset *)
  
  FOUNDATION_EXPORT void ComGoogleCommonCollectImmutableMultiset_EntrySetSerializedForm_initWithComGoogleCommonCollectImmutableMultiset_(ComGoogleCommonCollectImmutableMultiset_EntrySetSerializedForm *self, ComGoogleCommonCollectImmutableMultiset *multiset);
  
  FOUNDATION_EXPORT ComGoogleCommonCollectImmutableMultiset_EntrySetSerializedForm *new_ComGoogleCommonCollectImmutableMultiset_EntrySetSerializedForm_initWithComGoogleCommonCollectImmutableMultiset_(ComGoogleCommonCollectImmutableMultiset *multiset) NS_RETURNS_RETAINED;
  
  FOUNDATION_EXPORT ComGoogleCommonCollectImmutableMultiset_EntrySetSerializedForm *create_ComGoogleCommonCollectImmutableMultiset_EntrySetSerializedForm_initWithComGoogleCommonCollectImmutableMultiset_(ComGoogleCommonCollectImmutableMultiset *multiset);
  
  J2OBJC_TYPE_LITERAL_HEADER(ComGoogleCommonCollectImmutableMultiset_EntrySetSerializedForm)
  
  #endif
  
  #if !defined (ComGoogleCommonCollectImmutableMultiset_Builder_) && (INCLUDE_ALL_ComGoogleCommonCollectImmutableMultiset || defined(INCLUDE_ComGoogleCommonCollectImmutableMultiset_Builder))
  #define ComGoogleCommonCollectImmutableMultiset_Builder_
  
  #define RESTRICT_ComGoogleCommonCollectImmutableCollection 1
  #define INCLUDE_ComGoogleCommonCollectImmutableCollection_Builder 1
  #include "com/google/common/collect/ImmutableCollection.h"
  
  @class ComGoogleCommonCollectImmutableMultiset;
  @class ComGoogleCommonCollectObjectCountHashMap;
  @class IOSObjectArray;
  @protocol JavaLangIterable;
  @protocol JavaUtilIterator;
  
  /*!
   @brief A builder for creating immutable multiset instances, especially <code>public static final</code>
    multisets ("constant multisets").Example:
    
   @code
   public static final ImmutableMultiset<Bean> BEANS =
        new ImmutableMultiset.Builder<Bean>()
            .addCopies(Bean.COCOA, 4)
            .addCopies(Bean.GARDEN, 6)
            .addCopies(Bean.RED, 8)
            .addCopies(Bean.BLACK_EYED, 10)
            .build(); 
   
  @endcode
    
   <p>Builder instances can be reused; it is safe to call <code>build</code> multiple times to build
    multiple multisets in series.
   @since 2.0
   */
  @interface ComGoogleCommonCollectImmutableMultiset_Builder : ComGoogleCommonCollectImmutableCollection_Builder {
   @public
    ComGoogleCommonCollectObjectCountHashMap *contents_;
    /*!
     @brief If build() has been called on the current contents multiset, we need to copy it on any future
    modifications, or we'll modify the already-built ImmutableMultiset.
     */
    jboolean buildInvoked_;
    /*!
     @brief In the event of a setCount(elem, 0) call, we may need to remove elements, which destroys the
    insertion order property of ObjectCountHashMap.In that event, we need to convert to a
    ObjectCountLinkedHashMap, but we need to know we did that so we can convert back.
     */
    jboolean isLinkedHash_;
  }
  
  #pragma mark Public
  
  /*!
   @brief Creates a new builder.The returned builder is equivalent to the builder generated by <code>ImmutableMultiset.builder</code>
   .
   */
  - (instancetype __nonnull)init;
  
  /*!
   @brief Adds <code>element</code> to the <code>ImmutableMultiset</code>.
   @param element the element to add
   @return this <code>Builder</code> object
   @throw NullPointerExceptionif <code>element</code> is null
   */
  - (ComGoogleCommonCollectImmutableMultiset_Builder *)addWithId:(id)element;
  
  /*!
   @brief Adds each element of <code>elements</code> to the <code>ImmutableMultiset</code>.
   @param elements the elements to add
   @return this <code>Builder</code> object
   @throw NullPointerExceptionif <code>elements</code> is null or contains a null element
   */
  - (ComGoogleCommonCollectImmutableMultiset_Builder *)addWithNSObjectArray:(IOSObjectArray *)elements;
  
  /*!
   @brief Adds each element of <code>elements</code> to the <code>ImmutableMultiset</code>.
   @param elements the <code>Iterable</code>  to add to the <code>ImmutableMultiset</code>
   @return this <code>Builder</code> object
   @throw NullPointerExceptionif <code>elements</code> is null or contains a null element
   */
  - (ComGoogleCommonCollectImmutableMultiset_Builder *)addAllWithJavaLangIterable:(id<JavaLangIterable>)elements;
  
  /*!
   @brief Adds each element of <code>elements</code> to the <code>ImmutableMultiset</code>.
   @param elements the elements to add to the <code>ImmutableMultiset</code>
   @return this <code>Builder</code> object
   @throw NullPointerExceptionif <code>elements</code> is null or contains a null element
   */
  - (ComGoogleCommonCollectImmutableMultiset_Builder *)addAllWithJavaUtilIterator:(id<JavaUtilIterator>)elements;
  
  /*!
   @brief Adds a number of occurrences of an element to this <code>ImmutableMultiset</code>.
   @param element the element to add
   @param occurrences the number of occurrences of the element to add. May be zero, in which      case no change will be made.
   @return this <code>Builder</code> object
   @throw NullPointerExceptionif <code>element</code> is null
   @throw IllegalArgumentExceptionif <code>occurrences</code> is negative, or if this operation
        would result in more than <code>Integer.MAX_VALUE</code> occurrences of the element
   */
  - (ComGoogleCommonCollectImmutableMultiset_Builder *)addCopiesWithId:(id)element
                                                               withInt:(jint)occurrences;
  
  /*!
   @brief Returns a newly-created <code>ImmutableMultiset</code> based on the contents of the <code>Builder</code>
   .
   */
  - (ComGoogleCommonCollectImmutableMultiset *)build;
  
  /*!
   @brief Adds or removes the necessary occurrences of an element such that the element attains the
    desired count.
   @param element the element to add or remove occurrences of
   @param count the desired count of the element in this multiset
   @return this <code>Builder</code> object
   @throw NullPointerExceptionif <code>element</code> is null
   @throw IllegalArgumentExceptionif <code>count</code> is negative
   */
  - (ComGoogleCommonCollectImmutableMultiset_Builder *)setCountWithId:(id)element
                                                              withInt:(jint)count;
  
  #pragma mark Package-Private
  
  - (instancetype __nonnull)initWithBoolean:(jboolean)forSubtype;
  
  - (instancetype __nonnull)initWithInt:(jint)estimatedDistinct;
  
  /*!
   @brief If the specified collection is backed by an ObjectCountHashMap, it will be much more
    efficient to iterate over it by index rather than an entry iterator, which will need to
    allocate an object for each entry, so we check for that.
   */
  + (ComGoogleCommonCollectObjectCountHashMap *)tryGetMapWithJavaLangIterable:(id<JavaLangIterable>)multiset;
  
  @end
  
  J2OBJC_EMPTY_STATIC_INIT(ComGoogleCommonCollectImmutableMultiset_Builder)
  
  J2OBJC_FIELD_SETTER(ComGoogleCommonCollectImmutableMultiset_Builder, contents_, ComGoogleCommonCollectObjectCountHashMap *)
  
  FOUNDATION_EXPORT void ComGoogleCommonCollectImmutableMultiset_Builder_init(ComGoogleCommonCollectImmutableMultiset_Builder *self);
  
  FOUNDATION_EXPORT ComGoogleCommonCollectImmutableMultiset_Builder *new_ComGoogleCommonCollectImmutableMultiset_Builder_init(void) NS_RETURNS_RETAINED;
  
  FOUNDATION_EXPORT ComGoogleCommonCollectImmutableMultiset_Builder *create_ComGoogleCommonCollectImmutableMultiset_Builder_init(void);
  
  FOUNDATION_EXPORT void ComGoogleCommonCollectImmutableMultiset_Builder_initWithInt_(ComGoogleCommonCollectImmutableMultiset_Builder *self, jint estimatedDistinct);
  
  FOUNDATION_EXPORT ComGoogleCommonCollectImmutableMultiset_Builder *new_ComGoogleCommonCollectImmutableMultiset_Builder_initWithInt_(jint estimatedDistinct) NS_RETURNS_RETAINED;
  
  FOUNDATION_EXPORT ComGoogleCommonCollectImmutableMultiset_Builder *create_ComGoogleCommonCollectImmutableMultiset_Builder_initWithInt_(jint estimatedDistinct);
  
  FOUNDATION_EXPORT void ComGoogleCommonCollectImmutableMultiset_Builder_initWithBoolean_(ComGoogleCommonCollectImmutableMultiset_Builder *self, jboolean forSubtype);
  
  FOUNDATION_EXPORT ComGoogleCommonCollectImmutableMultiset_Builder *new_ComGoogleCommonCollectImmutableMultiset_Builder_initWithBoolean_(jboolean forSubtype) NS_RETURNS_RETAINED;
  
  FOUNDATION_EXPORT ComGoogleCommonCollectImmutableMultiset_Builder *create_ComGoogleCommonCollectImmutableMultiset_Builder_initWithBoolean_(jboolean forSubtype);
  
  FOUNDATION_EXPORT ComGoogleCommonCollectObjectCountHashMap *ComGoogleCommonCollectImmutableMultiset_Builder_tryGetMapWithJavaLangIterable_(id<JavaLangIterable> multiset);
  
  J2OBJC_TYPE_LITERAL_HEADER(ComGoogleCommonCollectImmutableMultiset_Builder)
  
  #endif
  
  
  #if __has_feature(nullability)
  #pragma clang diagnostic pop
  #endif
  
  #pragma clang diagnostic pop
  #pragma pop_macro("INCLUDE_ALL_ComGoogleCommonCollectImmutableMultiset")
  