OpenCog Framework  Branch: master, revision 6f0b7fc776b08468cf1b74aa9db028f387b4f0c0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
SchemeSmobAV.cc
Go to the documentation of this file.
1 /*
2  * SchemeSmobAV.c
3  *
4  * Scheme small objects (SMOBS) for attention values.
5  *
6  * Copyright (c) 2008,2009 Linas Vepstas <linas@linas.org>
7  */
8 
9 #ifdef HAVE_GUILE
10 
11 #include <cstddef>
12 #include <libguile.h>
13 
16 
17 using namespace opencog;
18 
19 /* ============================================================== */
26 {
27  while (scm_is_pair(slist))
28  {
29  SCM sval = SCM_CAR(slist);
30  if (SCM_SMOB_PREDICATE(SchemeSmob::cog_misc_tag, sval))
31  {
32  scm_t_bits misctype = SCM_SMOB_FLAGS(sval);
33  switch (misctype)
34  {
35  case COG_AV:
36  return (AttentionValue *) SCM_SMOB_DATA(sval);
37  default:
38  break;
39  }
40  }
41 
42  slist = SCM_CDR(slist);
43  }
44 
45  return NULL;
46 }
47 
48 /* ============================================================== */
49 
51 {
52 #define BUFLEN 120
53  char buff[BUFLEN];
54 
55  snprintf(buff, BUFLEN, "(av %d %d %u)",
56  av->getSTI(), av->getLTI(), av->getVLTI());
57 
58  return buff;
59 }
60 
61 /* ============================================================== */
66 {
67  scm_gc_register_collectable_memory (av,
68  sizeof(*av), "opencog av");
69 
70  SCM smob;
71  SCM_NEWSMOB (smob, cog_misc_tag, av);
72  SCM_SET_SMOB_FLAGS(smob, COG_AV);
73  return smob;
74 }
75 
76 /* ============================================================== */
80 SCM SchemeSmob::ss_new_av (SCM ssti, SCM slti, SCM svlti)
81 {
82  if (!scm_is_integer(ssti)) {
83  scm_wrong_type_arg_msg("cog-new-av", 1, ssti, "signed short");
84  }
85  if (!scm_is_integer(slti)) {
86  scm_wrong_type_arg_msg("cog-new-av", 2, slti, "signed short");
87  }
88  if (!scm_is_integer(svlti)) {
89  scm_wrong_type_arg_msg("cog-new-av", 3, svlti, "unsigned short");
90  }
91  AttentionValue::sti_t sti = scm_to_short(ssti);
92  AttentionValue::lti_t lti = scm_to_short(slti);
93  AttentionValue::vlti_t vlti = scm_to_ushort(svlti);
94  AttentionValue *av = new AttentionValue(sti, lti, vlti);
95  return take_av(av);
96 }
97 
98 /* ============================================================== */
103 {
104  if (SCM_SMOB_PREDICATE(SchemeSmob::cog_misc_tag, s))
105  {
106  scm_t_bits misctype = SCM_SMOB_FLAGS(s);
107  switch (misctype)
108  {
109  case COG_AV:
110  return SCM_BOOL_T;
111 
112  default:
113  return SCM_BOOL_F;
114  }
115  }
116  return SCM_BOOL_F;
117 }
118 
119 /* ============================================================== */
120 
121 AttentionValue * SchemeSmob::verify_av(SCM sav, const char *subrname, int pos)
122 {
123  if (!SCM_SMOB_PREDICATE(SchemeSmob::cog_misc_tag, sav))
124  scm_wrong_type_arg_msg(subrname, pos, sav, "opencog attention value");
125 
126  scm_t_bits misctype = SCM_SMOB_FLAGS(sav);
127  if (COG_AV != misctype)
128  scm_wrong_type_arg_msg(subrname, pos, sav, "opencog attention value");
129 
130  AttentionValue *av = (AttentionValue *) SCM_SMOB_DATA(sav);
131  return av;
132 }
133 
138 {
139  AttentionValue *av = verify_av(s, "cog-av->alist");
140 
141  SCM sti = scm_from_short(av->getSTI());
142  SCM lti = scm_from_short(av->getLTI());
143  SCM vlti = scm_from_ushort(av->getVLTI());
144 
145  SCM ssti = scm_from_utf8_symbol("sti");
146  SCM slti = scm_from_utf8_symbol("lti");
147  SCM svlti = scm_from_utf8_symbol("vlti");
148  scm_remember_upto_here_1(s);
149 
150  SCM rc = SCM_EOL;
151  rc = scm_acons(svlti, vlti, rc);
152  rc = scm_acons(slti, lti, rc);
153  rc = scm_acons(ssti, sti, rc);
154  return rc;
155 }
156 
157 #endif /* HAVE_GUILE */
158 /* ===================== END OF FILE ============================ */
static SCM ss_av_get_value(SCM)
static std::string av_to_string(const AttentionValue *)
Definition: SchemeSmobAV.cc:50
static AttentionValue * verify_av(SCM, const char *, int pos=1)
static SCM take_av(AttentionValue *)
Definition: SchemeSmobAV.cc:65
static SCM ss_new_av(SCM, SCM, SCM)
Definition: SchemeSmobAV.cc:80
short vlti_t
very long-term importance type
static AttentionValue * get_av_from_list(SCM)
Definition: SchemeSmobAV.cc:25
static scm_t_bits cog_misc_tag
Definition: SchemeSmob.h:59
#define BUFLEN
short lti_t
long-term importance type
lti_t getLTI() const
return LTI property value
short sti_t
short-term importance type
static SCM ss_av_p(SCM)
vlti_t getVLTI() const
return VLTI property value
sti_t getSTI() const
return STI property value