1 
2 #pragma once
3 
4 #include "Props.hh"
5 
6 namespace cadabra {
7 
8 	class Indices : public list_property {
9 		public:
10 			Indices(); //const std::string& parent="");
11 			virtual bool parse(Kernel&, std::shared_ptr<Ex>, keyval_t&) override;
12 			virtual std::string name() const override;
unnamed_argument() const13 			virtual std::string unnamed_argument() const override
14 				{
15 				return "name";
16 				};
17 			virtual match_t equals(const property *) const override;
18 
19 			//		virtual void display(std::ostream&) const override;
20 			virtual void latex(std::ostream&) const override;
21 
22 			std::string set_name, parent_name;
23 			enum position_t { free=0, fixed=1, independent=2 } position_type;
24 
25 			// List of possible values that indices of this type can take.
26 			std::vector<Ex> values;
27 
28 		private:
29 			/// Given the right-hand side of a 'values={...}' node, generate
30 			/// a list of all index values in index_values.
31 
32 			void collect_index_values(Ex::iterator ind_values);
33 		};
34 
35 	}
36