示例#1
0
bool PdBase::writeArray(const std::string& arrayName, std::vector<float>& source, int writeLen, int offset) {

	int arrayLen = libpd_arraysize(arrayName.c_str());
	if(arrayLen < 0) {
		cerr << "Pd: Cannot write to unknown array \"" << arrayName << "\"" << endl;
		return false;
	}
	
	// full array len?
	if(writeLen < 0) {
		writeLen = arrayLen;
	}
	// check write len
	else if(writeLen > arrayLen) {
		cerr << "Pd: Given write len " << writeLen << " > len " << arrayLen
             << " of array \"" << arrayName << "\"" << endl;
		return false;
	}
	
	// check offset
	if(offset+writeLen > arrayLen) {
		cerr << "Pd: Given write len and offset > len " << writeLen
             << " of array \"" << arrayName << "\"" << endl;
		return false;
	}
	
	if(libpd_write_array(arrayName.c_str(), offset, &source[0], writeLen) < 0) {
		cerr << "Pd: libpd_write_array failed for array \"" << arrayName << "\"" << endl;
		return false;
	}
	return true;
}
示例#2
0
//----------------------------------------------------------
int PdBase::arraySize(const std::string& arrayName) {
	int len = libpd_arraysize(arrayName.c_str());;
	if(len < 0) {
		cerr << "Pd: Cannot get size of unknown array \"" << arrayName << "\"" << endl;
		return 0;
	}
	return len;
}
示例#3
0
JNIEXPORT jint JNICALL Java_org_puredata_core_PdBase_arraySize
(JNIEnv *env, jclass cls, jstring jname) {
  if (!jname) return -2;
  const char *cname = (char *) (*env)->GetStringUTFChars(env, jname, NULL);
  pthread_mutex_lock(&mutex);
  int result = libpd_arraysize(cname);
  pthread_mutex_unlock(&mutex);
  (*env)->ReleaseStringUTFChars(env, jname, cname);
  return result;
}
示例#4
0
void PdBase::clearArray(const std::string& arrayName, int value) {

	int arrayLen = libpd_arraysize(arrayName.c_str());
	if(arrayLen < 0) {
		cerr << "Pd: Cannot clear unknown array \"" << arrayName << "\"" << endl;
		return;
	}
	
	std::vector<float> array;
	array.resize(arrayLen, value);
	
	if(libpd_write_array(arrayName.c_str(), 0, &array[0], arrayLen) < 0) {
		cerr << "Pd: libpd_write_array failed while clearing array \""
             << arrayName << "\"" << endl;
	}
}
示例#5
0
文件: PdBase.cpp 项目: EQ4/PdPulpito
bool PdBase::readArray(const std::string& arrayName, std::vector<float>& dest, int readLen, int offset) {

    _LOCK();
    int arrayLen = libpd_arraysize(arrayName.c_str());
    _UNLOCK();
    if(arrayLen < 0) {
        cerr << "Pd: Cannot read unknown array \"" << arrayName << "\"" << endl;
        return false;
    }

    // full array len?
    if(readLen < 0) {
        readLen = arrayLen;
    }
    // check read len
    else if(readLen > arrayLen) {
        cerr << "Pd: Given read len " << readLen << " > len "
             << arrayLen << " of array \"" << arrayName << "\"" << endl;
        return false;
    }

    // check offset
    if(offset+readLen > arrayLen) {
        cerr << "Pd: Given read len and offset > len " << readLen
             << " of array \"" << arrayName << "\"" << endl;
        return false;
    }

    // resize if necessary
    if(dest.size() != readLen) {
        dest.resize(readLen, 0);
    }

    _LOCK();
    if(libpd_read_array(&dest[0], arrayName.c_str(), offset, readLen) < 0) {
        cerr << "Pd: libpd_read_array failed for array \""
             << arrayName << "\"" << endl;
        _UNLOCK();
        return false;
    }
    _UNLOCK();
    return true;
}