Openlayers WebGLTile Style Geotiff Palette Interpretation - geotiff

I am attempting to try and get the style of a plotted Geotiff in an Openlayers map to display with the correct color instead of it displaying as black and white. The Geotiff only has 1 color band of the following (taken from gdal using the -json output option):
"bands": [
{
"band": 1,
"block": [
14669,
17
],
"type": "Byte",
"colorInterpretation": "Palette",
"metadata": {
},
"colorTable": {
"palette": "RGB",
"count": 256,
"entries": [
[
0,
0,
0,
255
],
[
255,
255,
255,
255
],
[
255,
250,
192,
255
],
[
168,
224,
250,
255
],
[
149,
173,
184,
255
],
[
152,
56,
57,
255
],
[
184,
88,
89,
255
],
[
174,
115,
120,
255
],
[
168,
40,
56,
255
],
[
168,
56,
74,
255
],
[
205,
177,
181,
255
],
[
162,
72,
88,
255
],
[
216,
136,
152,
255
],
[
193,
136,
152,
255
],
[
167,
80,
112,
255
],
[
136,
74,
102,
255
],
[
152,
57,
104,
255
],
[
175,
111,
144,
255
],
[
152,
92,
134,
255
],
[
199,
152,
185,
255
],
[
168,
88,
148,
255
],
[
183,
139,
172,
255
],
[
152,
72,
135,
255
],
[
122,
104,
120,
255
],
[
136,
88,
135,
255
],
[
152,
72,
152,
255
],
[
152,
88,
152,
255
],
[
168,
118,
168,
255
],
[
56,
40,
56,
255
],
[
72,
56,
72,
255
],
[
88,
72,
88,
255
],
[
232,
213,
232,
255
],
[
248,
232,
248,
255
],
[
119,
88,
120,
255
],
[
144,
108,
149,
255
],
[
136,
72,
152,
255
],
[
151,
88,
168,
255
],
[
170,
118,
184,
255
],
[
200,
174,
208,
255
],
[
136,
88,
152,
255
],
[
152,
113,
172,
255
],
[
154,
136,
166,
255
],
[
113,
100,
140,
255
],
[
109,
88,
165,
255
],
[
215,
214,
224,
255
],
[
152,
150,
191,
255
],
[
8,
8,
24,
255
],
[
88,
88,
168,
255
],
[
24,
24,
40,
255
],
[
113,
113,
175,
255
],
[
40,
40,
56,
255
],
[
56,
56,
72,
255
],
[
72,
72,
88,
255
],
[
104,
104,
120,
255
],
[
232,
232,
248,
255
],
[
87,
107,
169,
255
],
[
115,
121,
136,
255
],
[
80,
88,
104,
255
],
[
124,
136,
152,
255
],
[
160,
183,
209,
255
],
[
152,
168,
184,
255
],
[
71,
140,
195,
255
],
[
132,
167,
187,
255
],
[
26,
133,
188,
255
],
[
168,
210,
232,
255
],
[
8,
152,
216,
255
],
[
107,
203,
248,
255
],
[
143,
216,
248,
255
],
[
8,
168,
232,
255
],
[
79,
200,
248,
255
],
[
86,
164,
198,
255
],
[
185,
218,
232,
255
],
[
135,
158,
168,
255
],
[
8,
184,
248,
255
],
[
57,
128,
153,
255
],
[
48,
197,
248,
255
],
[
184,
232,
248,
255
],
[
8,
184,
232,
255
],
[
8,
152,
194,
255
],
[
24,
198,
248,
255
],
[
33,
143,
174,
255
],
[
46,
169,
203,
255
],
[
96,
155,
171,
255
],
[
80,
128,
142,
255
],
[
9,
171,
212,
255
],
[
25,
184,
221,
255
],
[
168,
232,
248,
255
],
[
119,
200,
216,
255
],
[
152,
232,
248,
255
],
[
210,
237,
243,
255
],
[
27,
200,
232,
255
],
[
86,
104,
107,
255
],
[
56,
199,
216,
255
],
[
78,
200,
216,
255
],
[
171,
213,
216,
255
],
[
121,
193,
196,
255
],
[
146,
214,
216,
255
],
[
11,
176,
176,
255
],
[
40,
56,
56,
255
],
[
168,
232,
232,
255
],
[
56,
72,
72,
255
],
[
145,
184,
184,
255
],
[
72,
88,
88,
255
],
[
131,
152,
152,
255
],
[
152,
168,
168,
255
],
[
232,
248,
248,
255
],
[
134,
136,
136,
255
],
[
103,
121,
120,
255
],
[
14,
175,
146,
255
],
[
40,
184,
120,
255
],
[
64,
167,
121,
255
],
[
146,
184,
167,
255
],
[
108,
199,
155,
255
],
[
57,
184,
120,
255
],
[
146,
211,
175,
255
],
[
204,
231,
216,
255
],
[
84,
161,
110,
255
],
[
184,
231,
200,
255
],
[
176,
207,
186,
255
],
[
95,
126,
104,
255
],
[
97,
184,
120,
255
],
[
120,
190,
136,
255
],
[
115,
162,
123,
255
],
[
56,
72,
56,
255
],
[
72,
88,
72,
255
],
[
88,
104,
88,
255
],
[
200,
232,
200,
255
],
[
232,
248,
232,
255
],
[
144,
200,
143,
255
],
[
146,
171,
142,
255
],
[
105,
149,
91,
255
],
[
168,
216,
152,
255
],
[
136,
156,
127,
255
],
[
168,
200,
152,
255
],
[
200,
232,
184,
255
],
[
164,
184,
152,
255
],
[
184,
216,
152,
255
],
[
200,
232,
168,
255
],
[
200,
216,
184,
255
],
[
216,
232,
200,
255
],
[
232,
248,
216,
255
],
[
168,
192,
136,
255
],
[
184,
200,
152,
255
],
[
200,
216,
168,
255
],
[
216,
232,
184,
255
],
[
232,
248,
200,
255
],
[
216,
232,
168,
255
],
[
232,
248,
184,
255
],
[
126,
138,
85,
255
],
[
161,
173,
118,
255
],
[
189,
200,
136,
255
],
[
56,
56,
40,
255
],
[
232,
232,
168,
255
],
[
208,
208,
152,
255
],
[
248,
248,
184,
255
],
[
216,
216,
168,
255
],
[
72,
72,
56,
255
],
[
232,
232,
184,
255
],
[
248,
248,
200,
255
],
[
168,
168,
136,
255
],
[
88,
88,
72,
255
],
[
184,
184,
152,
255
],
[
200,
200,
168,
255
],
[
104,
104,
88,
255
],
[
216,
216,
184,
255
],
[
232,
232,
200,
255
],
[
120,
120,
104,
255
],
[
248,
248,
216,
255
],
[
136,
136,
120,
255
],
[
152,
152,
136,
255
],
[
168,
168,
152,
255
],
[
200,
200,
184,
255
],
[
248,
248,
232,
255
],
[
185,
184,
127,
255
],
[
248,
232,
168,
255
],
[
232,
216,
168,
255
],
[
248,
232,
184,
255
],
[
184,
168,
131,
255
],
[
163,
141,
97,
255
],
[
120,
104,
72,
255
],
[
232,
216,
184,
255
],
[
248,
232,
200,
255
],
[
215,
184,
136,
255
],
[
232,
200,
152,
255
],
[
248,
216,
168,
255
],
[
194,
152,
104,
255
],
[
152,
104,
56,
255
],
[
168,
120,
72,
255
],
[
216,
168,
120,
255
],
[
232,
184,
136,
255
],
[
232,
200,
168,
255
],
[
120,
104,
88,
255
],
[
248,
216,
184,
255
],
[
184,
168,
152,
255
],
[
216,
200,
184,
255
],
[
144,
110,
79,
255
],
[
184,
120,
72,
255
],
[
199,
136,
88,
255
],
[
216,
152,
104,
255
],
[
193,
152,
120,
255
],
[
216,
187,
168,
255
],
[
232,
222,
216,
255
],
[
168,
104,
72,
255
],
[
180,
120,
88,
255
],
[
200,
136,
104,
255
],
[
216,
152,
120,
255
],
[
144,
120,
107,
255
],
[
232,
200,
184,
255
],
[
114,
88,
76,
255
],
[
168,
88,
56,
255
],
[
184,
104,
72,
255
],
[
159,
137,
128,
255
],
[
200,
120,
90,
255
],
[
200,
154,
136,
255
],
[
184,
88,
56,
255
],
[
177,
151,
143,
255
],
[
179,
120,
104,
255
],
[
168,
104,
89,
255
],
[
200,
136,
120,
255
],
[
216,
152,
136,
255
],
[
152,
74,
56,
255
],
[
168,
88,
72,
255
],
[
184,
104,
88,
255
],
[
139,
84,
73,
255
],
[
216,
165,
154,
255
],
[
168,
72,
56,
255
],
[
184,
88,
72,
255
],
[
184,
72,
56,
255
],
[
232,
203,
200,
255
],
[
248,
219,
216,
255
],
[
200,
160,
159,
255
],
[
168,
56,
56,
255
],
[
184,
72,
72,
255
],
[
159,
72,
72,
255
],
[
164,
88,
88,
255
],
[
195,
136,
136,
255
],
[
56,
40,
40,
255
],
[
93,
72,
72,
255
],
[
72,
56,
56,
255
],
[
232,
184,
183,
255
],
[
121,
104,
104,
255
],
[
248,
232,
232,
255
],
[
177,
176,
176,
255
],
[
248,
248,
248,
255
],
[
232,
232,
232,
255
],
[
200,
200,
200,
255
],
[
152,
152,
152,
255
],
[
120,
120,
120,
255
],
[
104,
104,
104,
255
],
[
88,
88,
88,
255
],
[
72,
72,
72,
255
],
[
56,
56,
56,
255
],
[
40,
40,
40,
255
],
[
24,
24,
24,
255
],
[
8,
8,
8,
255
],
[
255,
255,
255,
255
]
]
}
}
]
Normally this isn't an issue as many of the Geotiff with have separate bands for their colors, however some show up like the following. So I'm wondering what kind of style object I need to use in order to get the display to use the correct colors.

