2017-04-17 06:17:10 -06:00

126 lines
3.4 KiB
C++
Executable File

/* Arrays.h - the Array family of classes for MAXScript
*
* Copyright (c) John Wainwright, 1996
*
*
*/
#ifndef _H_ARRAYS
#define _H_ARRAYS
#include "Collect.h"
/* ------------------------ Array ------------------------------ */
visible_class (Array)
class Array : public Value, public Collection
{
public:
int size; // array size
int data_size; // allocated array buffer size (in Value*'s)
Value** data; // the array elements (uninitialized are set to undefined)
ScripterExport static CRITICAL_SECTION array_update; // for syncing array updates
ScripterExport Array(int init_size);
ScripterExport ~Array() { if (data) free(data); }
classof_methods (Array, Value);
static Value* make(Value** arg_list, int count);
static void setup();
Value*& operator[](const int i) const { return data[i]; } // access ith array entry.
# define is_array(v) ((v)->tag == class_tag(Array))
BOOL _is_collection() { return 1; }
BOOL _is_selection() { return 1; }
void gc_trace();
void collect() { delete this; }
ScripterExport void sprin1(CharStream* s);
// operations
#include "defimpfn.h"
# include "arraypro.h"
use_generic( plus, "+" );
use_generic( copy, "copy" );
use_generic( coerce, "coerce");
ScripterExport Value* map(node_map& m);
ScripterExport Value* map_path(PathName* path, node_map& m);
ScripterExport Value* find_first(BOOL (*test_fn)(INode* node, int level, void* arg), void* test_arg);
ScripterExport Value* get_path(PathName* path);
// built-in property accessors
def_property ( count );
ScripterExport Value* append(Value*);
ScripterExport Value* join(Value*);
ScripterExport Value* sort();
ScripterExport Value* push(Value*);
ScripterExport Value* drop();
ScripterExport Value* get(int index);
ScripterExport BOOL deep_eq(Value* other);
// get selection iterator for an array
SelectionIterator* selection_iterator();
// scene I/O
IOResult Save(ISave* isave);
static Value* Load(ILoad* iload, USHORT chunkID, ValueLoader* vload);
void to_fpvalue(FPValue& v);
};
/* ------------------------ BitArray ------------------------------ */
visible_class (BitArrayValue)
class BitArrayValue : public Value
{
public:
BitArray bits; // the bits
ScripterExport BitArrayValue();
ScripterExport BitArrayValue(BitArray& b);
ScripterExport BitArrayValue(int count);
classof_methods (BitArrayValue, Value);
static Value* make(Value** arg_list, int count);
# define is_BitArrayValue(v) ((v)->tag == class_tag(BitArrayValue))
// BOOL _is_collection() { return 1; }
BOOL _is_selection() { return 1; }
void collect() { delete this; }
void sprin1(CharStream* s);
void can_hold(int index) { if (bits.GetSize() <= index) bits.SetSize(index); }
// operations
#include "defimpfn.h"
# include "arraypro.h"
use_generic( plus, "+" );
use_generic( minus, "-" );
def_generic( uminus, "u-");
use_generic( times, "*" );
use_generic( copy, "copy" );
use_generic( coerce, "coerce");
ScripterExport Value* map(node_map& m);
// built-in property accessors
def_property ( count );
def_property ( numberSet );
def_property ( isEmpty );
SelectionIterator* selection_iterator();
BitArray& to_bitarray() { return bits; }
void to_fpvalue(FPValue& v) { v.bits = &bits; v.type = TYPE_BITARRAY; }
# define is_bitarray(b) ((b)->tag == class_tag(BitArrayValue))
};
#endif