Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDalai Felinto <dfelinto@gmail.com>2018-04-16 15:07:42 +0300
committerDalai Felinto <dfelinto@gmail.com>2018-04-17 18:51:28 +0300
commit159806140fd33e6ddab951c0f6f180cfbf927d38 (patch)
treeda076be3baa4d987fb5935e220a3d901c926e0e7 /source/gameengine/Expressions/intern/ListValue.cpp
parent28b996a9d2090efdd74115a653629ef9d7d871f7 (diff)
Removing Blender Game Engine from Blender 2.8
Folders removed entirely: * //extern/recastnavigation * //intern/decklink * //intern/moto * //source/blender/editors/space_logic * //source/blenderplayer * //source/gameengine This includes DNA data and any reference to the BGE code in Blender itself. We are bumping the subversion. Pending tasks: * Tile/clamp code in image editor draw code. * Viewport drawing code (so much of this will go away because of BI removal that we can wait until then to remove this.
Diffstat (limited to 'source/gameengine/Expressions/intern/ListValue.cpp')
-rw-r--r--source/gameengine/Expressions/intern/ListValue.cpp702
1 files changed, 0 insertions, 702 deletions
diff --git a/source/gameengine/Expressions/intern/ListValue.cpp b/source/gameengine/Expressions/intern/ListValue.cpp
deleted file mode 100644
index 557ce7be300..00000000000
--- a/source/gameengine/Expressions/intern/ListValue.cpp
+++ /dev/null
@@ -1,702 +0,0 @@
-/** \file gameengine/Expressions/ListValue.cpp
- * \ingroup expressions
- */
-// ListValue.cpp: implementation of the CListValue class.
-//
-//////////////////////////////////////////////////////////////////////
-/*
- * Copyright (c) 1996-2000 Erwin Coumans <coockie@acm.org>
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Erwin Coumans makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- */
-
-#include <stdio.h>
-
-#include "EXP_ListValue.h"
-#include "EXP_StringValue.h"
-#include "EXP_VoidValue.h"
-#include <algorithm>
-#include "EXP_BoolValue.h"
-
-#include "BLI_sys_types.h" /* for intptr_t support */
-
-
-//////////////////////////////////////////////////////////////////////
-// Construction/Destruction
-//////////////////////////////////////////////////////////////////////
-
-CListValue::CListValue()
-: CPropValue()
-{
- m_bReleaseContents=true;
-}
-
-
-
-CListValue::~CListValue()
-{
-
- if (m_bReleaseContents) {
- for (unsigned int i=0;i<m_pValueArray.size();i++) {
- m_pValueArray[i]->Release();
- }
- }
-}
-
-
-static STR_String gstrListRep=STR_String("List");
-
-const STR_String & CListValue::GetText()
-{
- gstrListRep = "[";
- STR_String commastr = "";
-
- for (int i=0;i<GetCount();i++)
- {
- gstrListRep += commastr;
- gstrListRep += GetValue(i)->GetText();
- commastr = ",";
- }
- gstrListRep += "]";
-
- return gstrListRep;
-}
-
-
-
-CValue* CListValue::GetReplica()
-{
- CListValue* replica = new CListValue(*this);
-
- replica->ProcessReplica();
-
- replica->m_bReleaseContents=true; // for copy, complete array is copied for now...
- // copy all values
- int numelements = m_pValueArray.size();
- unsigned int i=0;
- replica->m_pValueArray.resize(numelements);
- for (i=0;i<m_pValueArray.size();i++)
- replica->m_pValueArray[i] = m_pValueArray[i]->GetReplica();
-
-
- return replica;
-};
-
-
-
-void CListValue::SetValue(int i, CValue *val)
-{
- assertd(i < m_pValueArray.size());
- m_pValueArray[i]=val;
-}
-
-
-
-void CListValue::Resize(int num)
-{
- m_pValueArray.resize(num);
-}
-
-
-
-void CListValue::Remove(int i)
-{
- assertd(i<m_pValueArray.size());
- m_pValueArray.erase(m_pValueArray.begin()+i);
-}
-
-
-
-void CListValue::ReleaseAndRemoveAll()
-{
- for (unsigned int i=0;i<m_pValueArray.size();i++)
- m_pValueArray[i]->Release();
- m_pValueArray.clear();//.Clear();
-}
-
-
-
-CValue* CListValue::FindValue(const STR_String &name)
-{
- for (int i=0; i < GetCount(); i++)
- if (GetValue(i)->GetName() == name)
- return GetValue(i);
-
- return NULL;
-}
-
-CValue* CListValue::FindValue(const char *name)
-{
- for (int i=0; i < GetCount(); i++)
- if (GetValue(i)->GetName() == name)
- return GetValue(i);
-
- return NULL;
-}
-
-bool CListValue::SearchValue(CValue *val)
-{
- for (int i=0;i<GetCount();i++)
- if (val == GetValue(i))
- return true;
- return false;
-}
-
-
-
-void CListValue::SetReleaseOnDestruct(bool bReleaseContents)
-{
- m_bReleaseContents = bReleaseContents;
-}
-
-
-
-bool CListValue::RemoveValue(CValue *val)
-{
- bool result=false;
-
- for (int i=GetCount()-1;i>=0;i--)
- if (val == GetValue(i))
- {
- Remove(i);
- result=true;
- }
- return result;
-}
-
-
-
-void CListValue::MergeList(CListValue *otherlist)
-{
-
- int numelements = this->GetCount();
- int numotherelements = otherlist->GetCount();
-
-
- Resize(numelements+numotherelements);
-
- for (int i=0;i<numotherelements;i++)
- {
- SetValue(i+numelements,otherlist->GetValue(i)->AddRef());
- }
-}
-
-bool CListValue::CheckEqual(CValue* first,CValue* second)
-{
- bool result = false;
-
- CValue* eqval = ((CValue*)first)->Calc(VALUE_EQL_OPERATOR,(CValue*)second);
-
- if (eqval==NULL)
- return false;
- const STR_String& text = eqval->GetText();
- if (&text==&CBoolValue::sTrueString)
- {
- result = true;
- }
- eqval->Release();
- return result;
-
-}
-
-
-/* ---------------------------------------------------------------------
- * Some stuff taken from the header
- * --------------------------------------------------------------------- */
-CValue* CListValue::Calc(VALUE_OPERATOR op,CValue *val)
-{
- //assert(false); // todo: implement me!
- static int error_printed = 0;
- if (error_printed==0) {
- fprintf(stderr, "CValueList::Calc not yet implemented\n");
- error_printed = 1;
- }
- return NULL;
-}
-
-CValue* CListValue::CalcFinal(VALUE_DATA_TYPE dtype,
- VALUE_OPERATOR op,
- CValue* val)
-{
- //assert(false); // todo: implement me!
- static int error_printed = 0;
- if (error_printed==0) {
- fprintf(stderr, "CValueList::CalcFinal not yet implemented\n");
- error_printed = 1;
- }
- return NULL;
-}
-
-
-
-void CListValue::Add(CValue* value)
-{
- m_pValueArray.push_back(value);
-}
-
-
-
-double CListValue::GetNumber()
-{
- return -1;
-}
-
-
-
-int CListValue::GetValueType()
-{
- return VALUE_LIST_TYPE;
-}
-
-
-
-void CListValue::SetModified(bool bModified)
-{
- CValue::SetModified(bModified);
- int numels = GetCount();
-
- for (int i=0;i<numels;i++)
- GetValue(i)->SetModified(bModified);
-}
-
-
-
-bool CListValue::IsModified()
-{
- bool bmod = CValue::IsModified(); //normal own flag
- int numels = GetCount();
-
- for (int i=0;i<numels;i++)
- bmod = bmod || GetValue(i)->IsModified();
-
- return bmod;
-}
-
-#ifdef WITH_PYTHON
-
-/* --------------------------------------------------------------------- */
-/* Python interface ---------------------------------------------------- */
-/* --------------------------------------------------------------------- */
-
-static Py_ssize_t listvalue_bufferlen(PyObject *self)
-{
- CListValue *list= static_cast<CListValue *>(BGE_PROXY_REF(self));
- if (list==NULL)
- return 0;
-
- return (Py_ssize_t)list->GetCount();
-}
-
-static PyObject *listvalue_buffer_item(PyObject *self, Py_ssize_t index)
-{
- CListValue *list= static_cast<CListValue *>(BGE_PROXY_REF(self));
- CValue *cval;
-
- if (list==NULL) {
- PyErr_SetString(PyExc_SystemError, "val = CList[i], " BGE_PROXY_ERROR_MSG);
- return NULL;
- }
-
- int count = list->GetCount();
-
- if (index < 0)
- index = count+index;
-
- if (index < 0 || index >= count) {
- PyErr_SetString(PyExc_IndexError, "CList[i]: Python ListIndex out of range in CValueList");
- return NULL;
- }
-
- cval= list->GetValue(index);
-
- PyObject *pyobj = cval->ConvertValueToPython();
- if (pyobj)
- return pyobj;
- else
- return cval->GetProxy();
-}
-
-
-/* just slice it into a python list... */
-static PyObject *listvalue_buffer_slice(CListValue *list, Py_ssize_t start, Py_ssize_t stop)
-{
- PyObject *newlist;
- Py_ssize_t i, j;
-
- /* caller needs to validate negative index */
-#if 0
- Py_ssize_t len = list->GetCount();
-
- if (start > len) start = len;
- if (stop > len) stop = len;
-#endif
-
- newlist = PyList_New(stop - start);
- if (!newlist)
- return NULL;
-
- for (i = start, j = 0; i < stop; i++, j++) {
- PyObject *pyobj = list->GetValue(i)->ConvertValueToPython();
- if (!pyobj) {
- pyobj = list->GetValue(i)->GetProxy();
- }
- PyList_SET_ITEM(newlist, j, pyobj);
- }
- return newlist;
-}
-
-
-static PyObject *listvalue_mapping_subscript(PyObject *self, PyObject *key)
-{
- CListValue *list= static_cast<CListValue *>(BGE_PROXY_REF(self));
- if (list==NULL) {
- PyErr_SetString(PyExc_SystemError, "value = CList[i], " BGE_PROXY_ERROR_MSG);
- return NULL;
- }
-
- if (PyUnicode_Check(key)) {
- CValue *item = ((CListValue*) list)->FindValue(_PyUnicode_AsString(key));
- if (item) {
- PyObject *pyobj = item->ConvertValueToPython();
- if (pyobj)
- return pyobj;
- else
- return item->GetProxy();
- }
- }
- else if (PyIndex_Check(key)) {
- Py_ssize_t index = PyLong_AsSsize_t(key);
- return listvalue_buffer_item(self, index); /* wont add a ref */
- }
- else if (PySlice_Check(key)) {
- Py_ssize_t start, stop, step, slicelength;
-
- if (PySlice_GetIndicesEx(key, list->GetCount(), &start, &stop, &step, &slicelength) < 0)
- return NULL;
-
- if (slicelength <= 0) {
- return PyList_New(0);
- }
- else if (step == 1) {
- return listvalue_buffer_slice(list, start, stop);
- }
- else {
- PyErr_SetString(PyExc_TypeError, "CList[slice]: slice steps not supported");
- return NULL;
- }
- }
-
- PyErr_Format(PyExc_KeyError,
- "CList[key]: '%R' key not in list", key);
- return NULL;
-}
-
-/* clist + list, return a list that python owns */
-static PyObject *listvalue_buffer_concat(PyObject *self, PyObject *other)
-{
- CListValue *listval= static_cast<CListValue *>(BGE_PROXY_REF(self));
- Py_ssize_t i, numitems, numitems_orig;
-
- if (listval==NULL) {
- PyErr_SetString(PyExc_SystemError, "CList+other, " BGE_PROXY_ERROR_MSG);
- return NULL;
- }
-
- numitems_orig= listval->GetCount();
-
- // for now, we support CListValue concatenated with items
- // and CListValue concatenated to Python Lists
- // and CListValue concatenated with another CListValue
-
- /* Shallow copy, don't use listval->GetReplica(), it will screw up with KX_GameObjects */
- CListValue* listval_new = new CListValue();
-
- if (PyList_Check(other))
- {
- CValue* listitemval;
- bool error = false;
-
- numitems = PyList_GET_SIZE(other);
-
- /* copy the first part of the list */
- listval_new->Resize(numitems_orig + numitems);
- for (i=0;i<numitems_orig;i++)
- listval_new->SetValue(i, listval->GetValue(i)->AddRef());
-
- for (i=0;i<numitems;i++)
- {
- listitemval = listval->ConvertPythonToValue(PyList_GET_ITEM(other, i), true, "cList + pyList: CListValue, ");
-
- if (listitemval) {
- listval_new->SetValue(i+numitems_orig, listitemval);
- } else {
- error= true;
- break;
- }
- }
-
- if (error) {
- listval_new->Resize(numitems_orig+i); /* resize so we don't try release NULL pointers */
- listval_new->Release();
- return NULL; /* ConvertPythonToValue above sets the error */
- }
-
- }
- else if (PyObject_TypeCheck(other, &CListValue::Type)) {
- // add items from otherlist to this list
- CListValue* otherval = static_cast<CListValue *>(BGE_PROXY_REF(other));
- if (otherval==NULL) {
- listval_new->Release();
- PyErr_SetString(PyExc_SystemError, "CList+other, " BGE_PROXY_ERROR_MSG);
- return NULL;
- }
-
- numitems = otherval->GetCount();
-
- /* copy the first part of the list */
- listval_new->Resize(numitems_orig + numitems); /* resize so we don't try release NULL pointers */
- for (i=0;i<numitems_orig;i++)
- listval_new->SetValue(i, listval->GetValue(i)->AddRef());
-
- /* now copy the other part of the list */
- for (i=0;i<numitems;i++)
- listval_new->SetValue(i+numitems_orig, otherval->GetValue(i)->AddRef());
-
- }
- return listval_new->NewProxy(true); /* python owns this list */
-}
-
-static int listvalue_buffer_contains(PyObject *self_v, PyObject *value)
-{
- CListValue *self = static_cast<CListValue *>(BGE_PROXY_REF(self_v));
-
- if (self == NULL) {
- PyErr_SetString(PyExc_SystemError, "val in CList, " BGE_PROXY_ERROR_MSG);
- return -1;
- }
-
- if (PyUnicode_Check(value)) {
- if (self->FindValue((const char *)_PyUnicode_AsString(value))) {
- return 1;
- }
- }
- else if (PyObject_TypeCheck(value, &CValue::Type)) { /* not dict like at all but this worked before __contains__ was used */
- CValue *item= static_cast<CValue *>(BGE_PROXY_REF(value));
- for (int i=0; i < self->GetCount(); i++)
- if (self->GetValue(i) == item) // Com
- return 1;
-
- } // not using CheckEqual
-
- return 0;
-}
-
-
-static PySequenceMethods listvalue_as_sequence = {
- listvalue_bufferlen,//(inquiry)buffer_length, /*sq_length*/
- listvalue_buffer_concat, /*sq_concat*/
- NULL, /*sq_repeat*/
- listvalue_buffer_item, /*sq_item*/
-// TODO, slicing in py3
- NULL, // listvalue_buffer_slice, /*sq_slice*/
- NULL, /*sq_ass_item*/
- NULL, /*sq_ass_slice*/
- (objobjproc)listvalue_buffer_contains, /* sq_contains */
- (binaryfunc) NULL, /* sq_inplace_concat */
- (ssizeargfunc) NULL, /* sq_inplace_repeat */
-};
-
-
-
-/* Is this one used ? */
-static PyMappingMethods instance_as_mapping = {
- listvalue_bufferlen, /*mp_length*/
- listvalue_mapping_subscript, /*mp_subscript*/
- NULL /*mp_ass_subscript*/
-};
-
-
-
-PyTypeObject CListValue::Type = {
- PyVarObject_HEAD_INIT(NULL, 0)
- "CListValue", /*tp_name*/
- sizeof(PyObjectPlus_Proxy), /*tp_basicsize*/
- 0, /*tp_itemsize*/
- /* methods */
- py_base_dealloc, /*tp_dealloc*/
- 0, /*tp_print*/
- 0, /*tp_getattr*/
- 0, /*tp_setattr*/
- 0, /*tp_compare*/
- py_base_repr, /*tp_repr*/
- 0, /*tp_as_number*/
- &listvalue_as_sequence, /*tp_as_sequence*/
- &instance_as_mapping, /*tp_as_mapping*/
- 0, /*tp_hash*/
- 0, /*tp_call */
- 0,
- NULL,
- NULL,
- 0,
- Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
- 0,0,0,0,0,0,0,
- Methods,
- 0,
- 0,
- &CValue::Type,
- 0,0,0,0,0,0,
- py_base_new
-};
-
-PyMethodDef CListValue::Methods[] = {
- /* List style access */
- {"append", (PyCFunction)CListValue::sPyappend,METH_O},
- {"reverse", (PyCFunction)CListValue::sPyreverse,METH_NOARGS},
- {"index", (PyCFunction)CListValue::sPyindex,METH_O},
- {"count", (PyCFunction)CListValue::sPycount,METH_O},
-
- /* Dict style access */
- {"get", (PyCFunction)CListValue::sPyget,METH_VARARGS},
-
- /* Own cvalue funcs */
- {"from_id", (PyCFunction)CListValue::sPyfrom_id,METH_O},
-
- {NULL,NULL} //Sentinel
-};
-
-PyAttributeDef CListValue::Attributes[] = {
- { NULL } //Sentinel
-};
-
-PyObject *CListValue::Pyappend(PyObject *value)
-{
- CValue *objval = ConvertPythonToValue(value, true, "CList.append(i): CValueList, ");
-
- if (!objval) /* ConvertPythonToValue sets the error */
- return NULL;
-
- if (!BGE_PROXY_PYOWNS(m_proxy)) {
- PyErr_SetString(PyExc_TypeError,
- "CList.append(i): internal values can't be modified");
- return NULL;
- }
-
- Add(objval);
-
- Py_RETURN_NONE;
-}
-
-PyObject *CListValue::Pyreverse()
-{
- if (!BGE_PROXY_PYOWNS(m_proxy)) {
- PyErr_SetString(PyExc_TypeError,
- "CList.reverse(): internal values can't be modified");
- return NULL;
- }
-
- std::reverse(m_pValueArray.begin(),m_pValueArray.end());
- Py_RETURN_NONE;
-}
-
-PyObject *CListValue::Pyindex(PyObject *value)
-{
- PyObject *result = NULL;
-
- CValue *checkobj = ConvertPythonToValue(value, true, "val = cList[i]: CValueList, ");
- if (checkobj==NULL)
- return NULL; /* ConvertPythonToValue sets the error */
-
- int numelem = GetCount();
- for (int i=0;i<numelem;i++)
- {
- CValue* elem = GetValue(i);
- if (checkobj==elem || CheckEqual(checkobj,elem))
- {
- result = PyLong_FromLong(i);
- break;
- }
- }
- checkobj->Release();
-
- if (result==NULL) {
- PyErr_SetString(PyExc_ValueError, "CList.index(x): x not in CListValue");
- }
- return result;
-
-}
-
-
-
-PyObject *CListValue::Pycount(PyObject *value)
-{
- int numfound = 0;
-
- CValue *checkobj = ConvertPythonToValue(value, false, ""); /* error ignored */
-
- if (checkobj==NULL) { /* in this case just return that there are no items in the list */
- PyErr_Clear();
- return PyLong_FromLong(0);
- }
-
- int numelem = GetCount();
- for (int i=0;i<numelem;i++)
- {
- CValue* elem = GetValue(i);
- if (checkobj==elem || CheckEqual(checkobj,elem))
- {
- numfound ++;
- }
- }
- checkobj->Release();
-
- return PyLong_FromLong(numfound);
-}
-
-/* Matches python dict.get(key, [default]) */
-PyObject *CListValue::Pyget(PyObject *args)
-{
- char *key;
- PyObject *def = Py_None;
-
- if (!PyArg_ParseTuple(args, "s|O:get", &key, &def))
- return NULL;
-
- CValue *item = FindValue((const char *)key);
- if (item) {
- PyObject *pyobj = item->ConvertValueToPython();
- if (pyobj)
- return pyobj;
- else
- return item->GetProxy();
- }
- Py_INCREF(def);
- return def;
-}
-
-
-PyObject *CListValue::Pyfrom_id(PyObject *value)
-{
- uintptr_t id= (uintptr_t)PyLong_AsVoidPtr(value);
-
- if (PyErr_Occurred())
- return NULL;
-
- int numelem = GetCount();
- for (int i=0;i<numelem;i++)
- {
- if (reinterpret_cast<uintptr_t>(m_pValueArray[i]->m_proxy) == id)
- return GetValue(i)->GetProxy();
- }
- PyErr_SetString(PyExc_IndexError, "from_id(#): id not found in CValueList");
- return NULL;
-
-}
-
-#endif // WITH_PYTHON