Related

Laravel Eloquent: Apply "with where" filter on primary statement

Issue:
I am using eloquent to pull students from a database where they have specific status and registration date values. They must also only be shown if sub-table data as specific column data as well.
The issue is that Laravel is breaking it up into multiple queries and the "with" (eager loading) tables are only getting filtered after the fact.
In other words, instead of (pseudo sql):
SELECT all students WHERE
status IN (1,4,6,7)
AND (YEAR(registration_date)<=2020 OR YEAR(registration_date) IS NULL)
AND YEAR(commencement_date)>=2020
AND (YEAR(completion_date)>=2020 OR YEAR(estimated_completion_date)>=2020)
Its pushing out 4 separate sql statements (refer to 'resulting SQL' below) where its only applying the status / registration_date filter on students, and separately the other filters down the line which causes the actual row results to be incorrect (displaying more than they should).
I would just use DB::table / DB:raw - but then on the blade end of things, I cant pull sub-child data because its no longer in a hierarchal structure.
Code:
DB::enableQueryLog();
$students = $bursary_administrator->students()->whereIn('status',[1,4,6,7])
->whereHas('bursaries', function($query) use ($request) {
$query->whereYear('registration_date','<=',$request->year)
->orWhereNull('registration_date');
})
->with(['bursaries','bursaries.enrolments','bursaries.enrolments.courses' => function($query) use ($request) {
$query->whereYear('commencement_date', '<=', $request->year)
->where(function ($query) use ($request){
$query->whereYear('completion_date', '>=', $request->year)
->whereYear('estimated_completion_date', '>=', $request->year,'or');
});
}])
->orderBy('student_name')->orderBy('student_middle_names')->orderBy('student_surname')->get();
Log::debug(DB::getQueryLog());
Resulting SQL:
local.DEBUG: array (
0 =>
array (
'query' => 'select `students`.*, `bursary_administrator_student`.`bursary_administrator_id` as `pivot_bursary_administrator_id`, `bursary_administrator_student`.`student_id` as `pivot_student_id`, `bursary_administrator_student`.`created_at` as `pivot_created_at`, `bursary_administrator_student`.`updated_at` as `pivot_updated_at` from `students` inner join `bursary_administrator_student` on `students`.`id` = `bursary_administrator_student`.`student_id` where `bursary_administrator_student`.`bursary_administrator_id` = ? and `status` in (?, ?, ?, ?) and exists (select * from `student_bursaries` where `students`.`id` = `student_bursaries`.`student_id` and (year(`registration_date`) <= ? or `registration_date` is null)) order by `student_name` asc, `student_middle_names` asc, `student_surname` asc',
'bindings' =>
array (
0 => 1,
1 => 1,
2 => 4,
3 => 6,
4 => 7,
5 => '2020',
),
'time' => 6.69,
),
1 =>
array (
'query' => 'select * from `student_bursaries` where `student_bursaries`.`student_id` in (1, 3, 14, 20, 24, 25, 29, 41, 42, 44, 49, 51, 53, 55, 56, 62, 64, 65, 72, 75, 76, 80, 81, 85, 94, 98, 100, 106, 111, 112, 133, 138, 139, 141, 156, 157, 169, 170, 180, 199, 203, 210, 213, 214, 217, 219, 221, 224, 225, 226, 227, 228, 229, 231, 232, 233, 234, 235, 237, 238, 239, 240, 242, 243, 246, 249, 251, 252, 253, 254, 255, 256, 257, 258, 260, 261, 262, 263, 265, 267, 268, 269, 270, 271, 273, 274, 275, 276, 277, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 297, 299, 300, 302, 303, 304, 305, 306, 307, 308, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 333, 334, 335, 336, 337, 338, 339, 340, 341, 343, 344, 345, 346, 347, 348, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364)',
'bindings' =>
array (
),
'time' => 2.41,
),
2 =>
array (
'query' => 'select * from `student_bursary_enrolments` where `student_bursary_enrolments`.`student_bursary_id` in (1, 3, 14, 20, 24, 25, 29, 41, 42, 44, 49, 51, 53, 55, 56, 62, 64, 65, 72, 75, 76, 80, 81, 85, 94, 98, 100, 106, 111, 112, 133, 138, 139, 141, 156, 157, 169, 170, 180, 199, 203, 210, 213, 214, 217, 219, 221, 224, 225, 226, 227, 228, 229, 231, 232, 233, 234, 235, 237, 238, 239, 240, 242, 243, 246, 249, 251, 252, 253, 254, 255, 256, 257, 258, 260, 261, 262, 263, 265, 267, 268, 269, 270, 271, 273, 274, 275, 276, 277, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 297, 299, 300, 302, 303, 304, 305, 306, 307, 308, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 333, 334, 335, 336, 337, 338, 339, 340, 341, 343, 344, 345, 346, 347, 348, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364)',
'bindings' =>
array (
),
'time' => 2.41,
),
3 =>
array (
'query' => 'select * from `student_bursary_enrolment_courses` where `student_bursary_enrolment_courses`.`student_bursary_enrolment_id` in (1, 3, 12, 18, 19, 21, 22, 27, 28, 38, 39, 40, 41, 42, 43, 48, 50, 52, 53, 55, 56, 57, 64, 65, 66, 67, 72, 75, 76, 77, 81, 82, 85, 93, 96, 98, 99, 104, 110, 111, 130, 134, 135, 136, 138, 152, 153, 154, 164, 165, 175, 180, 181, 187, 193, 194, 195, 196, 200, 201, 202, 203, 204, 205, 206, 209, 210, 211, 212, 213, 214, 215, 216, 219, 220, 221, 222, 223, 224, 225, 226, 227, 230, 231, 232, 233, 234, 235, 238, 239, 240, 241, 242, 247, 248, 252, 253, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 273, 274, 275, 276, 277, 278, 279, 280, 283, 284, 285, 286, 287, 288, 289, 290, 292, 293, 294, 295, 296, 297, 298, 299, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 331, 332, 333, 334, 335, 336, 337, 338, 339, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 371, 372, 373, 374, 375, 376, 377, 378, 379, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 409, 411, 413, 414, 415, 417, 418, 419, 424, 429, 431, 432, 433, 436, 442, 443, 445, 447, 448, 450, 452, 453, 456, 457, 466, 467, 468, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485) and year(`commencement_date`) <= ? and (year(`completion_date`) >= ? or year(`estimated_completion_date`) >= ?)',
'bindings' =>
array (
0 => '2020',
1 => '2020',
2 => '2020',
),
'time' => 2.85,
),
)
Blade / View:
<tbody>
#if ($students)
#php($row_count=0)
#foreach ($students as $student)
#php($row_count++)
<tr>
<td>{{$row_count}}</td>
<td>{{$student->student_name .' '. $student->student_middle_names .' '. $student->student_surname}}</td>
<td colspan="4">
#if ($student->bursaries)
<table class="subtable">
#foreach ($student->bursaries as $bursary)
#if ($bursary->enrolments)
#foreach ($bursary->enrolments as $enrolment)
#if ($enrolment->courses)
#foreach ($enrolment->courses as $course)
<tr>
<td>{{$enrolment->academic_institution->academic_institution .' - '. $course->course}}</td>
<td class="f114">{{__($course->current_year)}}</td>
</tr>
#endforeach
#else
<tr><td>Error: No courses</td></tr>
#endif
#endforeach
#else
<tr><td>Error: No enrolments</td></tr>
#endif
#endforeach
</table>
#else
Error: No bursaries
#endif
</td>
</tr>
#endforeach
#endif
</tbody>

