Skip to content

aug_seq #4

@imoldfella

Description

@imoldfella

An augmented sequence might be useful to add:

	template <class entry>
	struct aug_seq_full_entry : entry {
		using val_t = bool; // not used
		using key_t = typename entry::key_t;
		using aug_t = typename entry::aug_t;
		using entry_t = key_t;
		static bool comp(const key_t& a, const key_t& b) { return true; }
		static inline key_t get_key(const entry_t& e) { return e; }
		static inline val_t get_val(const entry_t& e) { return 0; }
		static inline void set_val(entry_t& e, const val_t& v) {}
	};

	template<class _Entry, class Balance=weight_balanced_tree>
	using aug_seq =
		aug_map_< aug_set_full_entry<_Entry>,
			typename Balance::template
			balance<aug_node<typename Balance::data, aug_set_full_entry<_Entry>>>>;

	void test_aug_seq()
	{
		struct piece_entry 
		{
			using key_t = string_view;
			using aug_t = size_t;
			static aug_t get_empty() { return 0; }
			static aug_t from_entry(key_t k) { return k.size(); }
			static aug_t combine(aug_t a, aug_t b) { return a + b; }
		};
		using piece_seq = aug_seq<piece_entry>;

		using strv = piece_seq; //pam_seq<string_view>;

		strv x1;
		strv v1 = strv(string_view("hello, world"));
		strv v2 = strv(string_view("; wassup"));
		strv v3 = strv::join2(v1, v2);

		strv::foreach_seq(v3, [&](auto x) {
			cout << "- " << x << "\n";
			});
		cout << "\n total=" << v3.aug_val() << "\n";
	}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions