mirror of
https://github.com/zeek/zeek.git
synced 2025-10-05 16:18:19 +00:00
Initial import of svn+ssh:://svn.icir.org/bro/trunk/bro as of r7088
This commit is contained in:
commit
61757ac78b
1383 changed files with 380824 additions and 0 deletions
101
src/Frame.cc
Normal file
101
src/Frame.cc
Normal file
|
@ -0,0 +1,101 @@
|
|||
// $Id: Frame.cc 6219 2008-10-01 05:39:07Z vern $
|
||||
//
|
||||
// See the file "COPYING" in the main distribution directory for copyright.
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include "Frame.h"
|
||||
#include "Stmt.h"
|
||||
#include "Func.h"
|
||||
#include "Trigger.h"
|
||||
|
||||
vector<Frame*> g_frame_stack;
|
||||
|
||||
Frame::Frame(int arg_size, const BroFunc* func, const val_list* fn_args)
|
||||
{
|
||||
size = arg_size;
|
||||
frame = new Val*[size];
|
||||
function = func;
|
||||
func_args = fn_args;
|
||||
|
||||
next_stmt = 0;
|
||||
break_before_next_stmt = false;
|
||||
break_on_return = false;
|
||||
|
||||
trigger = 0;
|
||||
call = 0;
|
||||
delayed = false;
|
||||
|
||||
Clear();
|
||||
}
|
||||
|
||||
Frame::~Frame()
|
||||
{
|
||||
Unref(trigger);
|
||||
Release();
|
||||
}
|
||||
|
||||
void Frame::Release()
|
||||
{
|
||||
for ( int i = 0; i < size; ++i )
|
||||
Unref(frame[i]);
|
||||
|
||||
delete [] frame;
|
||||
}
|
||||
|
||||
void Frame::Describe(ODesc* d) const
|
||||
{
|
||||
if ( ! d->IsBinary() )
|
||||
d->AddSP("frame");
|
||||
|
||||
if ( ! d->IsReadable() )
|
||||
{
|
||||
d->Add(size);
|
||||
|
||||
for ( int i = 0; i < size; ++i )
|
||||
{
|
||||
d->Add(frame[i] != 0);
|
||||
d->SP();
|
||||
}
|
||||
}
|
||||
|
||||
for ( int i = 0; i < size; ++i )
|
||||
if ( frame[i] )
|
||||
frame[i]->Describe(d);
|
||||
else if ( d->IsReadable() )
|
||||
d->Add("<nil>");
|
||||
}
|
||||
|
||||
void Frame::Clear()
|
||||
{
|
||||
for ( int i = 0; i < size; ++i )
|
||||
frame[i] = 0;
|
||||
}
|
||||
|
||||
Frame* Frame::Clone()
|
||||
{
|
||||
Frame* f = new Frame(size, function, func_args);
|
||||
|
||||
for ( int i = 0; i < size; ++i )
|
||||
f->frame[i] = frame[i] ? frame[i]->Clone() : 0;
|
||||
|
||||
if ( trigger )
|
||||
Ref(trigger);
|
||||
f->trigger = trigger;
|
||||
f->call = call;
|
||||
|
||||
return f;
|
||||
}
|
||||
|
||||
void Frame::SetTrigger(Trigger* arg_trigger)
|
||||
{
|
||||
if ( arg_trigger )
|
||||
Ref(arg_trigger);
|
||||
trigger = arg_trigger;
|
||||
}
|
||||
|
||||
void Frame::ClearTrigger()
|
||||
{
|
||||
Unref(trigger);
|
||||
trigger = 0;
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue