本文整理汇总了C++中LOCAL_COPY函数的典型用法代码示例。如果您正苦于以下问题:C++ LOCAL_COPY函数的具体用法?C++ LOCAL_COPY怎么用?C++ LOCAL_COPY使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了LOCAL_COPY函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: throw
//Android
void FSinOscUGenInternal::processBlock(bool& shouldDelete, const unsigned int blockID, const int channel) throw()
{
float* outputSamples = uGenOutput.getSampleData();
float newFreq = *(inputs[Freq].processBlock(shouldDelete, blockID, channel));
double y0;
LOCAL_DECLARE(double, b1);
LOCAL_DECLARE(double, y1);
LOCAL_DECLARE(double, y2);
if(newFreq != currentFreq)
{
currentFreq = newFreq;
double initialPhase;
if((1.0-abs(y1)) < 0.00001)
{
initialPhase = y1 > 0.0 ? piOverTwo : -piOverTwo;
}
else
{
initialPhase = asin(y1);
// based on the trajectory predict which solution of asin(y1) is correct..
if(y2 >= y1)
{
double piVersion = y1 > 0.0 ? pi : -pi;
initialPhase = piVersion - initialPhase;
}
}
double w = currentFreq * twoPi * UGen::getReciprocalSampleRate();
b1 = zap(2. * cos(w));
y1 = zap(sin(initialPhase));
y2 = zap(sin(initialPhase-w));
}
int numSamplesToProcess = uGenOutput.getBlockSize();
for(int i = 0; i < numSamplesToProcess; ++i)
{
y0 = b1 * y1 - y2;
outputSamples[i] = y0;// = b1 * y1 - y2;
y2 = y1;
y1 = y0;
}
y1 = zap(y1);
y2 = zap(y2);
LOCAL_COPY(b1);
LOCAL_COPY(y1);
LOCAL_COPY(y2);
}
示例2: mr_capab
/*
* mr_capab - CAPAB message handler
* parv[1] = space-separated list of capabilities
*
*/
static int
mr_capab(struct Client *client_p, struct Client *source_p, int parc, const char *parv[])
{
struct Capability *cap;
int i;
char *p;
char *s;
/* ummm, this shouldn't happen. Could argue this should be logged etc. */
if (client_p->localClient == NULL)
return 0;
if (client_p->user)
return 0;
/* CAP_TS6 is set in PASS, so is valid.. */
if ((client_p->localClient->caps & ~CAP_TS6) != 0) {
exit_client(client_p, client_p, client_p, "CAPAB received twice");
return 0;
} else
client_p->localClient->caps |= CAP_CAP;
rb_free(client_p->localClient->fullcaps);
client_p->localClient->fullcaps = rb_strdup(parv[1]);
for (i = 1; i < parc; i++) {
char *t = LOCAL_COPY(parv[i]);
for (s = rb_strtok_r(t, " ", &p); s; s = rb_strtok_r(NULL, " ", &p)) {
for (cap = captab; cap->name; cap++) {
if (!irccmp(cap->name, s)) {
client_p->localClient->caps |= cap->cap;
break;
}
}
}
}
return 0;
}
示例3: me_gcap
static int
me_gcap(struct Client *client_p, struct Client *source_p,
int parc, const char *parv[])
{
struct Capability *cap;
char *t = LOCAL_COPY(parv[1]);
char *s;
char *p;
if (!IsServer(source_p))
return 0;
/* already had GCAPAB?! */
if (!EmptyString(source_p->serv->fullcaps)) {
source_p->serv->caps = 0;
rb_free(source_p->serv->fullcaps);
}
source_p->serv->fullcaps = rb_strdup(parv[1]);
for (s = rb_strtok_r(t, " ", &p); s; s = rb_strtok_r(NULL, " ", &p)) {
for (cap = captab; cap->name; cap++) {
if (!irccmp(cap->name, s)) {
source_p->serv->caps |= cap->cap;
break;
}
}
}
return 0;
}
示例4: create_timer_ref
/*
* create_timer_ref: returns the lowest unused reference number for a timer
* All refnums that are not already in use are valid.
*
* The user is allowed to use any string as a refnum, we dont really care.
* Automatically assigned refnums (when the user doesnt specify one) will
* always be one more than the highest pending refnum.
*
* "refnum_gets" must be REFNUM_MAX + 1 bytes by definition of API.
*/
static int create_timer_ref (const char *refnum_wanted, char *refnum_gets)
{
Timer *tmp;
int refnum = 0;
char *refnum_want;
/* Max of 10 characters. */
refnum_want = LOCAL_COPY(refnum_wanted);
if (strlen(refnum_want) > REFNUM_MAX)
refnum_want[REFNUM_MAX] = 0;
/* If the user doesnt care */
if (*refnum_want == 0)
{
/* Find the lowest refnum available */
for (tmp = PendingTimers; tmp; tmp = tmp->next)
{
if (refnum < my_atol(tmp->ref))
refnum = my_atol(tmp->ref);
}
strlcpy(refnum_gets, ltoa(refnum+1), REFNUM_MAX + 1);
}
else
{
/* See if the refnum is available */
if (get_timer(refnum_want))
return -1; /* Already in use */
strlcpy(refnum_gets, refnum_want, REFNUM_MAX + 1);
}
return 0;
}
示例5: me_gcap
static int
me_gcap(struct MsgBuf *msgbuf_p, struct Client *client_p, struct Client *source_p,
int parc, const char *parv[])
{
char *t = LOCAL_COPY(parv[1]);
char *s;
char *p;
if(!IsServer(source_p))
return 0;
/* already had GCAPAB?! */
if(!EmptyString(source_p->serv->fullcaps))
{
source_p->serv->caps = 0;
rb_free(source_p->serv->fullcaps);
}
source_p->serv->fullcaps = rb_strdup(parv[1]);
for (s = rb_strtok_r(t, " ", &p); s; s = rb_strtok_r(NULL, " ", &p))
source_p->serv->caps |= capability_get(serv_capindex, s);
return 0;
}
示例6: do_notify
/*
* do_notify: This simply goes through the notify list, sending out a WHOIS
* for each person on it. This uses the fancy whois stuff in whois.c to
* figure things out.
*/
void do_notify(void)
{
int old_from_server = from_server;
int servnum;
static time_t last_notify = 0;
int interval = get_int_var(NOTIFY_INTERVAL_VAR);
time_t current_time = time(NULL);
if (current_time < last_notify)
last_notify = current_time;
else if (!interval || interval > (current_time - last_notify))
return; /* Not yet */
last_notify = current_time;
if (!server_list_size() || !get_int_var(NOTIFY_VAR))
return;
for (servnum = 0; servnum < server_list_size(); servnum++)
{
if (is_server_connected(servnum) && !get_server_watch(servnum))
{
from_server = servnum;
if (NOTIFY_LIST(servnum)->ison && *NOTIFY_LIST(servnum)->ison)
{
char *lame = LOCAL_COPY(NOTIFY_LIST(servnum)->ison);
isonbase(lame, ison_notify);
}
}
}
from_server = old_from_server;
return;
}
示例7: create_timer_ref
/*
* create_timer_ref: returns the lowest unused reference number for a timer
* All refnums that are not already in use are valid.
*
* The user is allowed to use any string as a refnum, we dont really care.
* Automatically assigned refnums (when the user doesnt specify one) will
* always be one more than the highest pending refnum.
*
* "refnum_gets" must be REFNUM_MAX + 1 bytes by definition of API.
*/
static int create_timer_ref (const char *refnum_wanted, char **refnum_gets)
{
Timer *tmp;
int refnum = 0;
char *refnum_want;
refnum_want = LOCAL_COPY(refnum_wanted);
/* If the user doesnt care */
if (*refnum_want == 0)
{
/* Find the lowest refnum available */
for (tmp = PendingTimers; tmp; tmp = tmp->next)
{
if (refnum < my_atol(tmp->ref))
refnum = my_atol(tmp->ref);
}
malloc_sprintf(refnum_gets, "%d", refnum + 1);
}
else
{
/* See if the refnum is available */
if (get_timer(refnum_want))
return -1; /* Already in use */
malloc_strcpy(refnum_gets, refnum_want);
}
return 0;
}
示例8: m_part
/*
** m_part
** parv[0] = sender prefix
** parv[1] = channel
** parv[2] = reason
*/
static int
m_part(struct Client *client_p, struct Client *source_p, int parc, const char *parv[])
{
char *p, *name;
char reason[REASONLEN + 1];
char *s = LOCAL_COPY(parv[1]);
reason[0] = '\0';
if(parc > 2)
strlcpy(reason, parv[2], sizeof(reason));
name = strtoken(&p, s, ",");
/* Finish the flood grace period... */
if(MyClient(source_p) && !IsFloodDone(source_p))
flood_endgrace(source_p);
while (name)
{
part_one_client(client_p, source_p, name, reason);
name = strtoken(&p, NULL, ",");
}
return 0;
}
示例9: throw
void SchmidtUGenInternal::processBlock(bool& shouldDelete, const unsigned int blockID, const int channel) throw()
{
int numSamplesToProcess = uGenOutput.getBlockSize();
float* outputSamples = uGenOutput.getSampleData();
float* inputSamples = inputs[Input].processBlock(shouldDelete, blockID, channel);
float* loSamples = inputs[Lo].processBlock(shouldDelete, blockID, channel);
float* hiSamples = inputs[Hi].processBlock(shouldDelete, blockID, channel);
LOCAL_DECLARE(float, state);
while(numSamplesToProcess--)
{
float input = *inputSamples++;
float lo = *loSamples++;
float hi = *hiSamples++;
if(state > 0.f)
{
if(input < lo) state = 0.f;
}
else
{
if(input > hi) state = 1.f;
}
*outputSamples++ = state;
}
LOCAL_COPY(state);
}
示例10: m_quit
/*
** m_quit
** parv[1] = comment
*/
static int
m_quit(struct Client *client_p, struct Client *source_p, int parc, const char *parv[])
{
char *comment = LOCAL_COPY((parc > 1 && parv[1]) ? parv[1] : client_p->name);
char reason[REASONLEN + 1];
source_p->flags |= FLAGS_NORMALEX;
if(strlen(comment) > (size_t) REASONLEN)
comment[REASONLEN] = '\0';
strip_colour(comment);
if(ConfigFileEntry.client_exit && comment[0]) {
rb_snprintf(reason, sizeof(reason), "Quit: %s", comment);
comment = reason;
}
if(!IsOper(source_p) && !EmptyString(ConfigFileEntry.static_quit)) {
exit_client(client_p, source_p, source_p, ConfigFileEntry.static_quit);
return 0;
}
if(!IsOper(source_p) &&
(source_p->localClient->firsttime + ConfigFileEntry.anti_spam_exit_message_time) >
rb_current_time()) {
exit_client(client_p, source_p, source_p, "Client Quit");
return 0;
}
exit_client(client_p, source_p, source_p, comment);
return 0;
}
示例11: mr_capab
/*
* mr_capab - CAPAB message handler
* parv[1] = space-separated list of capabilities
*
*/
static int
mr_capab(struct MsgBuf *msgbuf_p, struct Client *client_p, struct Client *source_p, int parc, const char *parv[])
{
int i;
char *p;
char *s;
/* ummm, this shouldn't happen. Could argue this should be logged etc. */
if(client_p->localClient == NULL)
return 0;
if(client_p->user)
return 0;
/* CAP_TS6 is set in PASS, so is valid.. */
if((client_p->localClient->caps & ~CAP_TS6) != 0)
{
exit_client(client_p, client_p, client_p, "CAPAB received twice");
return 0;
}
else
client_p->localClient->caps |= CAP_CAP;
rb_free(client_p->localClient->fullcaps);
client_p->localClient->fullcaps = rb_strdup(parv[1]);
for (i = 1; i < parc; i++)
{
char *t = LOCAL_COPY(parv[i]);
for (s = rb_strtok_r(t, " ", &p); s; s = rb_strtok_r(NULL, " ", &p))
client_p->localClient->caps |= capability_get(serv_capindex, s);
}
return 0;
}
示例12: LOCAL_COPY
char *make_string_var(const char *var_name)
{
int cnt,
msv_index;
char *ret = NULL;
char *copy;
copy = LOCAL_COPY(var_name);
upper(copy);
if ((find_fixed_array_item (irc_variable, sizeof(IrcVariable), NUMBER_OF_VARIABLES, copy, &cnt, &msv_index) == NULL))
return NULL;
if (cnt >= 0)
return NULL;
switch (irc_variable[msv_index].type)
{
case STR_TYPE_VAR:
ret = m_strdup(irc_variable[msv_index].string);
break;
case INT_TYPE_VAR:
ret = m_strdup(ltoa(irc_variable[msv_index].integer));
break;
case BOOL_TYPE_VAR:
ret = m_strdup(var_settings[irc_variable[msv_index].integer]);
break;
case CHAR_TYPE_VAR:
ret = m_dupchar(irc_variable[msv_index].integer);
break;
}
return ret;
}
示例13: LOCAL_COPY
char *get_help_topic(char *args, int helpfunc)
{
char *new_comm = NULL;
int found = 0, i;
char *others = NULL;
new_comm = LOCAL_COPY(args);
for (i = 0; helpfunc ? script_help[i] : help_index[i]; i++)
{
if (!my_strnicmp(helpfunc?script_help[i]->title:help_index[i]->title, new_comm, strlen(new_comm)))
{
int j;
char *text = NULL;
if (found++)
{
m_s3cat(&others, " , ", helpfunc?script_help[i]->title:help_index[i]->title);
continue;
}
if (args && *args && do_hook(HELPTOPIC_LIST, "%s", args))
put_it("%s",convert_output_format("$G \002$0\002: Help on Topic: \002$1\002", version, args));
for (j = 0; ; j++)
{
if (helpfunc && (script_help[i] && script_help[i]->contents[j]))
text = script_help[i]->contents[j];
else if (!helpfunc && (help_index[i] && help_index[i]->contents[j]))
text = help_index[i]->contents[j];
else
break;
if (text && do_hook(HELPSUBJECT_LIST, "%s %s", new_comm, text))
{
in_chelp++;
put_it("%s", convert_output_format(text, NULL));
in_chelp--;
}
}
text = helpfunc ?script_help[i]->relates:help_index[i]->relates;
if (text && do_hook(HELPTOPIC_LIST, "%s", text))
put_it("%s", convert_output_format(text, NULL));
}
else if (found)
break;
}
if (!found)
{
if (do_hook(HELPTOPIC_LIST, "%s", args))
bitchsay("No help on %s", args);
}
if (others && found)
{
if (do_hook(HELPTOPIC_LIST, "%d %s", found, others))
put_it("Other %d subjects: %s", found - 1, others);
}
new_free(&others);
if (helpfunc)
return m_strdup(empty_string);
return NULL;
}
示例14: m_ison
static int
m_ison(struct Client *client_p, struct Client *source_p, int parc, const char *parv[])
{
struct Client *target_p;
char *nick;
char *p;
char buf[IRCD_BUFSIZE];
int i;
memset(buf, 0, sizeof(buf));
for(i = 1; i < parc; i++)
{
char *cs = LOCAL_COPY(parv[i]);
for(nick = rb_strtok_r(cs, " ", &p); nick; nick = rb_strtok_r(NULL, " ", &p))
{
target_p = find_named_client(nick);
if(target_p != NULL)
{
rb_strlcat(buf, target_p->name, sizeof(buf));
rb_strlcat(buf, " ", sizeof(buf));
}
}
}
sendto_one_numeric(source_p, s_RPL(RPL_ISON), buf);
return 0;
}
示例15: m_ison
/*
* m_ison added by Darren Reed 13/8/91 to act as an efficent user indicator
* with respect to cpu/bandwidth used. Implemented for NOTIFY feature in
* clients. Designed to reduce number of whois requests. Can process
* nicknames in batches as long as the maximum buffer length.
*
* format:
* ISON :nicklist
*/
static int
m_ison(struct Client *client_p, struct Client *source_p, int parc, const char *parv[])
{
struct Client *target_p;
char *nick;
char *p;
char *current_insert_point, *current_insert_point2;
int len;
int i;
int done = 0;
current_insert_point2 = buf2;
*buf2 = '\0';
rb_sprintf(buf, form_str(RPL_ISON), me.name, source_p->name);
len = strlen(buf);
current_insert_point = buf + len;
/* rfc1489 is ambigious about how to handle ISON
* this should handle both interpretations.
*/
for(i = 1; i < parc; i++)
{
char *cs = LOCAL_COPY(parv[i]);
for(nick = rb_strtok_r(cs, " ", &p); nick; nick = rb_strtok_r(NULL, " ", &p))
{
target_p = find_named_client(nick);
if(target_p != NULL)
{
len = strlen(target_p->name);
if((current_insert_point + (len + 5)) < (buf + sizeof(buf)))
{
memcpy(current_insert_point, target_p->name, len);
current_insert_point += len;
*current_insert_point++ = ' ';
}
else
{
done = 1;
break;
}
}
}
if(done)
break;
}
/* current_insert_point--;
* Do NOT take out the trailing space, it breaks ircII
* --Rodder */
*current_insert_point = '\0';
*current_insert_point2 = '\0';
sendto_one_buffer(source_p, buf);
return 0;
}