File: get_vector.cc

package info (click to toggle)
semidef-oct 1%3A2003-4
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k
  • size: 1,392 kB
  • ctags: 251
  • sloc: fortran: 2,197; ansic: 686; cpp: 546; sh: 86; makefile: 62
file content (71 lines) | stat: -rw-r--r-- 1,573 bytes parent folder | download | duplicates (4)
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
//
// g e t _ v e c t o r : check that argument is a vector;
// return it if so.

//#define DEBUG

#include "ocst.h"

ColumnVector get_vector(const octave_value& arg, const std::string& caller, 
	int argnum,int& errflg)
{

  #ifdef DEBUG
  cout << "get_vector: entry from " << caller << " argument " 
       << argnum << ", errflg=" << errflg << endl;
  #endif
  ColumnVector retval(0);
  ostrstream errmesg;

  if(arg.is_empty() )
    return retval;

  if( 
    !( 
      arg.is_numeric_type() 
      && (
        arg.is_matrix_type() || arg.is_scalar_type() 
      ) 
    )
  )
  {
    errmesg << caller << "expecting real vector for argument " 
	<< argnum << ends;
    error(errmesg.str());
    errflg = 1;
    return retval;
  }
  else if( ! ( (arg.rows() == 1) || (arg.columns() == 1) ) )
  {
    errmesg << caller << "argument " << argnum << " (" 
	<< arg.rows() << "x" << arg.columns() << ") must be a vector" 
	<< ends;
    error(errmesg.str());
    errflg = 1;
    return retval;
  }
  else 
  {
    #ifdef DEBUG
    cout << "get_vector: normal return. Vector is" 
	<< arg.rows() << "x" << arg.columns()  << "; value="
	<< arg.vector_value() << endl;
    #endif
    Matrix myval = arg.matrix_value();
    int ii;
    if(arg.rows() == 1)
      {
        retval = ColumnVector( arg.columns() );
        for( ii = 0 ; ii < arg.columns() ; ii++)
          retval(ii) = myval(0,ii);
      }
    else
      {
        retval = ColumnVector( arg.rows() );
        for( ii = 0 ; ii < arg.rows() ; ii++)
          retval(ii) = myval(ii,0);
      }
    return retval;
  }
}