PageRenderTime 73ms CodeModel.GetById 11ms RepoModel.GetById 1ms app.codeStats 1ms

/trunk/Lib/mzscheme/std_map.i

#
Swig | 1348 lines | 1309 code | 20 blank | 19 comment | 0 complexity | aa7f401f3ed991c980c8260f44266db8 MD5 | raw file
Possible License(s): LGPL-2.1, Cube, GPL-3.0, 0BSD, GPL-2.0
  1. /* -----------------------------------------------------------------------------
  2. * std_map.i
  3. *
  4. * SWIG typemaps for std::map
  5. * ----------------------------------------------------------------------------- */
  6. %include <std_common.i>
  7. // ------------------------------------------------------------------------
  8. // std::map
  9. //
  10. // The aim of all that follows would be to integrate std::map with
  11. // MzScheme as much as possible, namely, to allow the user to pass and
  12. // be returned Scheme association lists.
  13. // const declarations are used to guess the intent of the function being
  14. // exported; therefore, the following rationale is applied:
  15. //
  16. // -- f(std::map<T>), f(const std::map<T>&), f(const std::map<T>*):
  17. // the parameter being read-only, either a Scheme alist or a
  18. // previously wrapped std::map<T> can be passed.
  19. // -- f(std::map<T>&), f(std::map<T>*):
  20. // the parameter must be modified; therefore, only a wrapped std::map
  21. // can be passed.
  22. // -- std::map<T> f():
  23. // the map is returned by copy; therefore, a Scheme alist
  24. // is returned which is most easily used in other Scheme functions
  25. // -- std::map<T>& f(), std::map<T>* f(), const std::map<T>& f(),
  26. // const std::map<T>* f():
  27. // the map is returned by reference; therefore, a wrapped std::map
  28. // is returned
  29. // ------------------------------------------------------------------------
  30. %{
  31. #include <map>
  32. #include <algorithm>
  33. #include <stdexcept>
  34. %}
  35. // exported class
  36. namespace std {
  37. template<class K, class T> class map {
  38. %typemap(in) map<K,T> (std::map<K,T>* m) {
  39. if (SCHEME_NULLP($input)) {
  40. $1 = std::map<K,T >();
  41. } else if (SCHEME_PAIRP($input)) {
  42. $1 = std::map<K,T >();
  43. Scheme_Object* alist = $input;
  44. while (!SCHEME_NULLP(alist)) {
  45. K* k;
  46. T* x;
  47. Scheme_Object *entry, *key, *val;
  48. entry = scheme_car(alist);
  49. if (!SCHEME_PAIRP(entry))
  50. SWIG_exception(SWIG_TypeError,"alist expected");
  51. key = scheme_car(entry);
  52. val = scheme_cdr(entry);
  53. k = (K*) SWIG_MustGetPtr(key,$descriptor(K *),$argnum, 0);
  54. if (SWIG_ConvertPtr(val,(void**) &x,
  55. $descriptor(T *), 0) == -1) {
  56. if (!SCHEME_PAIRP(val))
  57. SWIG_exception(SWIG_TypeError,"alist expected");
  58. val = scheme_car(val);
  59. x = (T*) SWIG_MustGetPtr(val,$descriptor(T *),$argnum, 0);
  60. }
  61. (($1_type &)$1)[*k] = *x;
  62. alist = scheme_cdr(alist);
  63. }
  64. } else {
  65. $1 = *(($&1_type)
  66. SWIG_MustGetPtr($input,$&1_descriptor,$argnum, 0));
  67. }
  68. }
  69. %typemap(in) const map<K,T>& (std::map<K,T> temp,
  70. std::map<K,T>* m),
  71. const map<K,T>* (std::map<K,T> temp,
  72. std::map<K,T>* m) {
  73. if (SCHEME_NULLP($input)) {
  74. temp = std::map<K,T >();
  75. $1 = &temp;
  76. } else if (SCHEME_PAIRP($input)) {
  77. temp = std::map<K,T >();
  78. $1 = &temp;
  79. Scheme_Object* alist = $input;
  80. while (!SCHEME_NULLP(alist)) {
  81. K* k;
  82. T* x;
  83. Scheme_Object *entry, *key, *val;
  84. entry = scheme_car(alist);
  85. if (!SCHEME_PAIRP(entry))
  86. SWIG_exception(SWIG_TypeError,"alist expected");
  87. key = scheme_car(entry);
  88. val = scheme_cdr(entry);
  89. k = (K*) SWIG_MustGetPtr(key,$descriptor(K *),$argnum, 0);
  90. if (SWIG_ConvertPtr(val,(void**) &x,
  91. $descriptor(T *), 0) == -1) {
  92. if (!SCHEME_PAIRP(val))
  93. SWIG_exception(SWIG_TypeError,"alist expected");
  94. val = scheme_car(val);
  95. x = (T*) SWIG_MustGetPtr(val,$descriptor(T *),$argnum, 0);
  96. }
  97. temp[*k] = *x;
  98. alist = scheme_cdr(alist);
  99. }
  100. } else {
  101. $1 = ($1_ltype) SWIG_MustGetPtr($input,$1_descriptor,$argnum, 0);
  102. }
  103. }
  104. %typemap(out) map<K,T> {
  105. Scheme_Object* alist = scheme_null;
  106. for (std::map<K,T >::reverse_iterator i=$1.rbegin();
  107. i!=$1.rend(); ++i) {
  108. K* key = new K(i->first);
  109. T* val = new T(i->second);
  110. Scheme_Object* k = SWIG_NewPointerObj(key,$descriptor(K *), 1);
  111. Scheme_Object* x = SWIG_NewPointerObj(val,$descriptor(T *), 1);
  112. Scheme_Object* entry = scheme_make_pair(k,x);
  113. alist = scheme_make_pair(entry,alist);
  114. }
  115. $result = alist;
  116. }
  117. %typecheck(SWIG_TYPECHECK_MAP) map<K,T> {
  118. /* native sequence? */
  119. if (SCHEME_NULLP($input)) {
  120. /* an empty sequence can be of any type */
  121. $1 = 1;
  122. } else if (SCHEME_PAIRP($input)) {
  123. /* check the first element only */
  124. K* k;
  125. T* x;
  126. Scheme_Object* head = scheme_car($input);
  127. if (SCHEME_PAIRP(head)) {
  128. Scheme_Object* key = scheme_car(head);
  129. Scheme_Object* val = scheme_cdr(head);
  130. if (SWIG_ConvertPtr(key,(void**) &k,
  131. $descriptor(K *), 0) == -1) {
  132. $1 = 0;
  133. } else {
  134. if (SWIG_ConvertPtr(val,(void**) &x,
  135. $descriptor(T *), 0) != -1) {
  136. $1 = 1;
  137. } else if (SCHEME_PAIRP(val)) {
  138. val = scheme_car(val);
  139. if (SWIG_ConvertPtr(val,(void**) &x,
  140. $descriptor(T *), 0) != -1)
  141. $1 = 1;
  142. else
  143. $1 = 0;
  144. } else {
  145. $1 = 0;
  146. }
  147. }
  148. } else {
  149. $1 = 0;
  150. }
  151. } else {
  152. /* wrapped map? */
  153. std::map<K,T >* m;
  154. if (SWIG_ConvertPtr($input,(void **) &m,
  155. $&1_descriptor, 0) != -1)
  156. $1 = 1;
  157. else
  158. $1 = 0;
  159. }
  160. }
  161. %typecheck(SWIG_TYPECHECK_MAP) const map<K,T>&,
  162. const map<K,T>* {
  163. /* native sequence? */
  164. if (SCHEME_NULLP($input)) {
  165. /* an empty sequence can be of any type */
  166. $1 = 1;
  167. } else if (SCHEME_PAIRP($input)) {
  168. /* check the first element only */
  169. K* k;
  170. T* x;
  171. Scheme_Object* head = scheme_car($input);
  172. if (SCHEME_PAIRP(head)) {
  173. Scheme_Object* key = scheme_car(head);
  174. Scheme_Object* val = scheme_cdr(head);
  175. if (SWIG_ConvertPtr(key,(void**) &k,
  176. $descriptor(K *), 0) == -1) {
  177. $1 = 0;
  178. } else {
  179. if (SWIG_ConvertPtr(val,(void**) &x,
  180. $descriptor(T *), 0) != -1) {
  181. $1 = 1;
  182. } else if (SCHEME_PAIRP(val)) {
  183. val = scheme_car(val);
  184. if (SWIG_ConvertPtr(val,(void**) &x,
  185. $descriptor(T *), 0) != -1)
  186. $1 = 1;
  187. else
  188. $1 = 0;
  189. } else {
  190. $1 = 0;
  191. }
  192. }
  193. } else {
  194. $1 = 0;
  195. }
  196. } else {
  197. /* wrapped map? */
  198. std::map<K,T >* m;
  199. if (SWIG_ConvertPtr($input,(void **) &m,
  200. $1_descriptor, 0) != -1)
  201. $1 = 1;
  202. else
  203. $1 = 0;
  204. }
  205. }
  206. %rename("length") size;
  207. %rename("null?") empty;
  208. %rename("clear!") clear;
  209. %rename("ref") __getitem__;
  210. %rename("set!") __setitem__;
  211. %rename("delete!") __delitem__;
  212. %rename("has-key?") has_key;
  213. public:
  214. map();
  215. map(const map<K,T> &);
  216. unsigned int size() const;
  217. bool empty() const;
  218. void clear();
  219. %extend {
  220. T& __getitem__(const K& key) throw (std::out_of_range) {
  221. std::map<K,T >::iterator i = self->find(key);
  222. if (i != self->end())
  223. return i->second;
  224. else
  225. throw std::out_of_range("key not found");
  226. }
  227. void __setitem__(const K& key, const T& x) {
  228. (*self)[key] = x;
  229. }
  230. void __delitem__(const K& key) throw (std::out_of_range) {
  231. std::map<K,T >::iterator i = self->find(key);
  232. if (i != self->end())
  233. self->erase(i);
  234. else
  235. throw std::out_of_range("key not found");
  236. }
  237. bool has_key(const K& key) {
  238. std::map<K,T >::iterator i = self->find(key);
  239. return i != self->end();
  240. }
  241. Scheme_Object* keys() {
  242. Scheme_Object* result = scheme_null;
  243. for (std::map<K,T >::reverse_iterator i=self->rbegin();
  244. i!=self->rend(); ++i) {
  245. K* key = new K(i->first);
  246. Scheme_Object* k = SWIG_NewPointerObj(key,$descriptor(K *), 1);
  247. result = scheme_make_pair(k,result);
  248. }
  249. return result;
  250. }
  251. }
  252. };
  253. // specializations for built-ins
  254. %define specialize_std_map_on_key(K,CHECK,CONVERT_FROM,CONVERT_TO)
  255. template<class T> class map<K,T> {
  256. %typemap(in) map<K,T> (std::map<K,T>* m) {
  257. if (SCHEME_NULLP($input)) {
  258. $1 = std::map<K,T >();
  259. } else if (SCHEME_PAIRP($input)) {
  260. $1 = std::map<K,T >();
  261. Scheme_Object* alist = $input;
  262. while (!SCHEME_NULLP(alist)) {
  263. T* x;
  264. Scheme_Object *entry, *key, *val;
  265. entry = scheme_car(alist);
  266. if (!SCHEME_PAIRP(entry))
  267. SWIG_exception(SWIG_TypeError,"alist expected");
  268. key = scheme_car(entry);
  269. val = scheme_cdr(entry);
  270. if (!CHECK(key))
  271. SWIG_exception(SWIG_TypeError,
  272. "map<" #K "," #T "> expected");
  273. if (SWIG_ConvertPtr(val,(void**) &x,
  274. $descriptor(T *), 0) == -1) {
  275. if (!SCHEME_PAIRP(val))
  276. SWIG_exception(SWIG_TypeError,"alist expected");
  277. val = scheme_car(val);
  278. x = (T*) SWIG_MustGetPtr(val,$descriptor(T *),$argnum, 0);
  279. }
  280. (($1_type &)$1)[CONVERT_FROM(key)] = *x;
  281. alist = scheme_cdr(alist);
  282. }
  283. } else {
  284. $1 = *(($&1_type)
  285. SWIG_MustGetPtr($input,$&1_descriptor,$argnum, 0));
  286. }
  287. }
  288. %typemap(in) const map<K,T>& (std::map<K,T> temp,
  289. std::map<K,T>* m),
  290. const map<K,T>* (std::map<K,T> temp,
  291. std::map<K,T>* m) {
  292. if (SCHEME_NULLP($input)) {
  293. temp = std::map<K,T >();
  294. $1 = &temp;
  295. } else if (SCHEME_PAIRP($input)) {
  296. temp = std::map<K,T >();
  297. $1 = &temp;
  298. Scheme_Object* alist = $input;
  299. while (!SCHEME_NULLP(alist)) {
  300. T* x;
  301. Scheme_Object *entry, *key, *val;
  302. entry = scheme_car(alist);
  303. if (!SCHEME_PAIRP(entry))
  304. SWIG_exception(SWIG_TypeError,"alist expected");
  305. key = scheme_car(entry);
  306. val = scheme_cdr(entry);
  307. if (!CHECK(key))
  308. SWIG_exception(SWIG_TypeError,
  309. "map<" #K "," #T "> expected");
  310. if (SWIG_ConvertPtr(val,(void**) &x,
  311. $descriptor(T *), 0) == -1) {
  312. if (!SCHEME_PAIRP(val))
  313. SWIG_exception(SWIG_TypeError,"alist expected");
  314. val = scheme_car(val);
  315. x = (T*) SWIG_MustGetPtr(val,$descriptor(T *),$argnum, 0);
  316. }
  317. temp[CONVERT_FROM(key)] = *x;
  318. alist = scheme_cdr(alist);
  319. }
  320. } else {
  321. $1 = ($1_ltype) SWIG_MustGetPtr($input,$1_descriptor,$argnum, 0);
  322. }
  323. }
  324. %typemap(out) map<K,T> {
  325. Scheme_Object* alist = scheme_null;
  326. for (std::map<K,T >::reverse_iterator i=$1.rbegin();
  327. i!=$1.rend(); ++i) {
  328. T* val = new T(i->second);
  329. Scheme_Object* k = CONVERT_TO(i->first);
  330. Scheme_Object* x = SWIG_NewPointerObj(val,$descriptor(T *), 1);
  331. Scheme_Object* entry = scheme_make_pair(k,x);
  332. alist = scheme_make_pair(entry,alist);
  333. }
  334. $result = alist;
  335. }
  336. %typecheck(SWIG_TYPECHECK_MAP) map<K,T> {
  337. // native sequence?
  338. if (SCHEME_NULLP($input)) {
  339. /* an empty sequence can be of any type */
  340. $1 = 1;
  341. } else if (SCHEME_PAIRP($input)) {
  342. // check the first element only
  343. T* x;
  344. Scheme_Object* head = scheme_car($input);
  345. if (SCHEME_PAIRP(head)) {
  346. Scheme_Object* key = scheme_car(head);
  347. Scheme_Object* val = scheme_cdr(head);
  348. if (!CHECK(key)) {
  349. $1 = 0;
  350. } else {
  351. if (SWIG_ConvertPtr(val,(void**) &x,
  352. $descriptor(T *), 0) != -1) {
  353. $1 = 1;
  354. } else if (SCHEME_PAIRP(val)) {
  355. val = scheme_car(val);
  356. if (SWIG_ConvertPtr(val,(void**) &x,
  357. $descriptor(T *), 0) != -1)
  358. $1 = 1;
  359. else
  360. $1 = 0;
  361. } else {
  362. $1 = 0;
  363. }
  364. }
  365. } else {
  366. $1 = 0;
  367. }
  368. } else {
  369. // wrapped map?
  370. std::map<K,T >* m;
  371. if (SWIG_ConvertPtr($input,(void **) &m,
  372. $&1_descriptor, 0) != -1)
  373. $1 = 1;
  374. else
  375. $1 = 0;
  376. }
  377. }
  378. %typecheck(SWIG_TYPECHECK_MAP) const map<K,T>&,
  379. const map<K,T>* {
  380. // native sequence?
  381. if (SCHEME_NULLP($input)) {
  382. /* an empty sequence can be of any type */
  383. $1 = 1;
  384. } else if (SCHEME_PAIRP($input)) {
  385. // check the first element only
  386. T* x;
  387. Scheme_Object* head = scheme_car($input);
  388. if (SCHEME_PAIRP(head)) {
  389. Scheme_Object* key = scheme_car(head);
  390. Scheme_Object* val = scheme_cdr(head);
  391. if (!CHECK(key)) {
  392. $1 = 0;
  393. } else {
  394. if (SWIG_ConvertPtr(val,(void**) &x,
  395. $descriptor(T *), 0) != -1) {
  396. $1 = 1;
  397. } else if (SCHEME_PAIRP(val)) {
  398. val = scheme_car(val);
  399. if (SWIG_ConvertPtr(val,(void**) &x,
  400. $descriptor(T *), 0) != -1)
  401. $1 = 1;
  402. else
  403. $1 = 0;
  404. } else {
  405. $1 = 0;
  406. }
  407. }
  408. } else {
  409. $1 = 0;
  410. }
  411. } else {
  412. // wrapped map?
  413. std::map<K,T >* m;
  414. if (SWIG_ConvertPtr($input,(void **) &m,
  415. $1_descriptor, 0) != -1)
  416. $1 = 1;
  417. else
  418. $1 = 0;
  419. }
  420. }
  421. %rename("length") size;
  422. %rename("null?") empty;
  423. %rename("clear!") clear;
  424. %rename("ref") __getitem__;
  425. %rename("set!") __setitem__;
  426. %rename("delete!") __delitem__;
  427. %rename("has-key?") has_key;
  428. public:
  429. map();
  430. map(const map<K,T> &);
  431. unsigned int size() const;
  432. bool empty() const;
  433. void clear();
  434. %extend {
  435. T& __getitem__(K key) throw (std::out_of_range) {
  436. std::map<K,T >::iterator i = self->find(key);
  437. if (i != self->end())
  438. return i->second;
  439. else
  440. throw std::out_of_range("key not found");
  441. }
  442. void __setitem__(K key, const T& x) {
  443. (*self)[key] = x;
  444. }
  445. void __delitem__(K key) throw (std::out_of_range) {
  446. std::map<K,T >::iterator i = self->find(key);
  447. if (i != self->end())
  448. self->erase(i);
  449. else
  450. throw std::out_of_range("key not found");
  451. }
  452. bool has_key(K key) {
  453. std::map<K,T >::iterator i = self->find(key);
  454. return i != self->end();
  455. }
  456. Scheme_Object* keys() {
  457. Scheme_Object* result = scheme_null;
  458. for (std::map<K,T >::reverse_iterator i=self->rbegin();
  459. i!=self->rend(); ++i) {
  460. Scheme_Object* k = CONVERT_TO(i->first);
  461. result = scheme_make_pair(k,result);
  462. }
  463. return result;
  464. }
  465. }
  466. };
  467. %enddef
  468. %define specialize_std_map_on_value(T,CHECK,CONVERT_FROM,CONVERT_TO)
  469. template<class K> class map<K,T> {
  470. %typemap(in) map<K,T> (std::map<K,T>* m) {
  471. if (SCHEME_NULLP($input)) {
  472. $1 = std::map<K,T >();
  473. } else if (SCHEME_PAIRP($input)) {
  474. $1 = std::map<K,T >();
  475. Scheme_Object* alist = $input;
  476. while (!SCHEME_NULLP(alist)) {
  477. K* k;
  478. Scheme_Object *entry, *key, *val;
  479. entry = scheme_car(alist);
  480. if (!SCHEME_PAIRP(entry))
  481. SWIG_exception(SWIG_TypeError,"alist expected");
  482. key = scheme_car(entry);
  483. val = scheme_cdr(entry);
  484. k = (K*) SWIG_MustGetPtr(key,$descriptor(K *),$argnum, 0);
  485. if (!CHECK(val)) {
  486. if (!SCHEME_PAIRP(val))
  487. SWIG_exception(SWIG_TypeError,"alist expected");
  488. val = scheme_car(val);
  489. if (!CHECK(val))
  490. SWIG_exception(SWIG_TypeError,
  491. "map<" #K "," #T "> expected");
  492. }
  493. (($1_type &)$1)[*k] = CONVERT_FROM(val);
  494. alist = scheme_cdr(alist);
  495. }
  496. } else {
  497. $1 = *(($&1_type)
  498. SWIG_MustGetPtr($input,$&1_descriptor,$argnum, 0));
  499. }
  500. }
  501. %typemap(in) const map<K,T>& (std::map<K,T> temp,
  502. std::map<K,T>* m),
  503. const map<K,T>* (std::map<K,T> temp,
  504. std::map<K,T>* m) {
  505. if (SCHEME_NULLP($input)) {
  506. temp = std::map<K,T >();
  507. $1 = &temp;
  508. } else if (SCHEME_PAIRP($input)) {
  509. temp = std::map<K,T >();
  510. $1 = &temp;
  511. Scheme_Object* alist = $input;
  512. while (!SCHEME_NULLP(alist)) {
  513. K* k;
  514. Scheme_Object *entry, *key, *val;
  515. entry = scheme_car(alist);
  516. if (!SCHEME_PAIRP(entry))
  517. SWIG_exception(SWIG_TypeError,"alist expected");
  518. key = scheme_car(entry);
  519. val = scheme_cdr(entry);
  520. k = (K*) SWIG_MustGetPtr(key,$descriptor(K *),$argnum, 0);
  521. if (!CHECK(val)) {
  522. if (!SCHEME_PAIRP(val))
  523. SWIG_exception(SWIG_TypeError,"alist expected");
  524. val = scheme_car(val);
  525. if (!CHECK(val))
  526. SWIG_exception(SWIG_TypeError,
  527. "map<" #K "," #T "> expected");
  528. }
  529. temp[*k] = CONVERT_FROM(val);
  530. alist = scheme_cdr(alist);
  531. }
  532. } else {
  533. $1 = ($1_ltype) SWIG_MustGetPtr($input,$1_descriptor,$argnum, 0);
  534. }
  535. }
  536. %typemap(out) map<K,T> {
  537. Scheme_Object* alist = scheme_null;
  538. for (std::map<K,T >::reverse_iterator i=$1.rbegin();
  539. i!=$1.rend(); ++i) {
  540. K* key = new K(i->first);
  541. Scheme_Object* k = SWIG_NewPointerObj(key,$descriptor(K *), 1);
  542. Scheme_Object* x = CONVERT_TO(i->second);
  543. Scheme_Object* entry = scheme_make_pair(k,x);
  544. alist = scheme_make_pair(entry,alist);
  545. }
  546. $result = alist;
  547. }
  548. %typecheck(SWIG_TYPECHECK_MAP) map<K,T> {
  549. // native sequence?
  550. if (SCHEME_NULLP($input)) {
  551. /* an empty sequence can be of any type */
  552. $1 = 1;
  553. } else if (SCHEME_PAIRP($input)) {
  554. // check the first element only
  555. K* k;
  556. Scheme_Object* head = scheme_car($input);
  557. if (SCHEME_PAIRP(head)) {
  558. Scheme_Object* key = scheme_car(head);
  559. Scheme_Object* val = scheme_cdr(head);
  560. if (SWIG_ConvertPtr(val,(void **) &k,
  561. $descriptor(K *), 0) == -1) {
  562. $1 = 0;
  563. } else {
  564. if (CHECK(val)) {
  565. $1 = 1;
  566. } else if (SCHEME_PAIRP(val)) {
  567. val = scheme_car(val);
  568. if (CHECK(val))
  569. $1 = 1;
  570. else
  571. $1 = 0;
  572. } else {
  573. $1 = 0;
  574. }
  575. }
  576. } else {
  577. $1 = 0;
  578. }
  579. } else {
  580. // wrapped map?
  581. std::map<K,T >* m;
  582. if (SWIG_ConvertPtr($input,(void **) &m,
  583. $&1_descriptor, 0) != -1)
  584. $1 = 1;
  585. else
  586. $1 = 0;
  587. }
  588. }
  589. %typecheck(SWIG_TYPECHECK_MAP) const map<K,T>&,
  590. const map<K,T>* {
  591. // native sequence?
  592. if (SCHEME_NULLP($input)) {
  593. /* an empty sequence can be of any type */
  594. $1 = 1;
  595. } else if (SCHEME_PAIRP($input)) {
  596. // check the first element only
  597. K* k;
  598. Scheme_Object* head = scheme_car($input);
  599. if (SCHEME_PAIRP(head)) {
  600. Scheme_Object* key = scheme_car(head);
  601. Scheme_Object* val = scheme_cdr(head);
  602. if (SWIG_ConvertPtr(val,(void **) &k,
  603. $descriptor(K *), 0) == -1) {
  604. $1 = 0;
  605. } else {
  606. if (CHECK(val)) {
  607. $1 = 1;
  608. } else if (SCHEME_PAIRP(val)) {
  609. val = scheme_car(val);
  610. if (CHECK(val))
  611. $1 = 1;
  612. else
  613. $1 = 0;
  614. } else {
  615. $1 = 0;
  616. }
  617. }
  618. } else {
  619. $1 = 0;
  620. }
  621. } else {
  622. // wrapped map?
  623. std::map<K,T >* m;
  624. if (SWIG_ConvertPtr($input,(void **) &m,
  625. $1_descriptor, 0) != -1)
  626. $1 = 1;
  627. else
  628. $1 = 0;
  629. }
  630. }
  631. %rename("length") size;
  632. %rename("null?") empty;
  633. %rename("clear!") clear;
  634. %rename("ref") __getitem__;
  635. %rename("set!") __setitem__;
  636. %rename("delete!") __delitem__;
  637. %rename("has-key?") has_key;
  638. public:
  639. map();
  640. map(const map<K,T> &);
  641. unsigned int size() const;
  642. bool empty() const;
  643. void clear();
  644. %extend {
  645. T __getitem__(const K& key) throw (std::out_of_range) {
  646. std::map<K,T >::iterator i = self->find(key);
  647. if (i != self->end())
  648. return i->second;
  649. else
  650. throw std::out_of_range("key not found");
  651. }
  652. void __setitem__(const K& key, T x) {
  653. (*self)[key] = x;
  654. }
  655. void __delitem__(const K& key) throw (std::out_of_range) {
  656. std::map<K,T >::iterator i = self->find(key);
  657. if (i != self->end())
  658. self->erase(i);
  659. else
  660. throw std::out_of_range("key not found");
  661. }
  662. bool has_key(const K& key) {
  663. std::map<K,T >::iterator i = self->find(key);
  664. return i != self->end();
  665. }
  666. Scheme_Object* keys() {
  667. Scheme_Object* result = scheme_null;
  668. for (std::map<K,T >::reverse_iterator i=self->rbegin();
  669. i!=self->rend(); ++i) {
  670. K* key = new K(i->first);
  671. Scheme_Object* k = SWIG_NewPointerObj(key,$descriptor(K *), 1);
  672. result = scheme_make_pair(k,result);
  673. }
  674. return result;
  675. }
  676. }
  677. };
  678. %enddef
  679. %define specialize_std_map_on_both(K,CHECK_K,CONVERT_K_FROM,CONVERT_K_TO,
  680. T,CHECK_T,CONVERT_T_FROM,CONVERT_T_TO)
  681. template<> class map<K,T> {
  682. %typemap(in) map<K,T> (std::map<K,T>* m) {
  683. if (SCHEME_NULLP($input)) {
  684. $1 = std::map<K,T >();
  685. } else if (SCHEME_PAIRP($input)) {
  686. $1 = std::map<K,T >();
  687. Scheme_Object* alist = $input;
  688. while (!SCHEME_NULLP(alist)) {
  689. Scheme_Object *entry, *key, *val;
  690. entry = scheme_car(alist);
  691. if (!SCHEME_PAIRP(entry))
  692. SWIG_exception(SWIG_TypeError,"alist expected");
  693. key = scheme_car(entry);
  694. val = scheme_cdr(entry);
  695. if (!CHECK_K(key))
  696. SWIG_exception(SWIG_TypeError,
  697. "map<" #K "," #T "> expected");
  698. if (!CHECK_T(val)) {
  699. if (!SCHEME_PAIRP(val))
  700. SWIG_exception(SWIG_TypeError,"alist expected");
  701. val = scheme_car(val);
  702. if (!CHECK_T(val))
  703. SWIG_exception(SWIG_TypeError,
  704. "map<" #K "," #T "> expected");
  705. }
  706. (($1_type &)$1)[CONVERT_K_FROM(key)] =
  707. CONVERT_T_FROM(val);
  708. alist = scheme_cdr(alist);
  709. }
  710. } else {
  711. $1 = *(($&1_type)
  712. SWIG_MustGetPtr($input,$&1_descriptor,$argnum, 0));
  713. }
  714. }
  715. %typemap(in) const map<K,T>& (std::map<K,T> temp,
  716. std::map<K,T>* m),
  717. const map<K,T>* (std::map<K,T> temp,
  718. std::map<K,T>* m) {
  719. if (SCHEME_NULLP($input)) {
  720. temp = std::map<K,T >();
  721. $1 = &temp;
  722. } else if (SCHEME_PAIRP($input)) {
  723. temp = std::map<K,T >();
  724. $1 = &temp;
  725. Scheme_Object* alist = $input;
  726. while (!SCHEME_NULLP(alist)) {
  727. Scheme_Object *entry, *key, *val;
  728. entry = scheme_car(alist);
  729. if (!SCHEME_PAIRP(entry))
  730. SWIG_exception(SWIG_TypeError,"alist expected");
  731. key = scheme_car(entry);
  732. val = scheme_cdr(entry);
  733. if (!CHECK_K(key))
  734. SWIG_exception(SWIG_TypeError,
  735. "map<" #K "," #T "> expected");
  736. if (!CHECK_T(val)) {
  737. if (!SCHEME_PAIRP(val))
  738. SWIG_exception(SWIG_TypeError,"alist expected");
  739. val = scheme_car(val);
  740. if (!CHECK_T(val))
  741. SWIG_exception(SWIG_TypeError,
  742. "map<" #K "," #T "> expected");
  743. }
  744. temp[CONVERT_K_FROM(key)] = CONVERT_T_FROM(val);
  745. alist = scheme_cdr(alist);
  746. }
  747. } else {
  748. $1 = ($1_ltype) SWIG_MustGetPtr($input,$1_descriptor,$argnum, 0);
  749. }
  750. }
  751. %typemap(out) map<K,T> {
  752. Scheme_Object* alist = scheme_null;
  753. for (std::map<K,T >::reverse_iterator i=$1.rbegin();
  754. i!=$1.rend(); ++i) {
  755. Scheme_Object* k = CONVERT_K_TO(i->first);
  756. Scheme_Object* x = CONVERT_T_TO(i->second);
  757. Scheme_Object* entry = scheme_make_pair(k,x);
  758. alist = scheme_make_pair(entry,alist);
  759. }
  760. $result = alist;
  761. }
  762. %typecheck(SWIG_TYPECHECK_MAP) map<K,T> {
  763. // native sequence?
  764. if (SCHEME_NULLP($input)) {
  765. /* an empty sequence can be of any type */
  766. $1 = 1;
  767. } else if (SCHEME_PAIRP($input)) {
  768. // check the first element only
  769. Scheme_Object* head = scheme_car($input);
  770. if (SCHEME_PAIRP(head)) {
  771. Scheme_Object* key = scheme_car(head);
  772. Scheme_Object* val = scheme_cdr(head);
  773. if (!CHECK_K(key)) {
  774. $1 = 0;
  775. } else {
  776. if (CHECK_T(val)) {
  777. $1 = 1;
  778. } else if (SCHEME_PAIRP(val)) {
  779. val = scheme_car(val);
  780. if (CHECK_T(val))
  781. $1 = 1;
  782. else
  783. $1 = 0;
  784. } else {
  785. $1 = 0;
  786. }
  787. }
  788. } else {
  789. $1 = 0;
  790. }
  791. } else {
  792. // wrapped map?
  793. std::map<K,T >* m;
  794. if (SWIG_ConvertPtr($input,(void **) &m,
  795. $&1_descriptor, 0) != -1)
  796. $1 = 1;
  797. else
  798. $1 = 0;
  799. }
  800. }
  801. %typecheck(SWIG_TYPECHECK_MAP) const map<K,T>&,
  802. const map<K,T>* {
  803. // native sequence?
  804. if (SCHEME_NULLP($input)) {
  805. /* an empty sequence can be of any type */
  806. $1 = 1;
  807. } else if (SCHEME_PAIRP($input)) {
  808. // check the first element only
  809. Scheme_Object* head = scheme_car($input);
  810. if (SCHEME_PAIRP(head)) {
  811. Scheme_Object* key = scheme_car(head);
  812. Scheme_Object* val = scheme_cdr(head);
  813. if (!CHECK_K(key)) {
  814. $1 = 0;
  815. } else {
  816. if (CHECK_T(val)) {
  817. $1 = 1;
  818. } else if (SCHEME_PAIRP(val)) {
  819. val = scheme_car(val);
  820. if (CHECK_T(val))
  821. $1 = 1;
  822. else
  823. $1 = 0;
  824. } else {
  825. $1 = 0;
  826. }
  827. }
  828. } else {
  829. $1 = 0;
  830. }
  831. } else {
  832. // wrapped map?
  833. std::map<K,T >* m;
  834. if (SWIG_ConvertPtr($input,(void **) &m,
  835. $1_descriptor, 0) != -1)
  836. $1 = 1;
  837. else
  838. $1 = 0;
  839. }
  840. }
  841. %rename("length") size;
  842. %rename("null?") empty;
  843. %rename("clear!") clear;
  844. %rename("ref") __getitem__;
  845. %rename("set!") __setitem__;
  846. %rename("delete!") __delitem__;
  847. %rename("has-key?") has_key;
  848. public:
  849. map();
  850. map(const map<K,T> &);
  851. unsigned int size() const;
  852. bool empty() const;
  853. void clear();
  854. %extend {
  855. T __getitem__(K key) throw (std::out_of_range) {
  856. std::map<K,T >::iterator i = self->find(key);
  857. if (i != self->end())
  858. return i->second;
  859. else
  860. throw std::out_of_range("key not found");
  861. }
  862. void __setitem__(K key, T x) {
  863. (*self)[key] = x;
  864. }
  865. void __delitem__(K key) throw (std::out_of_range) {
  866. std::map<K,T >::iterator i = self->find(key);
  867. if (i != self->end())
  868. self->erase(i);
  869. else
  870. throw std::out_of_range("key not found");
  871. }
  872. bool has_key(K key) {
  873. std::map<K,T >::iterator i = self->find(key);
  874. return i != self->end();
  875. }
  876. Scheme_Object* keys() {
  877. Scheme_Object* result = scheme_null;
  878. for (std::map<K,T >::reverse_iterator i=self->rbegin();
  879. i!=self->rend(); ++i) {
  880. Scheme_Object* k = CONVERT_K_TO(i->first);
  881. result = scheme_make_pair(k,result);
  882. }
  883. return result;
  884. }
  885. }
  886. };
  887. %enddef
  888. specialize_std_map_on_key(bool,SCHEME_BOOLP,
  889. SCHEME_TRUEP,swig_make_boolean);
  890. specialize_std_map_on_key(int,SCHEME_INTP,
  891. SCHEME_INT_VAL,scheme_make_integer_value);
  892. specialize_std_map_on_key(short,SCHEME_INTP,
  893. SCHEME_INT_VAL,scheme_make_integer_value);
  894. specialize_std_map_on_key(long,SCHEME_INTP,
  895. SCHEME_INT_VAL,scheme_make_integer_value);
  896. specialize_std_map_on_key(unsigned int,SCHEME_INTP,
  897. SCHEME_INT_VAL,scheme_make_integer_value);
  898. specialize_std_map_on_key(unsigned short,SCHEME_INTP,
  899. SCHEME_INT_VAL,scheme_make_integer_value);
  900. specialize_std_map_on_key(unsigned long,SCHEME_INTP,
  901. SCHEME_INT_VAL,scheme_make_integer_value);
  902. specialize_std_map_on_key(double,SCHEME_REALP,
  903. scheme_real_to_double,scheme_make_double);
  904. specialize_std_map_on_key(float,SCHEME_REALP,
  905. scheme_real_to_double,scheme_make_double);
  906. specialize_std_map_on_key(std::string,SCHEME_STRINGP,
  907. swig_scm_to_string,swig_make_string);
  908. specialize_std_map_on_value(bool,SCHEME_BOOLP,
  909. SCHEME_TRUEP,swig_make_boolean);
  910. specialize_std_map_on_value(int,SCHEME_INTP,
  911. SCHEME_INT_VAL,scheme_make_integer_value);
  912. specialize_std_map_on_value(short,SCHEME_INTP,
  913. SCHEME_INT_VAL,scheme_make_integer_value);
  914. specialize_std_map_on_value(long,SCHEME_INTP,
  915. SCHEME_INT_VAL,scheme_make_integer_value);
  916. specialize_std_map_on_value(unsigned int,SCHEME_INTP,
  917. SCHEME_INT_VAL,scheme_make_integer_value);
  918. specialize_std_map_on_value(unsigned short,SCHEME_INTP,
  919. SCHEME_INT_VAL,scheme_make_integer_value);
  920. specialize_std_map_on_value(unsigned long,SCHEME_INTP,
  921. SCHEME_INT_VAL,scheme_make_integer_value);
  922. specialize_std_map_on_value(double,SCHEME_REALP,
  923. scheme_real_to_double,scheme_make_double);
  924. specialize_std_map_on_value(float,SCHEME_REALP,
  925. scheme_real_to_double,scheme_make_double);
  926. specialize_std_map_on_value(std::string,SCHEME_STRINGP,
  927. swig_scm_to_string,swig_make_string);
  928. specialize_std_map_on_both(bool,SCHEME_BOOLP,
  929. SCHEME_TRUEP,swig_make_boolean,
  930. bool,SCHEME_BOOLP,
  931. SCHEME_TRUEP,swig_make_boolean);
  932. specialize_std_map_on_both(bool,SCHEME_BOOLP,
  933. SCHEME_TRUEP,swig_make_boolean,
  934. int,SCHEME_INTP,
  935. SCHEME_INT_VAL,scheme_make_integer_value);
  936. specialize_std_map_on_both(bool,SCHEME_BOOLP,
  937. SCHEME_TRUEP,swig_make_boolean,
  938. short,SCHEME_INTP,
  939. SCHEME_INT_VAL,scheme_make_integer_value);
  940. specialize_std_map_on_both(bool,SCHEME_BOOLP,
  941. SCHEME_TRUEP,swig_make_boolean,
  942. long,SCHEME_INTP,
  943. SCHEME_INT_VAL,scheme_make_integer_value);
  944. specialize_std_map_on_both(bool,SCHEME_BOOLP,
  945. SCHEME_TRUEP,swig_make_boolean,
  946. unsigned int,SCHEME_INTP,
  947. SCHEME_INT_VAL,scheme_make_integer_value);
  948. specialize_std_map_on_both(bool,SCHEME_BOOLP,
  949. SCHEME_TRUEP,swig_make_boolean,
  950. unsigned short,SCHEME_INTP,
  951. SCHEME_INT_VAL,scheme_make_integer_value);
  952. specialize_std_map_on_both(bool,SCHEME_BOOLP,
  953. SCHEME_TRUEP,swig_make_boolean,
  954. unsigned long,SCHEME_INTP,
  955. SCHEME_INT_VAL,scheme_make_integer_value);
  956. specialize_std_map_on_both(bool,SCHEME_BOOLP,
  957. SCHEME_TRUEP,swig_make_boolean,
  958. double,SCHEME_REALP,
  959. scheme_real_to_double,scheme_make_double);
  960. specialize_std_map_on_both(bool,SCHEME_BOOLP,
  961. SCHEME_TRUEP,swig_make_boolean,
  962. float,SCHEME_REALP,
  963. scheme_real_to_double,scheme_make_double);
  964. specialize_std_map_on_both(bool,SCHEME_BOOLP,
  965. SCHEME_TRUEP,swig_make_boolean,
  966. std::string,SCHEME_STRINGP,
  967. swig_scm_to_string,swig_make_string);
  968. specialize_std_map_on_both(int,SCHEME_INTP,
  969. SCHEME_INT_VAL,scheme_make_integer_value,
  970. bool,SCHEME_BOOLP,
  971. SCHEME_TRUEP,swig_make_boolean);
  972. specialize_std_map_on_both(int,SCHEME_INTP,
  973. SCHEME_INT_VAL,scheme_make_integer_value,
  974. int,SCHEME_INTP,
  975. SCHEME_INT_VAL,scheme_make_integer_value);
  976. specialize_std_map_on_both(int,SCHEME_INTP,
  977. SCHEME_INT_VAL,scheme_make_integer_value,
  978. short,SCHEME_INTP,
  979. SCHEME_INT_VAL,scheme_make_integer_value);
  980. specialize_std_map_on_both(int,SCHEME_INTP,
  981. SCHEME_INT_VAL,scheme_make_integer_value,
  982. long,SCHEME_INTP,
  983. SCHEME_INT_VAL,scheme_make_integer_value);
  984. specialize_std_map_on_both(int,SCHEME_INTP,
  985. SCHEME_INT_VAL,scheme_make_integer_value,
  986. unsigned int,SCHEME_INTP,
  987. SCHEME_INT_VAL,scheme_make_integer_value);
  988. specialize_std_map_on_both(int,SCHEME_INTP,
  989. SCHEME_INT_VAL,scheme_make_integer_value,
  990. unsigned short,SCHEME_INTP,
  991. SCHEME_INT_VAL,scheme_make_integer_value);
  992. specialize_std_map_on_both(int,SCHEME_INTP,
  993. SCHEME_INT_VAL,scheme_make_integer_value,
  994. unsigned long,SCHEME_INTP,
  995. SCHEME_INT_VAL,scheme_make_integer_value);
  996. specialize_std_map_on_both(int,SCHEME_INTP,
  997. SCHEME_INT_VAL,scheme_make_integer_value,
  998. double,SCHEME_REALP,
  999. scheme_real_to_double,scheme_make_double);
  1000. specialize_std_map_on_both(int,SCHEME_INTP,
  1001. SCHEME_INT_VAL,scheme_make_integer_value,
  1002. float,SCHEME_REALP,
  1003. scheme_real_to_double,scheme_make_double);
  1004. specialize_std_map_on_both(int,SCHEME_INTP,
  1005. SCHEME_INT_VAL,scheme_make_integer_value,
  1006. std::string,SCHEME_STRINGP,
  1007. swig_scm_to_string,swig_make_string);
  1008. specialize_std_map_on_both(short,SCHEME_INTP,
  1009. SCHEME_INT_VAL,scheme_make_integer_value,
  1010. bool,SCHEME_BOOLP,
  1011. SCHEME_TRUEP,swig_make_boolean);
  1012. specialize_std_map_on_both(short,SCHEME_INTP,
  1013. SCHEME_INT_VAL,scheme_make_integer_value,
  1014. int,SCHEME_INTP,
  1015. SCHEME_INT_VAL,scheme_make_integer_value);
  1016. specialize_std_map_on_both(short,SCHEME_INTP,
  1017. SCHEME_INT_VAL,scheme_make_integer_value,
  1018. short,SCHEME_INTP,
  1019. SCHEME_INT_VAL,scheme_make_integer_value);
  1020. specialize_std_map_on_both(short,SCHEME_INTP,
  1021. SCHEME_INT_VAL,scheme_make_integer_value,
  1022. long,SCHEME_INTP,
  1023. SCHEME_INT_VAL,scheme_make_integer_value);
  1024. specialize_std_map_on_both(short,SCHEME_INTP,
  1025. SCHEME_INT_VAL,scheme_make_integer_value,
  1026. unsigned int,SCHEME_INTP,
  1027. SCHEME_INT_VAL,scheme_make_integer_value);
  1028. specialize_std_map_on_both(short,SCHEME_INTP,
  1029. SCHEME_INT_VAL,scheme_make_integer_value,
  1030. unsigned short,SCHEME_INTP,
  1031. SCHEME_INT_VAL,scheme_make_integer_value);
  1032. specialize_std_map_on_both(short,SCHEME_INTP,
  1033. SCHEME_INT_VAL,scheme_make_integer_value,
  1034. unsigned long,SCHEME_INTP,
  1035. SCHEME_INT_VAL,scheme_make_integer_value);
  1036. specialize_std_map_on_both(short,SCHEME_INTP,
  1037. SCHEME_INT_VAL,scheme_make_integer_value,
  1038. double,SCHEME_REALP,
  1039. scheme_real_to_double,scheme_make_double);
  1040. specialize_std_map_on_both(short,SCHEME_INTP,
  1041. SCHEME_INT_VAL,scheme_make_integer_value,
  1042. float,SCHEME_REALP,
  1043. scheme_real_to_double,scheme_make_double);
  1044. specialize_std_map_on_both(short,SCHEME_INTP,
  1045. SCHEME_INT_VAL,scheme_make_integer_value,
  1046. std::string,SCHEME_STRINGP,
  1047. swig_scm_to_string,swig_make_string);
  1048. specialize_std_map_on_both(long,SCHEME_INTP,
  1049. SCHEME_INT_VAL,scheme_make_integer_value,
  1050. bool,SCHEME_BOOLP,
  1051. SCHEME_TRUEP,swig_make_boolean);
  1052. specialize_std_map_on_both(long,SCHEME_INTP,
  1053. SCHEME_INT_VAL,scheme_make_integer_value,
  1054. int,SCHEME_INTP,
  1055. SCHEME_INT_VAL,scheme_make_integer_value);
  1056. specialize_std_map_on_both(long,SCHEME_INTP,
  1057. SCHEME_INT_VAL,scheme_make_integer_value,
  1058. short,SCHEME_INTP,
  1059. SCHEME_INT_VAL,scheme_make_integer_value);
  1060. specialize_std_map_on_both(long,SCHEME_INTP,
  1061. SCHEME_INT_VAL,scheme_make_integer_value,
  1062. long,SCHEME_INTP,
  1063. SCHEME_INT_VAL,scheme_make_integer_value);
  1064. specialize_std_map_on_both(long,SCHEME_INTP,
  1065. SCHEME_INT_VAL,scheme_make_integer_value,
  1066. unsigned int,SCHEME_INTP,
  1067. SCHEME_INT_VAL,scheme_make_integer_value);
  1068. specialize_std_map_on_both(long,SCHEME_INTP,
  1069. SCHEME_INT_VAL,scheme_make_integer_value,
  1070. unsigned short,SCHEME_INTP,
  1071. SCHEME_INT_VAL,scheme_make_integer_value);
  1072. specialize_std_map_on_both(long,SCHEME_INTP,
  1073. SCHEME_INT_VAL,scheme_make_integer_value,
  1074. unsigned long,SCHEME_INTP,
  1075. SCHEME_INT_VAL,scheme_make_integer_value);
  1076. specialize_std_map_on_both(long,SCHEME_INTP,
  1077. SCHEME_INT_VAL,scheme_make_integer_value,
  1078. double,SCHEME_REALP,
  1079. scheme_real_to_double,scheme_make_double);
  1080. specialize_std_map_on_both(long,SCHEME_INTP,
  1081. SCHEME_INT_VAL,scheme_make_integer_value,
  1082. float,SCHEME_REALP,
  1083. scheme_real_to_double,scheme_make_double);
  1084. specialize_std_map_on_both(long,SCHEME_INTP,
  1085. SCHEME_INT_VAL,scheme_make_integer_value,
  1086. std::string,SCHEME_STRINGP,
  1087. swig_scm_to_string,swig_make_string);
  1088. specialize_std_map_on_both(unsigned int,SCHEME_INTP,
  1089. SCHEME_INT_VAL,scheme_make_integer_value,
  1090. bool,SCHEME_BOOLP,
  1091. SCHEME_TRUEP,swig_make_boolean);
  1092. specialize_std_map_on_both(unsigned int,SCHEME_INTP,
  1093. SCHEME_INT_VAL,scheme_make_integer_value,
  1094. int,SCHEME_INTP,
  1095. SCHEME_INT_VAL,scheme_make_integer_value);
  1096. specialize_std_map_on_both(unsigned int,SCHEME_INTP,
  1097. SCHEME_INT_VAL,scheme_make_integer_value,
  1098. short,SCHEME_INTP,
  1099. SCHEME_INT_VAL,scheme_make_integer_value);
  1100. specialize_std_map_on_both(unsigned int,SCHEME_INTP,
  1101. SCHEME_INT_VAL,scheme_make_integer_value,
  1102. long,SCHEME_INTP,
  1103. SCHEME_INT_VAL,scheme_make_integer_value);
  1104. specialize_std_map_on_both(unsigned int,SCHEME_INTP,
  1105. SCHEME_INT_VAL,scheme_make_integer_value,
  1106. unsigned int,SCHEME_INTP,
  1107. SCHEME_INT_VAL,scheme_make_integer_value);
  1108. specialize_std_map_on_both(unsigned int,SCHEME_INTP,
  1109. SCHEME_INT_VAL,scheme_make_integer_value,
  1110. unsigned short,SCHEME_INTP,
  1111. SCHEME_INT_VAL,scheme_make_integer_value);
  1112. specialize_std_map_on_both(unsigned int,SCHEME_INTP,
  1113. SCHEME_INT_VAL,scheme_make_integer_value,
  1114. unsigned long,SCHEME_INTP,
  1115. SCHEME_INT_VAL,scheme_make_integer_value);
  1116. specialize_std_map_on_both(unsigned int,SCHEME_INTP,
  1117. SCHEME_INT_VAL,scheme_make_integer_value,
  1118. double,SCHEME_REALP,
  1119. scheme_real_to_double,scheme_make_double);
  1120. specialize_std_map_on_both(unsigned int,SCHEME_INTP,
  1121. SCHEME_INT_VAL,scheme_make_integer_value,
  1122. float,SCHEME_REALP,
  1123. scheme_real_to_double,scheme_make_double);
  1124. specialize_std_map_on_both(unsigned int,SCHEME_INTP,
  1125. SCHEME_INT_VAL,scheme_make_integer_value,
  1126. std::string,SCHEME_STRINGP,
  1127. swig_scm_to_string,swig_make_string);
  1128. specialize_std_map_on_both(unsigned short,SCHEME_INTP,
  1129. SCHEME_INT_VAL,scheme_make_integer_value,
  1130. bool,SCHEME_BOOLP,
  1131. SCHEME_TRUEP,swig_make_boolean);
  1132. specialize_std_map_on_both(unsigned short,SCHEME_INTP,
  1133. SCHEME_INT_VAL,scheme_make_integer_value,
  1134. int,SCHEME_INTP,
  1135. SCHEME_INT_VAL,scheme_make_integer_value);
  1136. specialize_std_map_on_both(unsigned short,SCHEME_INTP,
  1137. SCHEME_INT_VAL,scheme_make_integer_value,
  1138. short,SCHEME_INTP,
  1139. SCHEME_INT_VAL,scheme_make_integer_value);
  1140. specialize_std_map_on_both(unsigned short,SCHEME_INTP,
  1141. SCHEME_INT_VAL,scheme_make_integer_value,
  1142. long,SCHEME_INTP,
  1143. SCHEME_INT_VAL,scheme_make_integer_value);
  1144. specialize_std_map_on_both(unsigned short,SCHEME_INTP,
  1145. SCHEME_INT_VAL,scheme_make_integer_value,
  1146. unsigned int,SCHEME_INTP,
  1147. SCHEME_INT_VAL,scheme_make_integer_value);
  1148. specialize_std_map_on_both(unsigned short,SCHEME_INTP,
  1149. SCHEME_INT_VAL,scheme_make_integer_value,
  1150. unsigned short,SCHEME_INTP,
  1151. SCHEME_INT_VAL,scheme_make_integer_value);
  1152. specialize_std_map_on_both(unsigned short,SCHEME_INTP,
  1153. SCHEME_INT_VAL,scheme_make_integer_value,
  1154. unsigned long,SCHEME_INTP,
  1155. SCHEME_INT_VAL,scheme_make_integer_value);
  1156. specialize_std_map_on_both(unsigned short,SCHEME_INTP,
  1157. SCHEME_INT_VAL,scheme_make_integer_value,
  1158. double,SCHEME_REALP,
  1159. scheme_real_to_double,scheme_make_double);
  1160. specialize_std_map_on_both(unsigned short,SCHEME_INTP,
  1161. SCHEME_INT_VAL,scheme_make_integer_value,
  1162. float,SCHEME_REALP,
  1163. scheme_real_to_double,scheme_make_double);
  1164. specialize_std_map_on_both(unsigned short,SCHEME_INTP,
  1165. SCHEME_INT_VAL,scheme_make_integer_value,
  1166. std::string,SCHEME_STRINGP,
  1167. swig_scm_to_string,swig_make_string);
  1168. specialize_std_map_on_both(unsigned long,SCHEME_INTP,
  1169. SCHEME_INT_VAL,scheme_make_integer_value,
  1170. bool,SCHEME_BOOLP,
  1171. SCHEME_TRUEP,swig_make_boolean);
  1172. specialize_std_map_on_both(unsigned long,SCHEME_INTP,
  1173. SCHEME_INT_VAL,scheme_make_integer_value,
  1174. int,SCHEME_INTP,
  1175. SCHEME_INT_VAL,scheme_make_integer_value);
  1176. specialize_std_map_on_both(unsigned long,SCHEME_INTP,
  1177. SCHEME_INT_VAL,scheme_make_integer_value,
  1178. short,SCHEME_INTP,
  1179. SCHEME_INT_VAL,scheme_make_integer_value);
  1180. specialize_std_map_on_both(unsigned long,SCHEME_INTP,
  1181. SCHEME_INT_VAL,scheme_make_integer_value,
  1182. long,SCHEME_INTP,
  1183. SCHEME_INT_VAL,scheme_make_integer_value);
  1184. specialize_std_map_on_both(unsigned long,SCHEME_INTP,
  1185. SCHEME_INT_VAL,scheme_make_integer_value,
  1186. unsigned int,SCHEME_INTP,
  1187. SCHEME_INT_VAL,scheme_make_integer_value);
  1188. specialize_std_map_on_both(unsigned long,SCHEME_INTP,
  1189. SCHEME_INT_VAL,scheme_make_integer_value,
  1190. unsigned short,SCHEME_INTP,
  1191. SCHEME_INT_VAL,scheme_make_integer_value);
  1192. specialize_std_map_on_both(unsigned long,SCHEME_INTP,
  1193. SCHEME_INT_VAL,scheme_make_integer_value,
  1194. unsigned long,SCHEME_INTP,
  1195. SCHEME_INT_VAL,scheme_make_integer_value);
  1196. specialize_std_map_on_both(unsigned long,SCHEME_INTP,
  1197. SCHEME_INT_VAL,scheme_make_integer_value,
  1198. double,SCHEME_REALP,
  1199. scheme_real_to_double,scheme_make_double);
  1200. specialize_std_map_on_both(unsigned long,SCHEME_INTP,
  1201. SCHEME_INT_VAL,scheme_make_integer_value,
  1202. float,SCHEME_REALP,
  1203. scheme_real_to_double,scheme_make_double);
  1204. specialize_std_map_on_both(unsigned long,SCHEME_INTP,
  1205. SCHEME_INT_VAL,scheme_make_integer_value,
  1206. std::string,SCHEME_STRINGP,
  1207. swig_scm_to_string,swig_make_string);
  1208. specialize_std_map_on_both(double,SCHEME_REALP,
  1209. scheme_real_to_double,scheme_make_double,
  1210. bool,SCHEME_BOOLP,
  1211. SCHEME_TRUEP,swig_make_boolean);
  1212. specialize_std_map_on_both(double,SCHEME_REALP,
  1213. scheme_real_to_double,scheme_make_double,
  1214. int,SCHEME_INTP,
  1215. SCHEME_INT_VAL,scheme_make_integer_value);
  1216. specialize_std_map_on_both(double,SCHEME_REALP,
  1217. scheme_real_to_double,scheme_make_double,
  1218. short,SCHEME_INTP,
  1219. SCHEME_INT_VAL,scheme_make_integer_value);
  1220. specialize_std_map_on_both(double,SCHEME_REALP,
  1221. scheme_real_to_double,scheme_make_double,
  1222. long,SCHEME_INTP,
  1223. SCHEME_INT_VAL,scheme_make_integer_value);
  1224. specialize_std_map_on_both(double,SCHEME_REALP,
  1225. scheme_real_to_double,scheme_make_double,
  1226. unsigned int,SCHEME_INTP,
  1227. SCHEME_INT_VAL,scheme_make_integer_value);
  1228. specialize_std_map_on_both(double,SCHEME_REALP,
  1229. scheme_real_to_double,scheme_make_double,
  1230. unsigned short,SCHEME_INTP,
  1231. SCHEME_INT_VAL,scheme_make_integer_value);
  1232. specialize_std_map_on_both(double,SCHEME_REALP,
  1233. scheme_real_to_double,scheme_make_double,
  1234. unsigned long,SCHEME_INTP,
  1235. SCHEME_INT_VAL,scheme_make_integer_value);
  1236. specialize_std_map_on_both(double,SCHEME_REALP,
  1237. scheme_real_to_double,scheme_make_double,
  1238. double,SCHEME_REALP,
  1239. scheme_real_to_double,scheme_make_double);
  1240. specialize_std_map_on_both(double,SCHEME_REALP,
  1241. scheme_real_to_double,scheme_make_double,
  1242. float,SCHEME_REALP,
  1243. scheme_real_to_double,scheme_make_double);
  1244. specialize_std_map_on_both(double,SCHEME_REALP,
  1245. scheme_real_to_double,scheme_make_double,
  1246. std::string,SCHEME_STRINGP,
  1247. swig_scm_to_string,swig_make_string);
  1248. specialize_std_map_on_both(float,SCHEME_REALP,
  1249. scheme_real_to_double,scheme_make_double,
  1250. bool,SCHEME_BOOLP,
  1251. SCHEME_TRUEP,swig_make_boolean);
  1252. specialize_std_map_on_both(float,SCHEME_REALP,
  1253. scheme_real_to_double,scheme_make_double,
  1254. int,SCHEME_INTP,
  1255. SCHEME_INT_VAL,scheme_make_integer_value);
  1256. specialize_std_map_on_both(float,SCHEME_REALP,
  1257. scheme_real_to_double,scheme_make_double,
  1258. short,SCHEME_INTP,
  1259. SCHEME_INT_VAL,scheme_make_integer_value);
  1260. specialize_std_map_on_both(float,SCHEME_REALP,
  1261. scheme_real_to_double,scheme_make_double,
  1262. long,SCHEME_INTP,
  1263. SCHEME_INT_VAL,scheme_make_integer_value);
  1264. specialize_std_map_on_both(float,SCHEME_REALP,
  1265. scheme_real_to_double,scheme_make_double,
  1266. unsigned int,SCHEME_INTP,
  1267. SCHEME_INT_VAL,scheme_make_integer_value);
  1268. specialize_std_map_on_both(float,SCHEME_REALP,
  1269. scheme_real_to_double,scheme_make_double,
  1270. unsigned short,SCHEME_INTP,
  1271. SCHEME_INT_VAL,scheme_make_integer_value);
  1272. specialize_std_map_on_both(float,SCHEME_REALP,
  1273. scheme_real_to_double,scheme_make_double,
  1274. unsigned long,SCHEME_INTP,
  1275. SCHEME_INT_VAL,scheme_make_integer_value);
  1276. specialize_std_map_on_both(float,SCHEME_REALP,
  1277. scheme_real_to_double,scheme_make_double,
  1278. double,SCHEME_REALP,
  1279. scheme_real_to_double,scheme_make_double);
  1280. specialize_std_map_on_both(float,SCHEME_REALP,
  1281. scheme_real_to_double,scheme_make_double,
  1282. float,SCHEME_REALP,
  1283. scheme_real_to_double,scheme_make_double);
  1284. specialize_std_map_on_both(float,SCHEME_REALP,
  1285. scheme_real_to_double,scheme_make_double,
  1286. std::string,SCHEME_STRINGP,
  1287. swig_scm_to_string,swig_make_string);
  1288. specialize_std_map_on_both(std::string,SCHEME_STRINGP,
  1289. swig_scm_to_string,swig_make_string,
  1290. bool,SCHEME_BOOLP,
  1291. SCHEME_TRUEP,swig_make_boolean);
  1292. specialize_std_map_on_both(std::string,SCHEME_STRINGP,
  1293. swig_scm_to_string,swig_make_string,
  1294. int,SCHEME_INTP,
  1295. SCHEME_INT_VAL,scheme_make_integer_value);
  1296. specialize_std_map_on_both(std::string,SCHEME_STRINGP,
  1297. swig_scm_to_string,swig_make_string,
  1298. short,SCHEME_INTP,
  1299. SCHEME_INT_VAL,scheme_make_integer_value);
  1300. specialize_std_map_on_both(std::string,SCHEME_STRINGP,
  1301. swig_scm_to_string,swig_make_string,
  1302. long,SCHEME_INTP,
  1303. SCHEME_INT_VAL,scheme_make_integer_value);
  1304. specialize_std_map_on_both(std::string,SCHEME_STRINGP,
  1305. swig_scm_to_string,swig_make_string,
  1306. unsigned int,SCHEME_INTP,
  1307. SCHEME_INT_VAL,scheme_make_integer_value);
  1308. specialize_std_map_on_both(std::string,SCHEME_STRINGP,
  1309. swig_scm_to_string,swig_make_string,
  1310. unsigned short,SCHEME_INTP,
  1311. SCHEME_INT_VAL,scheme_make_integer_value);
  1312. specialize_std_map_on_both(std::string,SCHEME_STRINGP,
  1313. swig_scm_to_string,swig_make_string,
  1314. unsigned long,SCHEME_INTP,
  1315. SCHEME_INT_VAL,scheme_make_integer_value);
  1316. specialize_std_map_on_both(std::string,SCHEME_STRINGP,
  1317. swig_scm_to_string,swig_make_string,
  1318. double,SCHEME_REALP,
  1319. scheme_real_to_double,scheme_make_double);
  1320. specialize_std_map_on_both(std::string,SCHEME_STRINGP,
  1321. swig_scm_to_string,swig_make_string,
  1322. float,SCHEME_REALP,
  1323. scheme_real_to_double,scheme_make_double);
  1324. specialize_std_map_on_both(std::string,SCHEME_STRINGP,
  1325. swig_scm_to_string,swig_make_string,
  1326. std::string,SCHEME_STRINGP,
  1327. swig_scm_to_string,swig_make_string);
  1328. }