Browse Source

cmTakeSeqBldr.h/c : Completed code for cmTakeSeqBldrAlloc()/Free() and initial testing.

master
Kevin Larke 9 years ago
parent
commit
1b6a798401
2 changed files with 135 additions and 68 deletions
  1. 128
    63
      app/cmTakeSeqBldr.c
  2. 7
    5
      app/cmTakeSeqBldr.h

+ 128
- 63
app/cmTakeSeqBldr.c View File

40
   cmJsonH_t       jsH;
40
   cmJsonH_t       jsH;
41
   const cmChar_t* tlFn;
41
   const cmChar_t* tlFn;
42
   const cmChar_t* scFn;
42
   const cmChar_t* scFn;
43
-  cmTakeTsb_t*    takeV;
43
+  const cmChar_t* tlPrefixPath;
44
+
45
+  cmTakeTsb_t*    takeV;  // takeV[ takeN ]
44
   unsigned        takeN;
46
   unsigned        takeN;
47
+  
48
+  cmTlH_t        tlH;
49
+  cmScH_t         scH;
50
+
45
 } cmTsb_t;
51
 } cmTsb_t;
46
 
52
 
47
 cmTakeSeqBldrH_t cmTakeSeqBldrNullHandle = cmSTATIC_NULL_HANDLE;
53
 cmTakeSeqBldrH_t cmTakeSeqBldrNullHandle = cmSTATIC_NULL_HANDLE;
52
   return p;
58
   return p;
53
 }
59
 }
54
 
60
 
55
-cmTsbRC_t _cmTsbFree( cmTsb_t* p )
61
+cmTsbRC_t _cmTsbScoreTrkFree( cmTsb_t* p )
56
 {
62
 {
57
-  cmTsbRC_t       rc     = kOkTsbRC;
63
+  cmTsbRC_t rc = kOkTsbRC;
64
+  unsigned  i;
58
 
65
 
59
   if( cmJsonFinalize(&p->jsH) != kOkJsRC )
66
   if( cmJsonFinalize(&p->jsH) != kOkJsRC )
60
   {
67
   {
61
     rc = cmErrMsg(&p->err,kJsonFailTsbRC,"JSON object finalize failed.");
68
     rc = cmErrMsg(&p->err,kJsonFailTsbRC,"JSON object finalize failed.");
62
     goto errLabel;
69
     goto errLabel;
63
   }
70
   }
64
-
65
-  cmMemFree(p);
66
-
67
- errLabel:
68
-  return rc;
69
-}
70
-
71
-
72
-cmTsbRC_t cmTakeSeqBldrAlloc( cmCtx_t* ctx, cmTakeSeqBldrH_t* hp )
73
-{
74
-  cmTsbRC_t rc;
75
-  if((rc = cmTakeSeqBldrFree(hp)) != kOkTsbRC )
76
-    return kOkTsbRC;
77
-
78
-  cmTsb_t* p  = cmMemAllocZ(cmTsb_t,1);
79
-
80
-  cmErrSetup(&p->err,&ctx->rpt,"TakeSeqBldr");
81
-
82
-  p->ctx = *ctx;
83
-  hp->h  = p;
84
-
85
   
71
   
72
+  for(i=0; i<p->takeN; ++i)
73
+    cmMemPtrFree(&p->takeV[i].noteV);
86
 
74
 
87
-  return rc;
88
-}
75
+  cmMemPtrFree(&p->takeV);
89
 
76
 
90
-cmTsbRC_t cmTakeSeqBldrAllocFn( cmCtx_t* ctx, cmTakeSeqBldrH_t* hp, const cmChar_t* tsbFn )
91
-{
92
-  cmTsbRC_t rc;
93
-  if((rc = cmTakeSeqBldrAlloc(ctx,hp)) != kOkTsbRC )
94
-    return rc;
77
+  if( cmTimeLineFinalize(&p->tlH) != kOkTlRC )
78
+    rc = cmErrMsg(&p->err,kTimeLineFailTsbRC,"Time line object finalize failed.");
95
 
79
 
96
-  if((rc = cmTakeSeqBldrInitialize(*hp,tsbFn)) != kOkTsbRC )
97
-    return rc;
80
+  if( cmScoreFinalize(&p->scH) != kOkScRC )
81
+    rc = cmErrMsg(&p->err,kScoreFailTsbRC,"Score finalize failed.");
98
 
82
 
83
+ errLabel:
99
   return rc;
84
   return rc;
100
 }
85
 }
101
 
86
 