Class exists but it still can't find class in while running laravel migration

This is the migration code but it gives this error
( Class 'Modules\RolePermission\Entities\InfixPermissionAssign' not found )
I have checked the names everything is right and the path is also correct appreciate your help.
I have copied this code from another project it was working there. Everything is same here too but still it doesn't work here.
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
use Modules\RolePermission\Entities\InfixModuleInfo;
use Modules\RolePermission\Entities\InfixModuleStudentParentInfo;
use Modules\RolePermission\Entities\InfixPermissionAssign;
class CreateInfixPermissionAssignsTable extends Migration
{
/**
* Run the migrations.
*
* #return void
*/
public function up()
{
Schema::create('infix_permission_assigns', function (Blueprint $table) {
$table->increments('id');
$table->tinyInteger('active_status')->default(1);
$table->timestamps();
$table->integer('module_id')->nullable()->comment(' module id, module link id, module link options id');
$table->string('module_info')->nullable();
$table->integer('role_id')->nullable()->unsigned();
$table->foreign('role_id')->references('id')->on('infix_roles')->onDelete('cascade');
$table->text('saas_schools')->nullable();
$table->integer('created_by')->nullable()->default(1)->unsigned();
$table->integer('updated_by')->nullable()->default(1)->unsigned();
$table->integer('school_id')->nullable()->default(1)->unsigned();
$table->foreign('school_id')->references('id')->on('sm_schools')->onDelete('cascade');
});
// for admin
$admins = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 79, 80, 81, 82, 83, 84, 85, 86, 533, 534, 535, 536, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 214, 215, 216, 217, 218, 219, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 537, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 538, 539, 540, 485, 486, 487, 488, 489, 490, 491, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570];
foreach ($admins as $key => $value) {
$permission = new Modules\RolePermission\Entities\InfixPermissionAssign();
$permission->module_id = $value;
$permission->module_info = InfixModuleInfo::find($value)->name;
$permission->role_id = 5;
$permission->save();
}
// for teacher
$teachers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 79, 80, 81, 82, 83, 84, 85, 86, 533, 534, 535, 536, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 214, 215, 216, 217, 218, 219, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 537, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 277, 278, 279, 280, 281, 282, 283, 284, 285, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567];
foreach ($teachers as $key => $value) {
$permission = new InfixPermissionAssign();
$permission->module_id = $value;
$permission->module_info = InfixModuleInfo::find($value)->name;
$permission->role_id = 4;
$permission->save();
}
// for receiptionists
$receiptionists = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 64, 65, 66, 67, 83, 84, 85, 86, 160, 161, 162, 163, 164, 188, 193, 194, 195, 376, 377, 378, 379, 380, 553, 554, 560, 564];
foreach ($receiptionists as $key => $value) {
$permission = new InfixPermissionAssign();
$permission->module_id = $value;
$permission->module_info = InfixModuleInfo::find($value)->name;
$permission->role_id = 7;
$permission->save();
}
// for librarians
$librarians = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 61, 64, 65, 66, 67, 83, 84, 85, 86, 160, 161, 162, 163, 164, 188, 193, 194, 195, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 376, 377, 378, 379, 380, 553, 554, 560, 564];
foreach ($librarians as $key => $value) {
$permission = new InfixPermissionAssign();
$permission->module_id = $value;
$permission->module_info = InfixModuleInfo::find($value)->name;
$permission->role_id = 8;
$permission->save();
}
// for drivers
$drivers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 188, 193, 194, 19, 553, 554, 560, 564];
foreach ($drivers as $key => $value) {
$permission = new InfixPermissionAssign();
$permission->module_id = $value;
$permission->module_info = InfixModuleInfo::find($value)->name;
$permission->role_id = 9;
$permission->save();
}
// for accountants
$accountants = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 64, 65, 66, 67, 68, 69, 70, 83, 84, 85, 86, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 188, 193, 194, 195, 376, 377, 378, 379, 380, 381, 382, 383, 553, 554, 560, 564];
foreach ($accountants as $key => $value) {
$permission = new InfixPermissionAssign();
$permission->module_id = $value;
$permission->module_info = InfixModuleInfo::find($value)->name;
$permission->role_id = 6;
$permission->save();
}
// student
for ($j = 1; $j <= 55; $j++) {
$permission = new InfixPermissionAssign();
$permission->module_id = $j;
$permission->module_info = InfixModuleInfo::find($value)->name;
$permission->role_id = 2;
$permission->save();
}
$students = [554, 555, 559, 564];
foreach ($students as $key => $value) {
$permission = new InfixPermissionAssign();
$permission->module_id = $value;
$permission->module_info = InfixModuleInfo::find($value)->name;
$permission->role_id = 2;
$permission->save();
}
// parent
for ($j = 56; $j <= 96; $j++) {
$permission = new InfixPermissionAssign();
$permission->module_id = $j;
$permission->module_info = InfixModuleInfo::find($value)->name;
$permission->role_id = 3;
$permission->save();
}
$students = [554, 555, 560, 559, 564];
foreach ($students as $key => $value) {
$permission = new InfixPermissionAssign();
$permission->module_id = $value;
$permission->module_info = InfixModuleInfo::find($value)->name;
$permission->role_id = 3;
$permission->save();
}
}
/**
* Reverse the migrations.
*
* #return void
*/
public function down()
{
Schema::dropIfExists('infix_permission_assigns');
}
}
Have you checked the namespace and the permission of the file? Make sure the namespace and permission and owner of the file is correct. In my cases, sometimes both of those problem were the one when everything just 'seems' to be in order.

