5#include "acme/prototype/collection/map.h"
6#include "acme/prototype/collection/integer_map.h"
9template <
class T,
class T_to_T = map_base < T, T > >
11 virtual public ::matter
21 bool has_a(T a)
const;
22 bool has_b(T b)
const;
32 T array_translate_a(T aNew, T aOld);
34 T translate_a(T a1, T a2);
35 T translate_b(T b1, T b2);
42 void __swap(T a1, T a2);
44 T operator [](T a)
const
54 void set_empty_a(T iEmpty);
55 void set_empty_b(T iEmpty);
61 T add_b_in_first_free_a(T b);
62 T add_b_in_first_free_a_mod_w(T b, T w, T mod);
66 void copy_data(
const biunique & ia);
71 biunique & operator = (
const biunique & ia);
73 void biunivoca(
bool b =
true);
86template <
class T,
class T_to_T >
97template <
class T,
class T_to_T >
98void biunique < T, T_to_T > ::biunivoca(
bool b)
103template <
class T,
class T_to_T >
104T biunique < T, T_to_T > ::get_a (T b)
const
107 return m_ba.defer_get(b, m_iEmptyA);
112template <
class T,
class T_to_T >
113T biunique < T, T_to_T > ::get_b (T a)
const
116 return m_ab.defer_get(a, m_iEmptyB);
120template <
class T,
class T_to_T >
121T biunique < T, T_to_T > ::erase_a(T a)
133 m_iMaxA = calc_max_a();
135 m_iMaxB = calc_max_b();
146template <
class T,
class T_to_T >
147T biunique < T, T_to_T > ::array_translate_a(T aNew, T aOld)
150 if (aOld < 0 || aNew < 0)
157 T bParam = get_b(aOld);
159 if (bParam == m_iEmptyB)
177 m_iMaxA = calc_max_a();
179 m_iMaxB = calc_max_b();
246 m_ba.set_at(b, a + 1);
248 m_ab.set_at(a + 1, b);
259 m_ba.set_at(bParam, aNew);
261 m_ab.set_at(aNew, bParam);
263 m_iMaxA = calc_max_a();
265 m_iMaxB = calc_max_b();
272template <
class T,
class T_to_T >
273T biunique < T, T_to_T > ::erase_b(T b)
285 m_iMaxA = calc_max_a();
287 m_iMaxB = calc_max_b();
298template <
class T,
class T_to_T >
299T biunique < T, T_to_T > ::translate_a(T a1, T a2)
311template <
class T,
class T_to_T >
312T biunique < T, T_to_T > ::translate_b(T b1, T b2)
324template <
class T,
class T_to_T >
325void biunique < T, T_to_T > ::set(T a, T b)
351 m_iMaxA = calc_max_a();
353 m_iMaxB = calc_max_b();
358template <
class T,
class T_to_T >
359T biunique < T, T_to_T > ::get_max_a()
const
367template <
class T,
class T_to_T >
368T biunique < T, T_to_T > ::get_max_b()
const
376template <
class T,
class T_to_T >
377void biunique < T, T_to_T > ::erase_all()
391template <
class T,
class T_to_T >
392void biunique < T, T_to_T > ::set_empty_a(T iEmpty)
400template <
class T,
class T_to_T >
401void biunique < T, T_to_T > ::set_empty_b(T iEmpty)
409template <
class T,
class T_to_T >
425template <
class T,
class T_to_T >
426T biunique < T, T_to_T > ::add(T b)
429 T a = get_max_a() + 1;
438template <
class T,
class T_to_T >
439T biunique < T, T_to_T > ::add_b_in_first_free_a(T b)
451template <
class T,
class T_to_T >
452T biunique < T, T_to_T > ::add_b_in_first_free_a_mod_w(T b, T w, T mod)
458 return add_b_in_first_free_a(b);
465 return add_b_in_first_free_a(b);
469 T ca = get_max_a() + 1;
473 for(a = 0; a < ca ; a++)
479 a = ((a / mod) + 1) * mod;
483 if(get_b(a) == m_iEmptyB)
501template <
class T,
class T_to_T >
502T biunique < T, T_to_T > ::add_unique(T b)
512 auto a = get_max_a() + 1;
521template <
class T,
class T_to_T >
522T biunique < T, T_to_T > ::get_size()
const
525 return get_max_a() + 1;
530template <
class T,
class T_to_T >
531void biunique < T, T_to_T > ::__swap(T a1, T a2)
547template <
class T,
class T_to_T >
548bool biunique < T, T_to_T > ::has_a(T a)
const
556template <
class T,
class T_to_T >
557bool biunique < T, T_to_T > ::has_b(T b)
const
565template <
class T,
class T_to_T >
566T biunique < T, T_to_T > ::get_free_a()
const
569 for(T a = 0; a <= m_iMaxA; a++)
586template <
class T,
class T_to_T >
587T biunique < T, T_to_T > ::get_free_b()
const
590 for(T b = 0; b <= m_iMaxB; b++)
607template <
class T,
class T_to_T >
608biunique < T, T_to_T > & biunique < T, T_to_T > ::operator = (
const biunique & ia)
614 m_bBiunivoca = ia.m_bBiunivoca;
616 m_iMaxA = ia.m_iMaxA;
618 m_iMaxB = ia.m_iMaxB;
620 m_iEmptyA = ia.m_iEmptyA;
622 m_iEmptyB = ia.m_iEmptyB;
747template <
class T,
class T_to_T >
748T biunique < T, T_to_T > ::calc_max_a()
751 auto passoc = m_ab.begin();
755 while(passoc.is_set())
758 if (passoc->element1() > iMaxA)
761 iMaxA = passoc->element1();
774template <
class T,
class T_to_T >
775T biunique < T, T_to_T > ::calc_max_b()
778 auto passoc = m_ba.begin();
782 while(passoc.is_set())
785 if (passoc->element1() > iMaxB)
788 iMaxB = passoc->element1();
801class CLASS_DECL_ACME index_biunique :
802 public biunique < ::collection::index >
808 ~index_biunique()
override {}
814class CLASS_DECL_ACME i32_biunique :
815 public biunique < ::i32, i32_to_int >
821 virtual ~i32_biunique() {}
827CLASS_DECL_ACME ::collection::index array_translate_a(
index_biunique & ia, ::collection::index aNew, ::collection::index aOld);
Definition integer_biunique.h:12
Definition _template_forward_declaration.h:297
Definition integer_biunique.h:803
Definition std_iterator.h:49