102
-cmTsbRC_t cmTakeSeqBldrFree( cmTakeSeqBldrH_t* hp )
103
-{
104
-  cmRC_t rc = kOkTsbRC;
105
-
106
-  if( hp == NULL || cmTakeSeqBldrIsValid(*hp)==false )
107
-    return kOkTsbRC;
108
 
87
 
109
-  cmTsb_t* p = _cmTsbHandleToPtr(*hp);
88
+cmTsbRC_t _cmTsbFree( cmTsb_t* p )
89
+{
90
+  cmTsbRC_t rc     = kOkTsbRC;
110
 
91
 
111
-  if((rc = _cmTsbFree(p)) != kOkTsbRC )
112
-    return rc;
92
+  if((rc = _cmTsbScoreTrkFree(p)) != kOkTsbRC )
93
+    goto errLabel;
113
 
94
 
114
-  hp->h = NULL;
95
+  cmMemFree(p);
115
 
96
 
97
+ errLabel:
116
   return rc;
98
   return rc;
117
 }
99
 }
118
 
100
 
119
-bool cmTakeSeqBldrIsValid( cmTakeSeqBldrH_t h )
120
-{  return h.h != NULL; }
121
-
122
 
101
 
123
-cmTsbRC_t cmTakeSeqBldrInitialize( cmTakeSeqBldrH_t h, const cmChar_t* tsbFn )
102
+cmTsbRC_t _cmTsbLoadScoreTrkFile( cmTsb_t* p, const cmChar_t* scoreTrkFn )
124
 {
103
 {
125
-  cmTsbRC_t       rc       = kOkTsbRC; 
126
-  cmTsb_t*        p        = _cmTsbHandleToPtr(h);
104
+  cmTsbRC_t       rc       = kOkTsbRC;
127
   cmJsonNode_t*   tkArrObj = NULL;
105
   cmJsonNode_t*   tkArrObj = NULL;
128
   cmJsRC_t        jsRC     = kOkJsRC;
106
   cmJsRC_t        jsRC     = kOkJsRC;
129
   const cmChar_t* errMsg   = NULL;
107
   const cmChar_t* errMsg   = NULL;
130
   unsigned        i;
108
   unsigned        i;
131
  
109
  
132
   // initialize the TSB json object
110
   // initialize the TSB json object
133
-  if(( rc = cmJsonInitializeFromFile(&p->jsH,tsbFn,&p->ctx)) != kOkJsRC )
111
+  if(( rc = cmJsonInitializeFromFile(&p->jsH,scoreTrkFn,&p->ctx)) != kOkJsRC )
134
   {
112
   {
135
-    rc = cmErrMsg(&p->err,kJsonFailTsbRC,"The Take Sequence Builder JSON file object could not be initialized from '%s'.",cmStringNullGuard(tsbFn));
113
+    rc = cmErrMsg(&p->err,kJsonFailTsbRC,"The Take Sequence Builder JSON file object could not be initialized from '%s'.",cmStringNullGuard(scoreTrkFn));
136
     goto errLabel;
114
     goto errLabel;
137
   }
115
   }
138
 
116
 
139
   // parse the header
117
   // parse the header
140
   if((jsRC = cmJsonMemberValues( cmJsonRoot(p->jsH), &errMsg,
118
   if((jsRC = cmJsonMemberValues( cmJsonRoot(p->jsH), &errMsg,
141
-        "tlFn",kStringTId,&p->tlFn,
142
-        "scFn",kStringTId,&p->scFn,
143
-        "takeArray",kArrayTId | kOptArgJsFl,&tkArrObj,
119
+        "timeLineFn",   kStringTId,              &p->tlFn,
120
+        "scoreFn",      kStringTId,              &p->scFn,
121
+        "tlPrefixPath", kStringTId,              &p->tlPrefixPath,
122
+        "takeArray",    kArrayTId | kOptArgJsFl, &tkArrObj,
144
         0 )) != kOkJsRC )
123
         0 )) != kOkJsRC )
145
   {
124
   {
146
     if( jsRC == kNodeNotFoundJsRC && errMsg != NULL )
125
     if( jsRC == kNodeNotFoundJsRC && errMsg != NULL )
147
       rc = cmErrMsg(&p->err,kParseFailTsbRC,"JSON file header parse failed missing required field:'%s'",errMsg);
126
       rc = cmErrMsg(&p->err,kParseFailTsbRC,"JSON file header parse failed missing required field:'%s'",errMsg);
148
     else
127
     else
149
       rc = cmErrMsg(&p->err,kParseFailTsbRC,"JSON file header parse failed.");
128
       rc = cmErrMsg(&p->err,kParseFailTsbRC,"JSON file header parse failed.");
129
+
130
+    goto errLabel;
150
   }
131
   }
151
 
132
 
152
   // count of take records
133
   // count of take records
153
-  unsigned      tkArrN = cmJsonChildCount(tkArrObj);
134
+  p->takeN = cmJsonChildCount(tkArrObj);
154
 
135
 
155
   // array of take records
136
   // array of take records
156
-  p->takeV  = cmMemAllocZ(cmTakeTsb_t,tkArrN);
137
+  p->takeV  = cmMemAllocZ(cmTakeTsb_t,p->takeN);
157
 
138
 
158
   // for each take record
139
   // for each take record
159
-  for(i=0; i<tkArrN; ++i)
140
+  for(i=0; i<p->takeN; ++i)
160
   {
141
   {
161
     cmJsonNode_t* takeObj    = NULL;
142
     cmJsonNode_t* takeObj    = NULL;
162
     cmJsonNode_t* noteArrObj = NULL;
143
     cmJsonNode_t* noteArrObj = NULL;
179
       if( jsRC == kNodeNotFoundJsRC && errMsg != NULL )
160
       if( jsRC == kNodeNotFoundJsRC && errMsg != NULL )
180
         rc = cmErrMsg(&p->err,kParseFailTsbRC,"JSON file take record parse failed missing required field:'%s'",errMsg);
161
         rc = cmErrMsg(&p->err,kParseFailTsbRC,"JSON file take record parse failed missing required field:'%s'",errMsg);
181
       else
162
       else
182
-        rc = cmErrMsg(&p->err,kParseFailTsbRC,"JSON file take record parse failed.");      
163
+        rc = cmErrMsg(&p->err,kParseFailTsbRC,"JSON file take record parse failed.");
164
+
165
+      goto errLabel;
183
     }
166
     }
184
 
167
 
185
     // get the count of note records
168
     // get the count of note records
211
           rc = cmErrMsg(&p->err,kParseFailTsbRC,"JSON file note record parse failed missing required field:'%s'",errMsg);
194
           rc = cmErrMsg(&p->err,kParseFailTsbRC,"JSON file note record parse failed missing required field:'%s'",errMsg);
212
         else
195
         else
213
           rc = cmErrMsg(&p->err,kParseFailTsbRC,"JSON file note record parse failed.");              
196
           rc = cmErrMsg(&p->err,kParseFailTsbRC,"JSON file note record parse failed.");              
197
+
198
+        goto errLabel;
214
       }
199
       }