how to play streaming mp3 messages (uint8 bytes) generated by ROS audio_capture in html WebAudio Api

I am trying to play streaming mp3 messages (uint8 bytes) generated by ROS audio_capture in html using WebAudio api.
The messages are generated by ROS audio_capture which publishes the mp3 as uint8 bytes. I am grabbing each message and trying to play it in the Web browser using web audio api.
Below is the sample mp3 message:
data: [255, 243, 152, 68, 193, 22, 185, 255, 114, 223, 97, 38, 124, 172, 27, 246, 218, 254, 194, 80, 189, 84, 180, 209, 56, 254, 114, 135, 214, 30, 151, 78, 75, 159, 104, 148, 93, 149, 152, 155, 66, 68, 77, 137, 197, 34, 132, 145, 8, 138, 163, 10, 159, 17, 160, 23, 78, 4, 43, 174, 73, 201, 40, 63, 17, 28, 209, 153, 70, 81, 180, 42, 180, 226, 199, 155, 79, 189, 189, 51, 135, 145, 183, 139, 206, 179, 81, 185, 55, 158, 158, 89, 168, 133, 27, 112, 101, 139, 143, 24, 73, 193, 5, 201, 195, 32, 81, 205, 100, 189, 224, 214, 122, 225, 61, 221, 74, 155, 134, 73, 229, 200, 24, 71, 83, 118, 86, 245, 166, 149, 53, 187, 113, 23, 17, 124, 43, 40, 232, 206, 60, 171, 168, 41, 158, 44, 112, 218, 54, 123, 29, 123, 163, 99, 79, 94, 174, 49, 242, 214, 50, 238, 153, 95, 57, 221, 223, 129, 247, 35, 157, 50, 77, 52, 69, 119, 110, 70, 44, 83, 84, 85, 141, 220, 190, 12, 85, 81, 24, 2, 122, 169, 36, 150, 238, 0, 232, 21, 230, 42, 96, 104, 226, 58, 78, 169, 244, 172, 228, 145, 76, 173, 170, 129, 62, 173, 50, 73, 91, 246, 17, 201, 6, 36, 101, 70, 69, 42, 146, 182, 124, 54, 11, 164, 78, 43, 44, 166, 188, 233, 96, 170, 171, 123, 66, 202, 107, 172, 152, 150, 143, 54, 68, 85, 70, 15, 3, 147, 69, 205, 25, 64, 210, 175, 185, 48, 165, 166, 94, 101, 85, 3, 36, 66, 99, 232, 153, 102, 196, 75, 152, 133, 79, 206, 202, 226, 158, 140, 158, 69, 221, 1, 70, 217, 193, 204, 138, 48, 138, 76, 127, 88, 211, 52, 173, 249, 85, 63, 201, 204, 210, 86, 42, 28, 135, 255, 187, 122, 220, 51, 27, 45, 238, 104, 73, 101, 165, 63, 190, 110, 102, 247, 66, 218, 251, 79, 131, 181, 44, 92, 167, 133, 160, 155, 228, 102, 119, 151, 159, 105, 85, 235, 145, 60, 252, 125, 120, 73, 211, 98]
Raw data received from audio source before base64 decoding mentioned below, let me know if its not a valid mp3 format.
//OYRM0VceN1L2EjfqzL/sJWwwydElS3xJYcJKpYaLXtfXvddaz6w5T+8w8/p6du6oWOCT6zoDp+zx9GnhKa8j0MGzMgZEs3bs5Z+x0InDcmNueXnI5J+eVwfp9emvuEZ2Oy2mNa7P3YYm+eK90yG6ktKsaInN/SpHvPlpxWo92+lBsUa9GHQagbEyziEbey/u8pi28oYYYW6B5mt0jZk1Ob7IFLsMIKSlOT3W2WXmcPS1Mhc0KIUiDkQ4IelkEbh6+OfQ/2llZ0karuqgLm5UZmFiYKwpE4wJMp0skT+cEmnaGUBIwvvpdXGyMCIEEEJAuQRTlJZtZoV0xGzMpG5tM+6ae6QKo5vTV2cmIBtiktmtOaqyQgxndQE/iCQQLCgpB8HVYUHBB0ldKDBBtGQKKkMKijjKVRoZIC/TYqVBS48IOBsoQsTiGpCygM3vbJNoZglxABBQerkwRDi7ipiISrDbitccaj
I am holding it in javascript array initially, then converting it to ArrayBuffer, then passing ArrayBuffer to decodeAudioData(), where i'm getting below error
Error in promise : Unable to decode Audio Data
Below is code:
function playByteArray(byteArray) {
var arrayBuffer = new ArrayBuffer(byteArray.length);
var bufferView = new Uint8Array(arrayBuffer);
for (i = 0; i < byteArray.length; i++) {
bufferView[i] = byteArray[i];
}
context.decodeAudioData(arrayBuffer, function(buffer) {
buf = buffer;
play();
});
}
// Play the loaded file
function play() {
// Create a source node from the buffer
var source = context.createBufferSource();
source.buffer = buf;
// Connect to the final output node (the speakers)
source.connect(context.destination);
// Play immediately
source.start(0);
}
Thanks in advance for help.
Your chunk of audio data probably isn't complete. In any case, you should consider using MediaSource Extensions for this task. That way, you can stream from the source and let the browser handle the rest.

