Server IP : 185.86.78.101 / Your IP : 216.73.216.124 Web Server : Apache System : Linux 675867-vds-valikoshka1996.gmhost.pp.ua 5.4.0-150-generic #167-Ubuntu SMP Mon May 15 17:35:05 UTC 2023 x86_64 User : www ( 1000) PHP Version : 7.4.33 Disable Function : passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : OFF Directory : /usr/share/swig4.0/java/ |
Upload File : |
/* ----------------------------------------------------------------------------- * std_unordered_map.i * * SWIG typemaps for std::unordered_map * The Java proxy class extends java.util.AbstractMap. The std::unordered_map * container looks and feels much like a java.util.HashMap from Java. * ----------------------------------------------------------------------------- */ %include <std_common.i> // ------------------------------------------------------------------------ // std::unordered_map // ------------------------------------------------------------------------ %{ #include <unordered_map> #include <stdexcept> %} %fragment("SWIG_MapSize", "header", fragment="SWIG_JavaIntFromSize_t") { SWIGINTERN jint SWIG_MapSize(size_t size) { jint sz = SWIG_JavaIntFromSize_t(size); if (sz == -1) { throw std::out_of_range("map size is too large to fit into a Java int"); } return sz; } } %javamethodmodifiers std::unordered_map::sizeImpl "private"; %javamethodmodifiers std::unordered_map::containsImpl "private"; %javamethodmodifiers std::unordered_map::putUnchecked "private"; %javamethodmodifiers std::unordered_map::removeUnchecked "private"; %javamethodmodifiers std::unordered_map::find "private"; %javamethodmodifiers std::unordered_map::begin "private"; %javamethodmodifiers std::unordered_map::end "private"; %rename(Iterator) std::unordered_map::iterator; %nodefaultctor std::unordered_map::iterator; %javamethodmodifiers std::unordered_map::iterator::getNextUnchecked "private"; %javamethodmodifiers std::unordered_map::iterator::isNot "private"; %javamethodmodifiers std::unordered_map::iterator::getKey "private"; %javamethodmodifiers std::unordered_map::iterator::getValue "private"; %javamethodmodifiers std::unordered_map::iterator::setValue "private"; namespace std { template<class K, class T> class unordered_map { %typemap(javabase) std::unordered_map<K, T> "java.util.AbstractMap<$typemap(jboxtype, K), $typemap(jboxtype, T)>" %proxycode %{ public int size() { return sizeImpl(); } public boolean containsKey(java.lang.Object key) { if (!(key instanceof $typemap(jboxtype, K))) { return false; } return containsImpl(($typemap(jboxtype, K))key); } public $typemap(jboxtype, T) get(java.lang.Object key) { if (!(key instanceof $typemap(jboxtype, K))) { return null; } Iterator itr = find(($typemap(jboxtype, K)) key); if (itr.isNot(end())) { return itr.getValue(); } return null; } public $typemap(jboxtype, T) put($typemap(jboxtype, K) key, $typemap(jboxtype, T) value) { Iterator itr = find(($typemap(jboxtype, K)) key); if (itr.isNot(end())) { $typemap(jboxtype, T) oldValue = itr.getValue(); itr.setValue(value); return oldValue; } else { putUnchecked(key, value); return null; } } public $typemap(jboxtype, T) remove(java.lang.Object key) { if (!(key instanceof $typemap(jboxtype, K))) { return null; } Iterator itr = find(($typemap(jboxtype, K)) key); if (itr.isNot(end())) { $typemap(jboxtype, T) oldValue = itr.getValue(); removeUnchecked(itr); return oldValue; } else { return null; } } public java.util.Set<Entry<$typemap(jboxtype, K), $typemap(jboxtype, T)>> entrySet() { java.util.Set<Entry<$typemap(jboxtype, K), $typemap(jboxtype, T)>> setToReturn = new java.util.HashSet<Entry<$typemap(jboxtype, K), $typemap(jboxtype, T)>>(); Iterator itr = begin(); final Iterator end = end(); while (itr.isNot(end)) { setToReturn.add(new Entry<$typemap(jboxtype, K), $typemap(jboxtype, T)>() { private Iterator iterator; private Entry<$typemap(jboxtype, K), $typemap(jboxtype, T)> init(Iterator iterator) { this.iterator = iterator; return this; } public $typemap(jboxtype, K) getKey() { return iterator.getKey(); } public $typemap(jboxtype, T) getValue() { return iterator.getValue(); } public $typemap(jboxtype, T) setValue($typemap(jboxtype, T) newValue) { $typemap(jboxtype, T) oldValue = iterator.getValue(); iterator.setValue(newValue); return oldValue; } }.init(itr)); itr = itr.getNextUnchecked(); } return setToReturn; } %} public: typedef size_t size_type; typedef ptrdiff_t difference_type; typedef K key_type; typedef T mapped_type; typedef std::pair< const K, T > value_type; typedef value_type* pointer; typedef const value_type* const_pointer; typedef value_type& reference; typedef const value_type& const_reference; unordered_map(); unordered_map(const unordered_map& other); struct iterator { %typemap(javaclassmodifiers) iterator "protected class" %extend { std::unordered_map< K, T >::iterator getNextUnchecked() { std::unordered_map< K, T >::iterator copy = (*$self); return ++copy; } bool isNot(iterator other) const { return (*$self != other); } K getKey() const { return (*$self)->first; } T getValue() const { return (*$self)->second; } void setValue(const T& newValue) { (*$self)->second = newValue; } } }; %rename(isEmpty) empty; bool empty() const; void clear(); iterator find(const K& key); iterator begin(); iterator end(); %extend { %fragment("SWIG_MapSize"); jint sizeImpl() const throw (std::out_of_range) { return SWIG_MapSize(self->size()); } bool containsImpl(const K& key) { return (self->count(key) > 0); } void putUnchecked(const K& key, const T& value) { (*self)[key] = value; } void removeUnchecked(const std::unordered_map< K, T >::iterator itr) { self->erase(itr); } } }; }