215
     }
200
     }
216
   }
201
   }
202
+
203
+ errLabel:
204
+  if( rc != kOkTsbRC )
205
+    rc = _cmTsbScoreTrkFree(p);
206
+
207
+  return rc;
208
+}
209
+
210
+cmTsbRC_t cmTakeSeqBldrAlloc( cmCtx_t* ctx, cmTakeSeqBldrH_t* hp )
211
+{
212
+  cmTsbRC_t rc;
213
+  if((rc = cmTakeSeqBldrFree(hp)) != kOkTsbRC )
214
+    return kOkTsbRC;
215
+
216
+  cmTsb_t* p  = cmMemAllocZ(cmTsb_t,1);
217
+
218
+  cmErrSetup(&p->err,&ctx->rpt,"TakeSeqBldr");
219
+
220
+  p->ctx = *ctx;
221
+  hp->h  = p;
222
+
223
+  return rc;
224
+}
225
+
226
+cmTsbRC_t cmTakeSeqBldrAllocFn( cmCtx_t* ctx, cmTakeSeqBldrH_t* hp, const cmChar_t* scoreTrkFn )
227
+{
228
+  cmTsbRC_t rc;
229
+  if((rc = cmTakeSeqBldrAlloc(ctx,hp)) != kOkTsbRC )
230
+    return rc;
231
+
232
+  if((rc = cmTakeSeqBldrInitialize(*hp,scoreTrkFn)) != kOkTsbRC )
233
+    return rc;
234
+
235
+  return rc;
236
+}
237
+
238
+cmTsbRC_t cmTakeSeqBldrFree( cmTakeSeqBldrH_t* hp )
239
+{
240
+  cmRC_t rc = kOkTsbRC;
241
+
242
+  if( hp == NULL || cmTakeSeqBldrIsValid(*hp)==false )
243
+    return kOkTsbRC;
244
+
245
+  cmTsb_t* p = _cmTsbHandleToPtr(*hp);
246
+
247
+  if((rc = _cmTsbFree(p)) != kOkTsbRC )
248
+    return rc;
249
+
250
+  hp->h = NULL;
251
+
252
+  return rc;
253
+}
254
+
255
+bool cmTakeSeqBldrIsValid( cmTakeSeqBldrH_t h )
256
+{  return h.h != NULL; }
257
+
258
+
259
+cmTsbRC_t cmTakeSeqBldrInitialize( cmTakeSeqBldrH_t h, const cmChar_t* scoreTrkFn )
260
+{
261
+  cmTsbRC_t rc = kOkTsbRC; 
262
+  cmTsb_t*  p  = _cmTsbHandleToPtr(h);
263
+  
264
+  if(( rc = _cmTsbLoadScoreTrkFile( p, scoreTrkFn )) != kOkTsbRC )
265
+    return rc;
217
   
266
   
267
+  if( cmTimeLineInitializeFromFile(&p->ctx, &p->tlH, NULL, NULL, p->tlFn, p->tlPrefixPath ) != kOkTlRC )
268
+  {
269
+    rc = cmErrMsg(&p->err,kTimeLineFailTsbRC,"The time-line file '%s' could not be loaded.",p->tlFn);
270
+    goto errLabel;
271
+  }
272
+
273
+  if( cmScoreInitialize(&p->ctx, &p->scH, p->scFn, 0, NULL, 0, NULL, NULL, cmSymTblNullHandle ) != kOkScRC )
274
+  {
275
+    rc = cmErrMsg(&p->err,kScoreFailTsbRC,"The score file '%s' could not be loaded.",p->scFn);
276
+    goto errLabel;
277
+  }
278
+
218
  errLabel:
279
  errLabel:
280
+  if( rc != kOkTsbRC )
281
+    _cmTsbScoreTrkFree(p);
282
+
283
+
219
   return rc;
284
   return rc;
220
 }
