Example #1
0
ScAddr ScAgentAction::getParam(ScAddr const & cmdAddr, ScAddr const & relationAddr, sc_type paramType)
{
	ScIterator5Ptr iter = mMemoryCtx.iterator5(cmdAddr,
		SC_TYPE(sc_type_arc_pos_const_perm),
		SC_TYPE(paramType),
		SC_TYPE(sc_type_arc_pos_const_perm),
		relationAddr);

	if (!iter->next())
		return ScAddr();

	return iter->value(2);
}
Example #2
0
		void setMass(ScMemoryContext & ctx, ScAddr const & objAddr, ScAddr const & valueAddr)
		{
			ScAddr massAddr;

			ScIterator5Ptr itMass = ctx.iterator5(objAddr,
				SC_TYPE(sc_type_arc_common | sc_type_const),
				SC_TYPE(sc_type_const | sc_type_node | sc_type_node_abstract),
				SC_TYPE(sc_type_arc_pos_const_perm),
				Keynodes::nrel_mass);

			/// TODO: check if there is a more than one result
			if (itMass->next())
			{
				massAddr = itMass->value(2);
			}
			else
			{
				massAddr = ctx.createNode(sc_type_const | sc_type_node_abstract);
				assert(massAddr.isValid());
				ScAddr arcCommon = ctx.createArc(sc_type_const | sc_type_arc_common, objAddr, massAddr);
				assert(arcCommon.isValid());
                ScAddr arc = ctx.createArc(sc_type_arc_pos_const_perm, Keynodes::nrel_mass, arcCommon);
				assert(arc.isValid());
			}

			ScIterator5Ptr itValue = ctx.iterator5(massAddr,
				SC_TYPE(sc_type_arc_pos_const_perm),
				SC_TYPE(sc_type_link),
				SC_TYPE(sc_type_arc_pos_const_perm),
				Keynodes::rrel_gram);

			if (itValue->next())
			{
                ScAddr linkAddr = itValue->value(2);
                ScStream stream;
				bool res = ctx.getLinkContent(valueAddr, stream);
				assert(res);
				res = ctx.setLinkContent(linkAddr, stream);
				assert(res);
			}
			else
			{
                ScAddr arc = ctx.createArc(sc_type_arc_pos_const_perm, massAddr, valueAddr);
				assert(arc.isValid());
				arc = ctx.createArc(sc_type_arc_pos_const_perm, Keynodes::rrel_gram, arc);
				assert(arc.isValid());
			}

		}