A fast look up value in vectors MATLAB code comparion

I am using MATLAB to look up the value in two vectors OCT_EXP, OCT_LOG, from two input values u,v and output is val as condition
if (( u == 0 )||( v == 0 ))
val = 0;
else
val = OCT_EXP( OCT_LOG(u) + OCT_LOG(v) + 1);
I tried to use three ways: normal way (no_vectorized way), vectorized way, and mex way. I expected that mex way will be the best way, then vectorized way. However, when I measure time consumption, the first way (no vectorized way) is best, the vectorized way is worst way. What is happen in my code? Thank all
I want to consider the speed up of the function because it will be called many time: 300.000 times
The first way:
function val = gfmult_no_vec( u, v )
OCT_EXP = [ 1, 2, 4, 8, 16, 32, 64, 128, 29, 58, 116, 232, 205, 135, 19, 38,...
76, 152, 45, 90, 180, 117, 234, 201, 143, 3, 6, 12, 24, 48, 96, 192, 157,...
39, 78, 156, 37, 74, 148, 53, 106, 212, 181, 119, 238, 193, 159, 35,...
70, 140, 5, 10, 20, 40, 80, 160, 93, 186, 105, 210, 185, 111, 222,...
161, 95, 190, 97, 194, 153, 47, 94, 188, 101, 202, 137, 15, 30, 60,...
120, 240, 253, 231, 211, 187, 107, 214, 177, 127, 254, 225, 223, 163,...
91, 182, 113, 226, 217, 175, 67, 134, 17, 34, 68, 136, 13, 26, 52,...
104, 208, 189, 103, 206, 129, 31, 62, 124, 248, 237, 199, 147, 59,...
118, 236, 197, 151, 51, 102, 204, 133, 23, 46, 92, 184, 109, 218,...
169, 79, 158, 33, 66, 132, 21, 42, 84, 168, 77, 154, 41, 82, 164, 85,...
170, 73, 146, 57, 114, 228, 213, 183, 115, 230, 209, 191, 99, 198,...
145, 63, 126, 252, 229, 215, 179, 123, 246, 241, 255, 227, 219, 171,...
75, 150, 49, 98, 196, 149, 55, 110, 220, 165, 87, 174, 65, 130, 25,...
50, 100, 200, 141, 7, 14, 28, 56, 112, 224, 221, 167, 83, 166, 81,...
162, 89, 178, 121, 242, 249, 239, 195, 155, 43, 86, 172, 69, 138, 9,...
18, 36, 72, 144, 61, 122, 244, 245, 247, 243, 251, 235, 203, 139, 11,...
22, 44, 88, 176, 125, 250, 233, 207, 131, 27, 54, 108, 216, 173, 71,...
142, 1, 2, 4, 8, 16, 32, 64, 128, 29, 58, 116, 232, 205, 135, 19, 38,...
76, 152, 45, 90, 180, 117, 234, 201, 143, 3, 6, 12, 24, 48, 96, 192,...
157, 39, 78, 156, 37, 74, 148, 53, 106, 212, 181, 119, 238, 193, 159,...
35, 70, 140, 5, 10, 20, 40, 80, 160, 93, 186, 105, 210, 185, 111,...
222, 161, 95, 190, 97, 194, 153, 47, 94, 188, 101, 202, 137, 15, 30,...
60, 120, 240, 253, 231, 211, 187, 107, 214, 177, 127, 254, 225, 223,...
163, 91, 182, 113, 226, 217, 175, 67, 134, 17, 34, 68, 136, 13, 26,...
52, 104, 208, 189, 103, 206, 129, 31, 62, 124, 248, 237, 199, 147,...
59, 118, 236, 197, 151, 51, 102, 204, 133, 23, 46, 92, 184, 109, 218,...
169, 79, 158, 33, 66, 132, 21, 42, 84, 168, 77, 154, 41, 82, 164, 85,...
170, 73, 146, 57, 114, 228, 213, 183, 115, 230, 209, 191, 99, 198,...
145, 63, 126, 252, 229, 215, 179, 123, 246, 241, 255, 227, 219, 171,...
75, 150, 49, 98, 196, 149, 55, 110, 220, 165, 87, 174, 65, 130, 25,...
50, 100, 200, 141, 7, 14, 28, 56, 112, 224, 221, 167, 83, 166, 81,...
162, 89, 178, 121, 242, 249, 239, 195, 155, 43, 86, 172, 69, 138, 9,...
18, 36, 72, 144, 61, 122, 244, 245, 247, 243, 251, 235, 203, 139, 11,...
22, 44, 88, 176, 125, 250, 233, 207, 131, 27, 54, 108, 216, 173, 71,...
142 ];
OCT_LOG = [ 0, 1, 25, 2, 50, 26, 198, 3, 223, 51, 238, 27, 104, 199, 75, 4,...
100, 224, 14, 52, 141, 239, 129, 28, 193, 105, 248, 200, 8, 76, 113, 5,...
138, 101, 47, 225, 36, 15, 33, 53, 147, 142, 218, 240, 18, 130, 69,...
29, 181, 194, 125, 106, 39, 249, 185, 201, 154, 9, 120, 77, 228, 114,... end
166, 6, 191, 139, 98, 102, 221, 48, 253, 226, 152, 37, 179, 16, 145,...
34, 136, 54, 208, 148, 206, 143, 150, 219, 189, 241, 210, 19, 92,...
131, 56, 70, 64, 30, 66, 182, 163, 195, 72, 126, 110, 107, 58, 40,...
84, 250, 133, 186, 61, 202, 94, 155, 159, 10, 21, 121, 43, 78, 212,...
229, 172, 115, 243, 167, 87, 7, 112, 192, 247, 140, 128, 99, 13, 103,...
74, 222, 237, 49, 197, 254, 24, 227, 165, 153, 119, 38, 184, 180,...
124, 17, 68, 146, 217, 35, 32, 137, 46, 55, 63, 209, 91, 149, 188,...
207, 205, 144, 135, 151, 178, 220, 252, 190, 97, 242, 86, 211, 171,...
20, 42, 93, 158, 132, 60, 57, 83, 71, 109, 65, 162, 31, 45, 67, 216,...
183, 123, 164, 118, 196, 23, 73, 236, 127, 12, 111, 246, 108, 161,...
59, 82, 41, 157, 85, 170, 251, 96, 134, 177, 187, 204, 62, 90, 203,...
89, 95, 176, 156, 169, 160, 81, 11, 245, 22, 235, 122, 117, 44, 215,...
79, 174, 213, 233, 230, 231, 173, 232, 116, 214, 244, 234, 168, 80,...
88, 175 ];
if (( u == 0 )||( v == 0 ))
val = 0;
else
val = OCT_EXP( OCT_LOG(u) + OCT_LOG(v) + 1);
The second way: Vectorized way
function val = gfmult_vec( u, v )
OCT_EXP = [ 1, 2, 4, 8, 16, 32, 64, 128, 29, 58, 116, 232, 205, 135, 19, 38,...
76, 152, 45, 90, 180, 117, 234, 201, 143, 3, 6, 12, 24, 48, 96, 192, 157,...
39, 78, 156, 37, 74, 148, 53, 106, 212, 181, 119, 238, 193, 159, 35,...
70, 140, 5, 10, 20, 40, 80, 160, 93, 186, 105, 210, 185, 111, 222,...
161, 95, 190, 97, 194, 153, 47, 94, 188, 101, 202, 137, 15, 30, 60,...
120, 240, 253, 231, 211, 187, 107, 214, 177, 127, 254, 225, 223, 163,...
91, 182, 113, 226, 217, 175, 67, 134, 17, 34, 68, 136, 13, 26, 52,...
104, 208, 189, 103, 206, 129, 31, 62, 124, 248, 237, 199, 147, 59,...
118, 236, 197, 151, 51, 102, 204, 133, 23, 46, 92, 184, 109, 218,...
169, 79, 158, 33, 66, 132, 21, 42, 84, 168, 77, 154, 41, 82, 164, 85,...
170, 73, 146, 57, 114, 228, 213, 183, 115, 230, 209, 191, 99, 198,...
145, 63, 126, 252, 229, 215, 179, 123, 246, 241, 255, 227, 219, 171,...
75, 150, 49, 98, 196, 149, 55, 110, 220, 165, 87, 174, 65, 130, 25,...
50, 100, 200, 141, 7, 14, 28, 56, 112, 224, 221, 167, 83, 166, 81,...
162, 89, 178, 121, 242, 249, 239, 195, 155, 43, 86, 172, 69, 138, 9,...
18, 36, 72, 144, 61, 122, 244, 245, 247, 243, 251, 235, 203, 139, 11,...
22, 44, 88, 176, 125, 250, 233, 207, 131, 27, 54, 108, 216, 173, 71,...
142, 1, 2, 4, 8, 16, 32, 64, 128, 29, 58, 116, 232, 205, 135, 19, 38,...
76, 152, 45, 90, 180, 117, 234, 201, 143, 3, 6, 12, 24, 48, 96, 192,...
157, 39, 78, 156, 37, 74, 148, 53, 106, 212, 181, 119, 238, 193, 159,...
35, 70, 140, 5, 10, 20, 40, 80, 160, 93, 186, 105, 210, 185, 111,...
222, 161, 95, 190, 97, 194, 153, 47, 94, 188, 101, 202, 137, 15, 30,...
60, 120, 240, 253, 231, 211, 187, 107, 214, 177, 127, 254, 225, 223,...
163, 91, 182, 113, 226, 217, 175, 67, 134, 17, 34, 68, 136, 13, 26,...
52, 104, 208, 189, 103, 206, 129, 31, 62, 124, 248, 237, 199, 147,...
59, 118, 236, 197, 151, 51, 102, 204, 133, 23, 46, 92, 184, 109, 218,...
169, 79, 158, 33, 66, 132, 21, 42, 84, 168, 77, 154, 41, 82, 164, 85,...
170, 73, 146, 57, 114, 228, 213, 183, 115, 230, 209, 191, 99, 198,...
145, 63, 126, 252, 229, 215, 179, 123, 246, 241, 255, 227, 219, 171,...
75, 150, 49, 98, 196, 149, 55, 110, 220, 165, 87, 174, 65, 130, 25,...
50, 100, 200, 141, 7, 14, 28, 56, 112, 224, 221, 167, 83, 166, 81,...
162, 89, 178, 121, 242, 249, 239, 195, 155, 43, 86, 172, 69, 138, 9,...
18, 36, 72, 144, 61, 122, 244, 245, 247, 243, 251, 235, 203, 139, 11,...
22, 44, 88, 176, 125, 250, 233, 207, 131, 27, 54, 108, 216, 173, 71,...
142 ];
OCT_LOG = [ 0, 1, 25, 2, 50, 26, 198, 3, 223, 51, 238, 27, 104, 199, 75, 4,...
100, 224, 14, 52, 141, 239, 129, 28, 193, 105, 248, 200, 8, 76, 113, 5,...
138, 101, 47, 225, 36, 15, 33, 53, 147, 142, 218, 240, 18, 130, 69,...
29, 181, 194, 125, 106, 39, 249, 185, 201, 154, 9, 120, 77, 228, 114,...
166, 6, 191, 139, 98, 102, 221, 48, 253, 226, 152, 37, 179, 16, 145,...
34, 136, 54, 208, 148, 206, 143, 150, 219, 189, 241, 210, 19, 92,...
131, 56, 70, 64, 30, 66, 182, 163, 195, 72, 126, 110, 107, 58, 40,...
84, 250, 133, 186, 61, 202, 94, 155, 159, 10, 21, 121, 43, 78, 212,...
229, 172, 115, 243, 167, 87, 7, 112, 192, 247, 140, 128, 99, 13, 103,...
74, 222, 237, 49, 197, 254, 24, 227, 165, 153, 119, 38, 184, 180,...
124, 17, 68, 146, 217, 35, 32, 137, 46, 55, 63, 209, 91, 149, 188,...
207, 205, 144, 135, 151, 178, 220, 252, 190, 97, 242, 86, 211, 171,...
20, 42, 93, 158, 132, 60, 57, 83, 71, 109, 65, 162, 31, 45, 67, 216,...
183, 123, 164, 118, 196, 23, 73, 236, 127, 12, 111, 246, 108, 161,...
59, 82, 41, 157, 85, 170, 251, 96, 134, 177, 187, 204, 62, 90, 203,...
89, 95, 176, 156, 169, 160, 81, 11, 245, 22, 235, 122, 117, 44, 215,...
79, 174, 213, 233, 230, 231, 173, 232, 116, 214, 244, 234, 168, 80,...
88, 175 ];
uv0 = (~(( u == 0 )|( v == 0 )));
val = zeros(size(u));
val(uv0) = OCT_EXP( OCT_LOG(u(uv0)) + OCT_LOG(v(uv0)) + 1);
end
The last way: mex code
#include "mex.h"
double look_up(double u, double v)
{
double OCT_EXP [510] = { 1, 2, 4, 8, 16, 32, 64, 128, 29, 58, 116, 232, 205, 135, 19, 38,
76, 152, 45, 90, 180, 117, 234, 201, 143, 3, 6, 12, 24, 48, 96, 192, 157,
39, 78, 156, 37, 74, 148, 53, 106, 212, 181, 119, 238, 193, 159, 35,
70, 140, 5, 10, 20, 40, 80, 160, 93, 186, 105, 210, 185, 111, 222,
161, 95, 190, 97, 194, 153, 47, 94, 188, 101, 202, 137, 15, 30, 60,
120, 240, 253, 231, 211, 187, 107, 214, 177, 127, 254, 225, 223, 163,
91, 182, 113, 226, 217, 175, 67, 134, 17, 34, 68, 136, 13, 26, 52,
104, 208, 189, 103, 206, 129, 31, 62, 124, 248, 237, 199, 147, 59,
118, 236, 197, 151, 51, 102, 204, 133, 23, 46, 92, 184, 109, 218,
169, 79, 158, 33, 66, 132, 21, 42, 84, 168, 77, 154, 41, 82, 164, 85,
170, 73, 146, 57, 114, 228, 213, 183, 115, 230, 209, 191, 99, 198,
145, 63, 126, 252, 229, 215, 179, 123, 246, 241, 255, 227, 219, 171,
75, 150, 49, 98, 196, 149, 55, 110, 220, 165, 87, 174, 65, 130, 25,
50, 100, 200, 141, 7, 14, 28, 56, 112, 224, 221, 167, 83, 166, 81,
162, 89, 178, 121, 242, 249, 239, 195, 155, 43, 86, 172, 69, 138, 9,
18, 36, 72, 144, 61, 122, 244, 245, 247, 243, 251, 235, 203, 139, 11,
22, 44, 88, 176, 125, 250, 233, 207, 131, 27, 54, 108, 216, 173, 71,
142, 1, 2, 4, 8, 16, 32, 64, 128, 29, 58, 116, 232, 205, 135, 19, 38,
76, 152, 45, 90, 180, 117, 234, 201, 143, 3, 6, 12, 24, 48, 96, 192,
157, 39, 78, 156, 37, 74, 148, 53, 106, 212, 181, 119, 238, 193, 159,
35, 70, 140, 5, 10, 20, 40, 80, 160, 93, 186, 105, 210, 185, 111,
222, 161, 95, 190, 97, 194, 153, 47, 94, 188, 101, 202, 137, 15, 30,
60, 120, 240, 253, 231, 211, 187, 107, 214, 177, 127, 254, 225, 223,
163, 91, 182, 113, 226, 217, 175, 67, 134, 17, 34, 68, 136, 13, 26,
52, 104, 208, 189, 103, 206, 129, 31, 62, 124, 248, 237, 199, 147,
59, 118, 236, 197, 151, 51, 102, 204, 133, 23, 46, 92, 184, 109, 218,
169, 79, 158, 33, 66, 132, 21, 42, 84, 168, 77, 154, 41, 82, 164, 85,
170, 73, 146, 57, 114, 228, 213, 183, 115, 230, 209, 191, 99, 198,
145, 63, 126, 252, 229, 215, 179, 123, 246, 241, 255, 227, 219, 171,
75, 150, 49, 98, 196, 149, 55, 110, 220, 165, 87, 174, 65, 130, 25,
50, 100, 200, 141, 7, 14, 28, 56, 112, 224, 221, 167, 83, 166, 81,
162, 89, 178, 121, 242, 249, 239, 195, 155, 43, 86, 172, 69, 138, 9,
18, 36, 72, 144, 61, 122, 244, 245, 247, 243, 251, 235, 203, 139, 11,
22, 44, 88, 176, 125, 250, 233, 207, 131, 27, 54, 108, 216, 173, 71,
142 };
double OCT_LOG[255] = { 0, 1, 25, 2, 50, 26, 198, 3, 223, 51, 238, 27, 104, 199, 75, 4,
100, 224, 14, 52, 141, 239, 129, 28, 193, 105, 248, 200, 8, 76, 113, 5,
138, 101, 47, 225, 36, 15, 33, 53, 147, 142, 218, 240, 18, 130, 69,
29, 181, 194, 125, 106, 39, 249, 185, 201, 154, 9, 120, 77, 228, 114,
166, 6, 191, 139, 98, 102, 221, 48, 253, 226, 152, 37, 179, 16, 145,
34, 136, 54, 208, 148, 206, 143, 150, 219, 189, 241, 210, 19, 92,
131, 56, 70, 64, 30, 66, 182, 163, 195, 72, 126, 110, 107, 58, 40,
84, 250, 133, 186, 61, 202, 94, 155, 159, 10, 21, 121, 43, 78, 212,
229, 172, 115, 243, 167, 87, 7, 112, 192, 247, 140, 128, 99, 13, 103,
74, 222, 237, 49, 197, 254, 24, 227, 165, 153, 119, 38, 184, 180,
124, 17, 68, 146, 217, 35, 32, 137, 46, 55, 63, 209, 91, 149, 188,
207, 205, 144, 135, 151, 178, 220, 252, 190, 97, 242, 86, 211, 171,
20, 42, 93, 158, 132, 60, 57, 83, 71, 109, 65, 162, 31, 45, 67, 216,
183, 123, 164, 118, 196, 23, 73, 236, 127, 12, 111, 246, 108, 161,
59, 82, 41, 157, 85, 170, 251, 96, 134, 177, 187, 204, 62, 90, 203,
89, 95, 176, 156, 169, 160, 81, 11, 245, 22, 235, 122, 117, 44, 215,
79, 174, 213, 233, 230, 231, 173, 232, 116, 214, 244, 234, 168, 80,
88, 175 };
if (( u == 0 )||( v == 0 ))
return 0;
else
{
int index=OCT_LOG[int(u-1)] + OCT_LOG[int(v-1)] + 1;
return OCT_EXP [index-1];
}
}
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
double *u, *v, *uv;
int mrows, ncols;
plhs[0] = mxCreateDoubleMatrix(1,1, mxREAL);
/* Assign pointers to each input and output. */
u = mxGetPr(prhs[0]);
v = mxGetPr(prhs[1]);
uv = mxGetPr(plhs[0]);
*uv = look_up(*u, *v);
}
The measurement code
function main
function test1()
for i=1:200
for j=1:200
gfmult_no_vec(i,j);
end
end
end
function test2()
for i=1:200
for j=1:200
gfmult_vec(i,j);
end
end
end
function test3()
for i=1:200
for j=1:200
gfmult_mex(i,j);
end
end
end
f1=#()test1();
t1=timeit(f1)
f2=#()test2();
t2=timeit(f2)
f3=#()test3();
t3=timeit(f3)
end
Report time:
t1 = 0.1934,
t2 = 1.1739,
t3 = 0.3584
This solution takes 0.0006 second in my computer (and it is vectorized):
u = randi(5,200,1)-1; % some arbitrary data including zeros
v = randi(5,200,1)-1; % some arbitrary data including zeros
[U,V] = ndgrid(u(u~=0),v(v~=0)); % make all possible combinations of u and v
val = zeros(length(u),length(v)); % initialize the output size, in case the last value in u or v is zero.
f = #(u,v) OCT_EXP(OCT_LOG(u)+OCT_LOG(v)+1);
val((u~=0),(v~=0)) = f(U,V);
Now val(u,v) = OCT_EXP(OCT_LOG(u)+OCT_LOG(v)+1) if u and v are both not zeros, otherwise val(u,v) = 0.
If you want gfmult to have a scalar input, then your first method seems to be the fastest way. However, I would define OCT_EXP and OCT_LOG outside the function and pass them to it, instead of assigning this values over and over:
function val = gfmult(OCT_EXP,OCT_LOG,u,v)
if (u==0)||(v==0)
val = 0;
else
val = OCT_EXP(OCT_LOG(u)+OCT_LOG(v)+1);
end
end
in my computer it reduces running time from 0.21444 (with your version) to 0.158 second for 100K iteration, which is not such a big improvement (0.05644 second), but if you have millions of those, it may be significant.

c++11 Aggregate Initialize two dimensional int vector from std::string dynamically?

I'm sorry if this has been asked before but i searched and couldn't find anything like the case i have, however i'm coming from C# so i'm still learning C++, i have a std::string that represents the int data for vector<vector<int>> like this:
{
{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100 },
{ 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220 }};
as you can see, the data is formatted same way when you aggregate initialize the vector<vector<int>>, how and what is the best way to load this data into vector<vector<int>> at runtime?
Please note, reformatting the data is not a problem since its coming from another application and i have the source code for that application and can change it to any format if it cannot be done with the supplied format.

Resources