285
 }
221
 
286
 
222
-cmTsbRC_t cmTakeSeqBldrLoadSection( cmTakeSeqBldrH_t h, unsigned tlMarkUid, bool overwriteFL )
287
+cmTsbRC_t cmTakeSeqBldrLoadTake( cmTakeSeqBldrH_t h, unsigned tlMarkUid, bool overwriteFL )
223
 {
288
 {
224
   cmTsbRC_t rc = kOkTsbRC;
289
   cmTsbRC_t rc = kOkTsbRC;
225
   return rc;
290
   return rc;
226
 }
291
 }
227
 
292
 
228
-cmTsbRC_t cmTakeSeqBldrUnloadSection( cmTakeSeqBldrH_t h, unsigned tlMarkUid )
293
+cmTsbRC_t cmTakeSeqBldrUnloadTake( cmTakeSeqBldrH_t h, unsigned tlMarkUid )
229
 {
294
 {
230
   cmTsbRC_t rc = kOkTsbRC;
295
   cmTsbRC_t rc = kOkTsbRC;
231
   return rc;
296
   return rc;
269
 
334
 
270
 cmTsbRC_t cmTakeSeqBldrTest( cmCtx_t* ctx )
335
 cmTsbRC_t cmTakeSeqBldrTest( cmCtx_t* ctx )
271
 {
336
 {
272
-  const cmChar_t*  tsbFn = "/home/kevin/src/cmkc/src/kc/data/assoc0.js";
337
+  const cmChar_t*  scoreTrkFn = "/home/kevin/src/cmkc/src/kc/data/assoc0.js";
273
   cmTakeSeqBldrH_t tsbH  = cmTakeSeqBldrNullHandle;
338
   cmTakeSeqBldrH_t tsbH  = cmTakeSeqBldrNullHandle;
274
   cmTsbRC_t        tsbRC = kOkTsbRC;
339
   cmTsbRC_t        tsbRC = kOkTsbRC;
275
 
340
 
276
-  if((tsbRC = cmTakeSeqBldrAllocFn(ctx, &tsbH, tsbFn )) != kOkTsbRC )
277
-    return cmErrMsg(&ctx->err,tsbRC,"TSB Allocate and parse '%s' failed.",tsbFn);
341
+  if((tsbRC = cmTakeSeqBldrAllocFn(ctx, &tsbH, scoreTrkFn )) != kOkTsbRC )
342
+    return cmErrMsg(&ctx->err,tsbRC,"TSB Allocate and parse '%s' failed.",scoreTrkFn);
278
 
343
 
279
   if((tsbRC = cmTakeSeqBldrFree(&tsbH)) != kOkTsbRC )
344
   if((tsbRC = cmTakeSeqBldrFree(&tsbH)) != kOkTsbRC )
280
     return cmErrMsg(&ctx->err,tsbRC,"TSB Free failed.");
345
     return cmErrMsg(&ctx->err,tsbRC,"TSB Free failed.");

+ 7
- 5
app/cmTakeSeqBldr.h View File

10
   {
10
   {
11
     kOkTsbRC = cmOkRC,
11
     kOkTsbRC = cmOkRC,
12
     kJsonFailTsbRC,
12
     kJsonFailTsbRC,
13
-    kParseFailTsbRC
13
+    kParseFailTsbRC,
14
+    kTimeLineFailTsbRC,
15
+    kScoreFailTsbRC
14
   };
16
   };
15
 
17
 
16
   typedef cmRC_t     cmTsbRC_t;
18
   typedef cmRC_t     cmTsbRC_t;
19
   extern cmTakeSeqBldrH_t cmTakeSeqBldrNullHandle;
21
   extern cmTakeSeqBldrH_t cmTakeSeqBldrNullHandle;
20
 
22
 
21
   cmTsbRC_t cmTakeSeqBldrAlloc(   cmCtx_t* ctx, cmTakeSeqBldrH_t* hp );
23
   cmTsbRC_t cmTakeSeqBldrAlloc(   cmCtx_t* ctx, cmTakeSeqBldrH_t* hp );
22
-  cmTsbRC_t cmTakeSeqBldrAllocFn( cmCtx_t* ctx, cmTakeSeqBldrH_t* hp, const cmChar_t* tsbFn );
24
+  cmTsbRC_t cmTakeSeqBldrAllocFn( cmCtx_t* ctx, cmTakeSeqBldrH_t* hp, const cmChar_t* scoreTrkFn );
23
 
25
 
24
   cmTsbRC_t cmTakeSeqBldrFree( cmTakeSeqBldrH_t* hp );
26
   cmTsbRC_t cmTakeSeqBldrFree( cmTakeSeqBldrH_t* hp );
25
 
27
 
26
   bool      cmTakeSeqBldrIsValid( cmTakeSeqBldrH_t h );
28
   bool      cmTakeSeqBldrIsValid( cmTakeSeqBldrH_t h );
27
 
29
 
28
-  cmTsbRC_t cmTakeSeqBldrInitialize( cmTakeSeqBldrH_t h, const cmChar_t* tsbFn );
30
+  cmTsbRC_t cmTakeSeqBldrInitialize( cmTakeSeqBldrH_t h, const cmChar_t* scoreTrkFn );
29
 
31
 
30
   // Load a group of notes delinated by a time-line marker into the sequence.
32
   // Load a group of notes delinated by a time-line marker into the sequence.
31
   // If notes overlap with existing notes according to their 'scEvtIdx' attribute:
33
   // If notes overlap with existing notes according to their 'scEvtIdx' attribute:
38
   //
40
   //
39
   // If no overlapping notes exist then the incoming section is aligned by estimating
41
   // If no overlapping notes exist then the incoming section is aligned by estimating
40
   // the alignment with existing notes using the score alone.
42
   // the alignment with existing notes using the score alone.
41
-  cmTsbRC_t cmTakeSeqBldrLoadSection(   cmTakeSeqBldrH_t h, unsigned tlMarkUid, bool overwriteFL );
42
-  cmTsbRC_t cmTakeSeqBldrUnloadSection( cmTakeSeqBldrH_t h, unsigned tlMarkUid );
43
+  cmTsbRC_t cmTakeSeqBldrLoadTake(   cmTakeSeqBldrH_t h, unsigned tlMarkUid, bool overwriteFL );
44
+  cmTsbRC_t cmTakeSeqBldrUnloadTake( cmTakeSeqBldrH_t h, unsigned tlMarkUid );
43
   
45
   
44
   // Fill in missing notes from the score. 
46
   // Fill in missing notes from the score. 
45
   cmTsbRC_t cmTakeSeqBldrInsertScoreNotes( cmTakeSeqBldrH_t h, unsigned begScEvtIdx, unsigned endScEvtId );
47
   cmTsbRC_t cmTakeSeqBldrInsertScoreNotes( cmTakeSeqBldrH_t h, unsigned begScEvtIdx, unsigned endScEvtId );

Loading…
Cancel
Save