summaryrefslogtreecommitdiff
path: root/indra/lscript/lscript_alloc.h
diff options
context:
space:
mode:
authorCinder <cinder@sdf.org>2015-02-08 12:53:39 -0700
committerCinder <cinder@sdf.org>2015-02-08 12:53:39 -0700
commitca08bd5aba5e69fce3b0f5b4f861ffec9fe4d2e5 (patch)
tree16bdd84d4a0911c80d95d5dc04a3bdd342506e55 /indra/lscript/lscript_alloc.h
parentae6440eecc4d6c018a3634c2c06052757bde962f (diff)
OPEN-292 - Remove lscript from project,
Remove legacy udp script upload methods, Refactor script runtime perms from three arrays to one struct array so we don't have to juggle array order anymore.
Diffstat (limited to 'indra/lscript/lscript_alloc.h')
-rwxr-xr-xindra/lscript/lscript_alloc.h293
1 files changed, 0 insertions, 293 deletions
diff --git a/indra/lscript/lscript_alloc.h b/indra/lscript/lscript_alloc.h
deleted file mode 100755
index f8a4e298d2..0000000000
--- a/indra/lscript/lscript_alloc.h
+++ /dev/null
@@ -1,293 +0,0 @@
-/**
- * @file lscript_alloc.h
- * @brief General heap management for scripting system
- *
- * $LicenseInfo:firstyear=2002&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
- * $/LicenseInfo$
- */
-
-#ifndef LL_LSCRIPT_ALLOC_H
-#define LL_LSCRIPT_ALLOC_H
-// #define at top of file accelerates gcc compiles
-// Under gcc 2.9, the manual is unclear if comments can appear above #ifndef
-// Under gcc 3, the manual explicitly states comments can appear above the #ifndef
-
-#include "lscript_byteconvert.h"
-#include "lscript_library.h"
-
-void reset_hp_to_safe_spot(const U8 *buffer);
-
-
-// supported data types
-
-// basic types
-// integer 4 bytes of integer data
-// float 4 bytes of float data
-// string data null terminated 1 byte string
-// key data null terminated 1 byte string
-// vector data 12 bytes of 3 floats
-// quaternion data 16 bytes of 4 floats
-
-// list type
-// list data 4 bytes of number of entries followed by followed by pointer
-
-// string pointer 4 bytes of address of string data on the heap (only used in list data)
-// key pointer 4 bytes of address of key data on the heap (only used in list data)
-
-// heap format
-//
-// 4 byte offset to next block (in bytes)
-// 1 byte of type of variable or empty
-// 2 bytes of reference count
-// nn bytes of data
-
-const S32 MAX_HEAP_SIZE = TOP_OF_MEMORY;
-
-class LLScriptAllocEntry
-{
-public:
- LLScriptAllocEntry() : mSize(0), mType(LST_NULL), mReferenceCount(0) {}
- LLScriptAllocEntry(S32 offset, U8 type) : mSize(offset), mType(type), mReferenceCount(1) {}
- friend std::ostream& operator<<(std::ostream& s, const LLScriptAllocEntry &a)
- {
- s << "Size: " << a.mSize << " Type: " << LSCRIPTTypeNames[a.mType] << " Count: " << a.mReferenceCount;
- return s;
- }
-
- S32 mSize;
- U8 mType;
- S16 mReferenceCount;
-};
-
-// this is only OK because we only load/save via accessors below
-const S32 SIZEOF_SCRIPT_ALLOC_ENTRY = 7;
-
-inline void alloc_entry2bytestream(U8 *buffer, S32 &offset, const LLScriptAllocEntry &entry)
-{
- if ( (offset < 0)
- ||(offset > MAX_HEAP_SIZE))
- {
- set_fault(buffer, LSRF_BOUND_CHECK_ERROR);
- }
- else
- {
- integer2bytestream(buffer, offset, entry.mSize);
- byte2bytestream(buffer, offset, entry.mType);
- s162bytestream(buffer, offset, entry.mReferenceCount);
- }
-}
-
-inline void bytestream2alloc_entry(LLScriptAllocEntry &entry, U8 *buffer, S32 &offset)
-{
- if ( (offset < 0)
- ||(offset > MAX_HEAP_SIZE))
- {
- set_fault(buffer, LSRF_BOUND_CHECK_ERROR);
- reset_hp_to_safe_spot(buffer);
- }
- else
- {
- entry.mSize = bytestream2integer(buffer, offset);
- entry.mType = bytestream2byte(buffer, offset);
- entry.mReferenceCount = bytestream2s16(buffer, offset);
- }
-}
-
-// create a heap from the HR to TM
-BOOL lsa_create_heap(U8 *heap_start, S32 size);
-void lsa_fprint_heap(U8 *buffer, LLFILE *fp);
-
-void lsa_print_heap(U8 *buffer);
-
-// adding to heap
-// if block is empty
-// if block is at least block size + 4 larger than data
-// split block
-// insert data into first part
-// return address
-// else
-// insert data into block
-// return address
-// else
-// if next block is >= SP
-// set Stack-Heap collision
-// return NULL
-// if next block is empty
-// merge next block with current block
-// go to start of algorithm
-// else
-// move to next block
-// go to start of algorithm
-
-S32 lsa_heap_add_data(U8 *buffer, LLScriptLibData *data, S32 heapsize, BOOL b_delete);
-
-S32 lsa_heap_top(U8 *heap_start, S32 maxsize);
-
-// split block
-// set offset to point to new block
-// set offset of new block to point to original offset - block size - data size
-// set new block to empty
-// set new block reference count to 0
-void lsa_split_block(U8 *buffer, S32 &offset, S32 size, LLScriptAllocEntry &entry);
-
-// insert data
-// if data is non-list type
-// set type to basic type, set reference count to 1, copy data, return address
-// else
-// set type to list data type, set reference count to 1
-// for each list entry
-// insert data
-// return address
-
-void lsa_insert_data(U8 *buffer, S32 &offset, LLScriptLibData *data, LLScriptAllocEntry &entry, S32 heapsize);
-
-S32 lsa_create_data_block(U8 **buffer, LLScriptLibData *data, S32 base_offset);
-
-// increase reference count
-// increase reference count by 1
-
-void lsa_increase_ref_count(U8 *buffer, S32 offset);
-
-// decrease reference count
-// decrease reference count by 1
-// if reference count == 0
-// set type to empty
-
-void lsa_decrease_ref_count(U8 *buffer, S32 offset);
-
-inline S32 get_max_heap_size(U8 *buffer)
-{
- return get_register(buffer, LREG_SP) - get_register(buffer, LREG_HR);
-}
-
-
-LLScriptLibData *lsa_get_data(U8 *buffer, S32 &offset, BOOL b_dec_ref);
-LLScriptLibData *lsa_get_list_ptr(U8 *buffer, S32 &offset, BOOL b_dec_ref);
-
-S32 lsa_cat_strings(U8 *buffer, S32 offset1, S32 offset2, S32 heapsize);
-S32 lsa_cmp_strings(U8 *buffer, S32 offset1, S32 offset2);
-
-S32 lsa_cat_lists(U8 *buffer, S32 offset1, S32 offset2, S32 heapsize);
-S32 lsa_cmp_lists(U8 *buffer, S32 offset1, S32 offset2);
-S32 lsa_preadd_lists(U8 *buffer, LLScriptLibData *data, S32 offset2, S32 heapsize);
-S32 lsa_postadd_lists(U8 *buffer, S32 offset1, LLScriptLibData *data, S32 heapsize);
-
-// modifying a list
-// insert new list that is modified
-// store returned address in original list's variable
-// decrease reference count on old list
-
-// list l1 = [10];
-// list l2 = l1;
-// l1 = [11];
-
-// we want l2 == [10];
-
-// more complicated example:
-// list l1 = [10, 11];
-// list l2 = l1;
-// l1[0] = 12
-
-// I think that we want l2 = [10, 11];
-
-// one option would be to use syntax like:
-// l1 = llSetList(l1, 0, 12);
-// but this would require variable argument list matching
-// which maybe is ok, but would be work
-// the other option would be changes to lists that have multiple references causes a copy to occur
-
-// popl @l1, 0, integer, 12
-//
-// would cause l1 to be copied, 12 to replace the 0th entry, and the address of the new list to be saved in l1
-//
-
-inline LLScriptLibData *lsa_bubble_sort(LLScriptLibData *src, S32 stride, S32 ascending)
-{
- S32 number = src->getListLength();
-
- if (number <= 0)
- {
- return NULL;
- }
-
- if (stride <= 0)
- {
- stride = 1;
- }
-
- S32 i = 0;
-
- if (number % stride)
- {
- LLScriptLibData *retval = src->mListp;
- src->mListp = NULL;
- return retval;
- }
-
- LLScriptLibData **sortarray = new LLScriptLibData*[number];
-
- LLScriptLibData *temp = src->mListp;
- while (temp)
- {
- sortarray[i] = temp;
- i++;
- temp = temp->mListp;
- }
-
- S32 j, s;
-
- for (i = 0; i < number; i += stride)
- {
- for (j = i; j < number; j += stride)
- {
- if ( ((*sortarray[i]) <= (*sortarray[j]))
- != (ascending == TRUE))
- {
- for (s = 0; s < stride; s++)
- {
- temp = sortarray[i + s];
- sortarray[i + s] = sortarray[j + s];
- sortarray[j + s] = temp;
- }
- }
- }
- }
-
- i = 1;
- temp = sortarray[0];
- while (i < number)
- {
- temp->mListp = sortarray[i++];
- temp = temp->mListp;
- }
- temp->mListp = NULL;
-
- src->mListp = NULL;
-
- temp = sortarray[0];
- delete[] sortarray;
- return temp;
-}
-
-
-LLScriptLibData* lsa_randomize(LLScriptLibData* src, S32 stride);
-
-#endif